用于启动 Nexus 3.0 的 shell 脚本现在调用 install4j 启动器:
case "$1" in
start)
echo "Starting nexus"
$INSTALL4J_JAVA_PREFIX nohup "$app_java_home/bin/java" -server -Dinstall4j.jvmDir="$app_java_home" -Dexe4j.moduleName="$prg_dir/$progname" "-Dinstall4j.launcherId=245" "-Dinstall4j.swt=false" "$vmov_1" "$vmov_2" "$vmov_3" "$vmov_4" "$vmov_5" $INSTALL4J_ADD_VM_PARAMS -classpath "$local_classpath" com.install4j.runtime.launcher.UnixLauncher start 9d17dc87 "" "" org.apache.karaf.main.Main > /dev/null 2>&1 &
$INSTALL4J_JAVA_PREFIX 评估为单个命令 su 以更改用户。不幸的是,似乎没有人测试过它可以在 debian 下工作。这是使用 set -x 的结果:
root@nexus:~# /etc/init.d/nexus start
Starting nexus
+ exit 0
+ su - nexus -c nohup /usr/lib/jvm/java-8-oracle/jre/bin/java -server -Dinstall4j.jvmDir=/usr/lib/jvm/java-8-oracle/jre -Dexe4j.moduleName=/usr/local/nexus/bin/nexus -Dinstall4j.launcherId=245 -Dinstall4j.swt=false -Di4jv=0 -Di4jv=0 -Di4jv=0 -Di4jv=0 -Di4jv=0 -Xms256M -Xmx768M -XX:+UnlockDiagnosticVMOptions -XX:+UnsyncloadClass -Djava.net.preferIPv4Stack=true -Dkaraf.home=. -Dkaraf.base=. -Dkaraf.etc=etc -Djava.util.logging.config.file=etc/java.util.logging.properties -Dkaraf.data=/var/nexus -Dkaraf.instances=/var/nexus/instances -Djava.io.tmpdir=/var/nexus/tmp -Dkaraf.startLocalConsole=false -Di4j.vpt=true -classpathroot@nexus:~# /usr/local/nexus/.install4j/i4jruntime.jar:/usr/local/nexus/lib/boot/org.apache.karaf.main-4.0.3.jar:/usr/local/nexus/lib/boot/org.osgi.core-6.0.0.jar:/usr/local/nexus/lib/boot/org.apache.karaf.diagnostic.boot-4.0.3.jar:/usr/local/nexus/lib/boot/org.apache.karaf.jaas.boot-4.0.3.jar:/usr/local/nexus/lib/boot/nexus-branding.jar com.install4j.runtime.launcher.UnixLauncher start 9d17dc87 org.apache.karaf.main.Main
su: invalid option -- 'D'
在完整命令中双引号和转义使用的双引号无济于事,因为 java vm 启动但在 install4j 代码中失败并出现异常:
WARN: file:/root/etc/config.properties is not found, so not loaded
Error occurred shutting down framework: java.lang.NumberFormatException: null
java.lang.NumberFormatException: null
at java.lang.Integer.parseInt(Integer.java:542)
at java.lang.Integer.parseInt(Integer.java:615)
at org.apache.karaf.main.ConfigProperties.<init>(ConfigProperties.java:222)
at org.apache.karaf.main.Main.updateInstancePidAfterShutdown(Main.java:221)
at org.apache.karaf.main.Main.main(Main.java:188)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.exe4j.runtime.LauncherEngine.launch(LauncherEngine.java:62)
at com.install4j.runtime.launcher.UnixLauncher.main(UnixLauncher.java:60)
是否有人已经修复了脚本中的行,以便除 root 之外的其他用户可以运行 nexus?
顺便说一句 - 谁要求包含这个可怕的 install4j 膨胀软件?