为什么jlink会创建一个无法在Linux中进行符号链接的启动器?

时间:2018-03-11 16:17:17

标签: java java-9 jlink

我在痛苦之后模块化了我的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

0 个答案:

没有答案