Java 如何将额外文件与jlink映像捆绑在一起

Java 如何将额外文件与jlink映像捆绑在一起,java,gradle,build.gradle,gradle-plugin,jlink,Java,Gradle,Build.gradle,Gradle Plugin,Jlink,我正在使用Gradle和发布我的软件。不幸的是,我不知道如何在映像中包含某些文件(例如README.md、一些测试输入等)。我假设它需要在build.gradle中进行一些工作,但到目前为止我还没有弄明白 使用应用程序插件的distZip功能可以很容易地做到这一点,但我更喜欢使用jlink映像进行分发,这样用户就不需要安装Java 这是否可能与jlink有关?如果没有,这似乎是一个巨大的缺点。多亏了@VGR的有用评论,我在build.gradle中找到了解决问题的方法: def JLINK_DI

我正在使用Gradle和发布我的软件。不幸的是,我不知道如何在映像中包含某些文件(例如README.md、一些测试输入等)。我假设它需要在
build.gradle
中进行一些工作,但到目前为止我还没有弄明白

使用
应用程序
插件的
distZip
功能可以很容易地做到这一点,但我更喜欢使用jlink映像进行分发,这样用户就不需要安装Java


这是否可能与jlink有关?如果没有,这似乎是一个巨大的缺点。

多亏了@VGR的有用评论,我在
build.gradle中找到了解决问题的方法:

def JLINK_DIR = "$buildDir/myApp"

tasks.jlink.doLast {
    copy {
        from("/") {
            include "README.md", "LICENSE"
        }
        into JLINK_DIR + "/docs"
    }
    copy {
        includeEmptyDirs = false
        from("/path/to/sample/input") {
            include "sample_input_1/*"
            include "sample_input_2/*"
            exclude "output"
        }
        into JLINK_DIR + "/sample_input"
    }
}

和特别有帮助。

谢谢你的帮助,它真的很有帮助。对我来说,我试图添加到安装程序。我必须做到以下几点:

def JLINK_DIR = "$buildDir/jpackage/MyApp"

tasks.jpackage.doFirst {
    copy {
        from("/config") {
            include "config.properties"
        }
        into JLINK_DIR + "/config"
    }
}

jlink
只是组装模块;文件的添加是在创建将链接的每个模块时完成的。像测试输入这样的东西可能应该放在模块的.jar文件中,在那里它们可以作为文件进行访问。可以使用
jmod
的文件类别选项将其他文件包括在.jmod文件中,如
--手册页
--配置
--法律声明
。我不知道如何使用您引用的Gradle插件完成此操作。@VGR:谢谢您的回复。当我说“测试输入”时,我不是指单元测试,而是指当我的用户(使用我的软件)遵循自述中概述的教程时可以处理的示例文件。因此,在我看来,.jar是一个错误的托管位置,因为他们无法使用我软件中的文件选择器在其中导航。jmod对我来说是新事物,但它似乎不利于在一个简单的文本编辑器(如自述文件)中打开,这正是我希望让我的用户尽可能简单的事情。值得注意的是,您可以对jlink的图像树执行任何操作。您可以自由添加自己的目录,包括示例数据目录。您可以将自述文件放在图像树的根目录中,或者放在您选择的新目录中,例如
docs
。要让程序在该目录中查找,可能需要修改由jlink的
--launcher
选项生成的可执行脚本,以便它将该目录作为系统属性或命令行参数传递。@VGR:听起来正是我想要做的!我实际上不需要该程序查看任何目录,我可以依靠用户在那里导航。如果您在
build.gradle
中发布了一个如何使用Groovy实现自动化的示例作为答案,我很乐意接受。我很愿意,但我对Groovy或gradle知之甚少。希望有人会站出来。如果没有,我可以研究一下,在时间允许的情况下尝试一下。