<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-resources</id>
<!-- here the phase you need -->
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/windows/jre</outputDirectory>
<resources>
<resource>
<directory>${java.home}</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
但程序没有启动。它显示了一个会立即消失的小对话框(看起来是空白的,但它消失得太快了,以至于我没有真正注意到它)。
更新:删除我以前的答案,并用测试的工作示例替换
更新2:pom.xml现在下载JRE tgz并将其解包,launch4j exe使用它并运行。我添加了注释来解释它是如何工作的。
我建议只使用32位exe和JRE。使用64位JRE的唯一原因是如果您的程序需要使用超过4 GB的RAM。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.akathist.encc</groupId>
<artifactId>mavenproject1</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<!-- This is the win32 JRE tgz hosted by alfresco - https://mvnrepository.com/artifact/com.oracle.java/jre -->
<dependency>
<groupId>com.oracle.java</groupId>
<artifactId>jre</artifactId>
<classifier>win32</classifier>
<type>tgz</type>
<version>1.8.0_131</version>
</dependency>
</dependencies>
<repositories>
<repository>
<!-- this repository has the JRE tgz -->
<id>alfresco</id>
<url>https://artifacts.alfresco.com/nexus/content/repositories/public/</url>
</repository>
</repositories>
<build>
<plugins>
<plugin>
<!-- this is to extract the JRE tgz file we downloaded -->
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.5.1</version>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<configuration>
<includeGroupIds>com.oracle.java</includeGroupIds>
<includeTypes>tgz</includeTypes>
<includeArtifactIds>jre</includeArtifactIds>
<includeClassifiers>win32</includeClassifiers>
<outputDirectory>target/win32</outputDirectory>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<!-- This calls launch4j to create the program EXE -->
<groupId>com.akathist.maven.plugins.launch4j</groupId>
<artifactId>launch4j-maven-plugin</artifactId>
<executions>
<execution>
<id>l4j-clui</id>
<phase>package</phase>
<goals>
<goal>launch4j</goal>
</goals>
<configuration>
<headerType>console</headerType>
<outfile>target/encc.exe</outfile>
<jar>target/mavenproject1-1.0-SNAPSHOT.jar</jar>
<errTitle>encc</errTitle>
<classPath>
<mainClass>com.akathist.encc.Clui</mainClass>
<addDependencies>false</addDependencies>
<preCp>anything</preCp>
</classPath>
<jre>
<path>./win32/java</path>
</jre>
<versionInfo>
<fileVersion>1.2.3.4</fileVersion>
<txtFileVersion>txt file version?</txtFileVersion>
<fileDescription>a description</fileDescription>
<copyright>my copyright</copyright>
<productVersion>4.3.2.1</productVersion>
<txtProductVersion>txt product version</txtProductVersion>
<productName>E-N-C-C</productName>
<internalName>ccne</internalName>
<originalFilename>original.exe</originalFilename>
</versionInfo>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.akathist.encc</groupId>
<artifactId>mavenproject1</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<build>
<plugins>
<plugin>
<!-- This copies the JRE used to do the build from java.home - should be 32 bit Windows JRE -->
<artifactId>maven-resources-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>copy-resources</id>
<!-- here the phase you need -->
<phase>package</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${basedir}/target/win32/java</outputDirectory>
<resources>
<resource>
<directory>${java.home}</directory>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<!-- This calls launch4j to create the program EXE -->
<groupId>com.akathist.maven.plugins.launch4j</groupId>
<artifactId>launch4j-maven-plugin</artifactId>
<executions>
<execution>
<id>l4j-clui</id>
<phase>package</phase>
<goals>
<goal>launch4j</goal>
</goals>
<configuration>
<headerType>console</headerType>
<outfile>target/encc.exe</outfile>
<jar>target/mavenproject1-1.0-SNAPSHOT.jar</jar>
<errTitle>encc</errTitle>
<classPath>
<mainClass>com.akathist.encc.Clui</mainClass>
<addDependencies>false</addDependencies>
<preCp>anything</preCp>
</classPath>
<jre>
<path>./win32/java</path>
</jre>
<versionInfo>
<fileVersion>1.2.3.4</fileVersion>
<txtFileVersion>txt file version?</txtFileVersion>
<fileDescription>a description</fileDescription>
<copyright>my copyright</copyright>
<productVersion>4.3.2.1</productVersion>
<txtProductVersion>txt product version</txtProductVersion>
<productName>E-N-C-C</productName>
<internalName>ccne</internalName>
<originalFilename>original.exe</originalFilename>
</versionInfo>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
问题内容: 我了解launch4j不会将JRE捆绑在中,但是您必须将其放置在它旁边。我的问题是,我应该怎么做?Maven是否有一种方法可以自动找到并复制我用来构建应用程序的JDK的JRE并将其复制到给定目录? 我试图做这样的事情: 但是程序无法启动。它显示了一个小对话框,该对话框立即消失了(它似乎是空白的,但是消失得太快了,我无法真正注意到它)。 问题答案: 更新:删除了我以前的答案,并用经过测试
我正在使用maven和OpenJDK12在JavaFX中构建一个小应用程序。但是,我需要我的.jar包含一个捆绑的JRE,这样它就可以在windows OS上运行,而不需要下载适当的JRE。 Im也使用launch4j-maven-plugin 我在SOF上尝试了几种解决方案,但没有成功。一些主题提到了maven-shade-plugin,但它对我不起作用。我不能用它打包外部文件夹。 我现在的PO
我用的是edu。seis理学学士。启动4J插件,使用gradle构建脚本构建可分发的应用程序。我正试图用一个捆绑的JRE来制作这些。 这是格雷德尔的剧本 令人沮丧的是,这创建了一个运行的应用程序(由gradle任务createExe创建的exe),但显然没有捆绑在/旁边的JRE,大概是因为它运行是因为它返回到使用系统jre,这使得测试变得困难。如果我把一个故意损坏的jre放在 /jre/它似乎仍然
只是为了说清楚。我可以运行.exe文件而没有任何错误,但是当我把它交给我朋友时,他们得到了上面提到的错误。
我使用Java已经有一段时间了,足够长的时间来开始使用GUI生成自己的程序,而不仅仅是在Eclipse中运行的教科书中的小示例程序。我希望通过将可执行Jar封装到EXE中,使我的程序对用户(特别是Windows用户)更加友好。所以我找到了Launch4j,它似乎做了一个相当好的工作,但我不知道该程序中一半以上的选项是什么意思(我花了一个小时才弄清楚如何让它做一个功能性的Exe)。我把它交给一个fr
Java在k:\test\jre7\bin\Java.exe中,我的jar是k:\test\pllsolver-0.2alpha.jar 此外,我还不知道这是否会成为一个问题,但可执行文件和数据/需要在同一个目录中。我计划稍后做更好的pathing,但我对Windows ENV变量没有一个清晰的理解。