Java中的jlink功能允许您为应用程序创建一个单独的运行时环境。通常,jlink会将此应用程序所需的所有模块都压缩到一个名为“modules”的大型文件中。
我想知道是否有一种方法可以忽略一些模块,以便它们成为单独的jar文件,但是jlink仍然能够找到它们并运行应用程序。是否有这样做的方法?
其中一个用例是如果您正在处理LGPL库。您可能希望将LGPL库留在模块集之外,作为单独的jar文件,以便想要交换jar文件的人可以(这是LGPL所要求的)。
Jlink具有“requires static”语句,可用于要求可选模块。我认为使用此功能可能有用,但我遇到了问题。
当我使用requires static编译项目时,我可以通过使用java的“--add-modules”开关来包含模块来运行它。但是,一旦我对其运行jlink以创建自定义映像,我就无法使其工作。
当我尝试运行已链接的项目时,我会得到ClassNotFound异常。
当您在项目上运行jlink时,它会创建一个定制的运行时图像。该项目的所有主要模块都放入名为“modules”的映像文件中。我使用jimage命令检查了此映像文件,并确认该映像文件不包含我声明为静态的模块。
使用jlink,我已经尝试将声明为静态的模块的jar文件放入带有模块图像的目录中。然后,我尝试使用“--add-modules”手动添加模块,以及使用-p和-cp指定具有jar的目录,但我仍然会遇到ClassNotFound异常。
我想知道是否有一种方法可以忽略一些模块,以便它们成为单独的jar文件,但是jlink仍然能够找到它们并运行应用程序。是否有这样做的方法?
其中一个用例是如果您正在处理LGPL库。您可能希望将LGPL库留在模块集之外,作为单独的jar文件,以便想要交换jar文件的人可以(这是LGPL所要求的)。
Jlink具有“requires static”语句,可用于要求可选模块。我认为使用此功能可能有用,但我遇到了问题。
当我使用requires static编译项目时,我可以通过使用java的“--add-modules”开关来包含模块来运行它。但是,一旦我对其运行jlink以创建自定义映像,我就无法使其工作。
当我尝试运行已链接的项目时,我会得到ClassNotFound异常。
当您在项目上运行jlink时,它会创建一个定制的运行时图像。该项目的所有主要模块都放入名为“modules”的映像文件中。我使用jimage命令检查了此映像文件,并确认该映像文件不包含我声明为静态的模块。
使用jlink,我已经尝试将声明为静态的模块的jar文件放入带有模块图像的目录中。然后,我尝试使用“--add-modules”手动添加模块,以及使用-p和-cp指定具有jar的目录,但我仍然会遇到ClassNotFound异常。