Hi, There are systems that update LD_LIBRARY_PATH or directly return JNI_TRUE in method RequiresSetenv(const char *jvmpath) from java_md.c file to request re-execution of the current executable. This leads to the fact that jpackage application adds some provided arguments twice.
Bug: https://bugs.openjdk.java.net/browse/JDK-8248239 Fix: http://cr.openjdk.java.net/~avoitylov/webrev.8248239.00/ The root cause of the issue is that jpackage application expects one number of arguments but JLI reexecutes them with another number of arguments. For example, a jpackage application can be run with arguments: ./app/bin/app -Dparam2=Param2 B1 B2 B3 it adds arguments from the config file and calls JLI with arguments: app/bin/app -classpath -Dparam1=Param1 -m com.hello/com.hello.Hello -Dparam2=Param2 B1 B2 B3 JLI re-executes the app with new arguments so the app adds some arguments one more time after the re-execution. ./app/bin/app -classpath -Dparam1=Param1 -m com.hello/com.hello.Hello -classpath -Dparam1=Param1 -m com.hello/com.hello.Hello -Dparam2=Param2 B1 B2 B3 A step by step example that illustrates the issue: Run jpackage to create an executable application: jpackage --dest output --name app --type app-image --module-path input-modules --module com.hello/com.hello.Hello --arguments "A1 A2 A3" --verbose --java-options -Dparam1=Param1 Executable application with the app/lib/app/app.cfg config file is created: ---- app.cfg ---- [Application] app.name=app app.version=1.0 app.runtime=$ROOTDIR/lib/runtime app.identifier=com.hello app.classpath= app.mainmodule=com.hello/com.hello.Hello [JavaOptions] java-options=-Dparam1=Param1 [ArgOptions] arguments=A1 arguments=A2 arguments=A3 ----------- Run the application: ./output/app/bin/app -Dparam2=Param2 B1 B2 B3 Chain of JDK methods execution: LinuxLauncher main() args: 5 [./app/bin/app -Dparam2=Param2 B1 B2 B3 ] AppLauncher createJvmLauncher() args: 4 [-Dparam2=Param2 B1 B2 B3 ] JvmLauncher.cpp Jvm::initFromConfigFile() - adds JavaOptions from app.cfg args: 10 [app/bin/app -classpath -Dparam1=Param1 -m com.hello/com.hello.Hello -Dparam2=Param2 B1 B2 B3 ] AppLauncher Jvm::launch() - JLI re-executes the app LinuxLauncher main() args: 10 [app/bin/app -classpath -Dparam1=Param1 -m com.hello/com.hello.Hello -Dparam2=Param2 B1 B2 B3 ] AppLauncher createJvmLauncher() args: 9 [-classpath -Dparam1=Param1 -m com.hello/com.hello.Hello -Dparam2=Param2 B1 B2 B3 ] JvmLauncher.cpp Jvm::initFromConfigFile() - adds JavaOptions from app.cfg args: 15 [./app/bin/app -classpath -Dparam1=Param1 -m com.hello/com.hello.Hello -classpath -Dparam1=Param1 -m com.hello/com.hello.Hello -Dparam2=Param2 B1 B2 B3 ] ^^^ Some arguments like "-classpath -Dparam1=Param1 -m com.hello/com.hello.Hello" are added twice. Tested with test/jdk/tools/jpackage/share/jdk/jpackage with no regressions on Linux, Windows, Mac. On systems affected, the tests now pass. Thanks, -Aleksei