在经历了很多痛苦之后,我已经模块化了我的 Java 9 应用程序,但现在一切似乎都在工作,我想为我的应用程序创建一个本机启动器。
我使用 jlink 来做到这一点。
这是我用来调用 jlink 的 Gradle 任务:
task jlink(type: Exec) {
dependsOn(':rawhttp-core:jar', ':java9-nullable:jar')
def javaHome = System.properties['java.home']
def libs = configurations.runtime.collect { it.absolutePath }
libs += "$javaHome/jmods"
libs += jar.archivePath.absolutePath
commandLine 'jlink', '-p', libs.join(File.pathSeparator),
'--add-modules', 'com.athaydes.rawhttp.cli',
'--launcher', 'rawhttp=com.athaydes.rawhttp.cli/com.athaydes.rawhttp.cli.Main',
'--strip-debug', '--compress=2',
'--no-header-files', '--no-man-pages',
'--output', 'dist'
doFirst {
delete file('dist')
}
}
这可行,我可以使用启动器启动 Java 应用程序:
dist/bin/rawhttp
但是当我在 Linux 中添加符号链接时,它就不起作用了......
这是我添加链接的方法:
ln -s $(pwd)/rawhttp-cli/dist/bin/rawhttp /usr/local/bin/rawhttp
当我跑rawhttp
我得到这个错误:
/usr/local/bin/rawhttp: 4: /usr/local/bin/rawhttp: /usr/local/bin/java: not found
因此,看起来生成的启动器不知道如何引用相对于自身的其他文件!在我看来,这是为启动器编写代码的人的一个基本错误!
这是生成的启动器文件:
#!/bin/sh
JLINK_VM_OPTIONS=
DIR=`dirname $0`
$DIR/java $JLINK_VM_OPTIONS -m com.athaydes.rawhttp.cli/com.athaydes.rawhttp.cli.Main $@
有谁知道不涉及手动修复 Java 的 jlink 正在生成的启动器的解决方法?
我使用的 Java 版本:9.0.4+11 操作系统:Ubuntu