使用maven为exe包装java文件

时间:2012-01-20 18:59:19

标签: java windows maven exe launch4j

Maven的Launch4J端口记录很严重,我没有按照我想要的方式使用它。

是否有一些好的Maven插件可以按照以下标准生成exe文件(如果可能的话,至少包含其中一些):

  • 没有包装罐子
  • Jars可以位于相对于jar文件的不同目录中
  • 罐子完全是依赖性,因此将新罐子添加到具有不同名称的目录中没有任何效果。
  • 可以通过文件配置Xmx和Xms
  • 如果可能,进程以.exe名称运行(不太重要)

2 个答案:

答案 0 :(得分:1)

你可以使用插件

            <plugin>
                <groupId>com.akathist.maven.plugins.launch4j</groupId>
                <artifactId>launch4j-maven-plugin</artifactId>
                <version>1.5.2</version>
            </plugin>

用于将jar文件包装在exe。

事先你可以把所有东西都包在一个罐子里,如aberes的答案所述。

因此,例如,配置可能如下所示:

                   <plugin>
                    <groupId>com.akathist.maven.plugins.launch4j</groupId>
                    <artifactId>launch4j-maven-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>l4j-clui</id>
                            <phase>install</phase>
                            <goals>
                                <goal>launch4j</goal>
                            </goals>
                            <configuration>
                                <!--
                                <headerType>gui</headerType>        -->
                                 <headerType>console</headerType>
                                <jar>target/yourFinalJar.jar</jar>
                                <outfile>target/${project.build.finalName}.exe</outfile>
                                <errTitle>${project.name}</errTitle>
                                <icon>your/Icon.ico</icon>
                                <jre>
                                    <path>jre</path> <!-- if you bundle the jre -->
                                </jre>

                                <versionInfo>
                                    <fileVersion>1.2.3.4</fileVersion>
                                    <txtFileVersion>${project.version}</txtFileVersion>
                                    <fileDescription>${project.description}</fileDescription>
                                    <copyright>(c) ${project.inceptionYear} MyCompany</copyright>
                                    <productVersion>1.0.0.0</productVersion>
                                    <txtProductVersion>${project.version}</txtProductVersion>
                                    <productName>${project.name}</productName>
                                    <companyName>MyCompany</companyName>
                                    <internalName>${project.name}</internalName>
                                    <originalFilename>${project.build.finalName}.exe</originalFilename>
                                </versionInfo>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>

答案 1 :(得分:-1)

您可以使用maven-assembly-plugin,其中两个执行指定主类并将所有依赖项打包在一个jar中,因此您不需要任何类路径。第二次执行会将所有配置文件放在同一个jar中。 所以最后你没有一个exe文件,你有一个带有清单文件的jar文件。

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-assembly-plugin</artifactId>
  <version>2.2-beta-5</version>
  <executions>
    <execution>
      <id>make-assembly1</id>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
      <configuration>
        <archive>
          <manifest>
            <mainClass>com....class.with.the.main</mainClass>
          </manifest>
        </archive>
        <descriptorRefs>
          <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
      </configuration>
    </execution>
    <execution>
      <id>make-assembly2</id>
      <phase>package</phase>
      <goals>
        <goal>single</goal>
      </goals>
      <configuration>
        <descriptors>
          <descriptor>distribution.xml</descriptor>
        </descriptors>
      </configuration>
    </execution>
  </executions>
</plugin>