我想在我的可执行JAR中捆绑一个JRE,这样exe就可以在任何系统上运行。我试过Launch4j,但这种方法要求我同时提供JRE和exe。根据我的要求,我不应该使用安装程序来提供,也不应该在客户机上提取/安装JRE。我如何把JRE放入JAR中并使用它?
h22fl7wq1#
你不能把JRE放在JAR文件里(你可以......但是没有用)。你需要做的是构建和分发一个安装程序。在Java 9之前,推荐的创建安装程序的方法是使用商业或开源的安装程序生成器。(Google会帮你找到一个。)也可以将JRE嵌入到ZIP文件中,如下所述:
ZIP文件包含JRE和应用程序JAR,以及它需要的其他文件。用户必须解压缩ZIP文件才能安装应用程序。..但是它在客户端系统中复制了几乎100 MB的全部JRE。是否可以使JRE轻量化?不完全是。分发JRE最(法律的)的轻量级方法是分发Oracle Java安装程序。请注意,Java二进制许可证禁止分发精简版JRE。如果您想走这条路,请先与律师交谈!!*分发带有嵌入式JRE的Java应用程序可以说是一件坏事:
从Java 9开始,有一个比在安装程序中包含一个标准JRE更好的解决方案。使用新的jlink实用程序为您的应用程序创建一个定制的JRE;有关教程,请参见https://www.baeldung.com/jlink,以及Oracle Jlink manual entry。注意,jlink解决了我们上面提到的嵌入式JRE的问题,但是它明确地使您有责任1以新的jlink发行版的形式向您的用户提供JVM安全补丁。1 -实际上,应用程序供应商/厂商有责任为客户升级嵌入式JRE提供建议和帮助。不幸的是,许多厂商忽视了这一点,导致客户运行的应用程序带有已知的Java漏洞,Sun/Oracle受到指责......不公平......因为厂商的失败。
jlink
fwzugrvs2#
它确实对我的launch 4j起作用了首先创建一个应用程序文件夹,然后打开launch 4j并键入jar文件、输出文件(应位于应用程序文件夹中),以及图标(请在应用程序文件夹中)。然后转到JRE部分,在捆绑的JRE路径中键入JRE-{版本UR使用},然后放置选项仅使用私有JDK运行时,然后将最小版本放置到UR Java版本,然后去jdk安装,复制bin和lib文件夹,然后创建一个jre-{version ur using}文件夹,然后粘贴这些文件夹,然后编译成exe!
kuhbmx9i3#
迟到总比不来好。我在pom.xml中使用maven-shade-plugin如下:
<plugin> <artifactId>maven-shade-plugin</artifactId> <version>2.4.3</version> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>${mainClass}</mainClass> </transformer> </transformers> <!-- If false the shaded artifact takes the normal artifact name, such as, "core-tools-1.0-SNAPSHOT.jar"--> <!-- Meanwhile, another non-shaded version takes the prefix Original, such as "Original-core-tools-1.0-SNAPSHOT.jar"--> <shadedArtifactAttached>false</shadedArtifactAttached> <!-- Exclude signed Manifests from the UberJar --> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> <filter> <artifact>*:*</artifact> <includes> <include>sun/misc/**</include> </includes> </filter> </filters> </configuration> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> </execution> </executions> </plugin>
3条答案
按热度按时间h22fl7wq1#
你不能把JRE放在JAR文件里(你可以......但是没有用)。
你需要做的是构建和分发一个安装程序。在Java 9之前,推荐的创建安装程序的方法是使用商业或开源的安装程序生成器。(Google会帮你找到一个。)
也可以将JRE嵌入到ZIP文件中,如下所述:
ZIP文件包含JRE和应用程序JAR,以及它需要的其他文件。用户必须解压缩ZIP文件才能安装应用程序。
..但是它在客户端系统中复制了几乎100 MB的全部JRE。是否可以使JRE轻量化?
不完全是。分发JRE最(法律的)的轻量级方法是分发Oracle Java安装程序。请注意,Java二进制许可证禁止分发精简版JRE。如果您想走这条路,请先与律师交谈!!*
分发带有嵌入式JRE的Java应用程序可以说是一件坏事:
从Java 9开始,有一个比在安装程序中包含一个标准JRE更好的解决方案。使用新的
jlink
实用程序为您的应用程序创建一个定制的JRE;有关教程,请参见https://www.baeldung.com/jlink,以及Oracle Jlink manual entry。注意,
jlink
解决了我们上面提到的嵌入式JRE的问题,但是它明确地使您有责任1以新的jlink发行版的形式向您的用户提供JVM安全补丁。1 -实际上,应用程序供应商/厂商有责任为客户升级嵌入式JRE提供建议和帮助。不幸的是,许多厂商忽视了这一点,导致客户运行的应用程序带有已知的Java漏洞,Sun/Oracle受到指责......不公平......因为厂商的失败。
fwzugrvs2#
它确实对我的launch 4j起作用了
首先创建一个应用程序文件夹,然后打开launch 4j并键入jar文件、输出文件(应位于应用程序文件夹中),以及图标(请在应用程序文件夹中)。然后转到JRE部分,在捆绑的JRE路径中键入JRE-{版本UR使用},然后放置选项仅使用私有JDK运行时,然后将最小版本放置到UR Java版本,然后去jdk安装,复制bin和lib文件夹,然后创建一个jre-{version ur using}文件夹,然后粘贴这些文件夹,然后编译成exe!
kuhbmx9i3#
迟到总比不来好。我在pom.xml中使用maven-shade-plugin如下: