【问题标题】:Wrapping a java command line application with launch4j and maven使用 launch4j 和 maven 包装 java 命令行应用程序
【发布时间】:2012-04-06 19:18:05
【问题描述】:

我想使用 maven 和 launch4j 将基于 java 的命令行应用程序及其所有依赖项包装到单个 *.exe 文件中。

现在我已经阅读了关于 SO 的所有类似问题,例如 this onethis,但我无法让它发挥作用。

任何人都可以提供一个简单的 pom.xml sn-p,如何通过所有需要的依赖项来实现这一点。 顺便说一句,我应该在 Eclipse 运行配置中运行什么 maven 构建目标?

这是我从 SO 中复制的内容:

<!-- Launch4j -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>1.4</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <shadedArtifactAttached>true</shadedArtifactAttached> <!-- Make the shaded artifact not the main one -->
                <shadedClassifierName>shaded</shadedClassifierName> <!-- set the suffix to the shaded jar -->
            </configuration>
        </plugin>

        <plugin>
            <groupId>org.bluestemsoftware.open.maven.plugin</groupId>
            <artifactId>launch4j-plugin</artifactId>
            <version>1.5.0.0</version>
            <executions>

                <!-- Command-line exe -->
                <execution>
                    <id>l4j-cli</id>
                    <phase>package</phase>
                    <goals>
                        <goal>launch4j</goal>
                    </goals>
                    <configuration>
                        <headerType>console</headerType>
                        <outfile>target/importer.exe</outfile>
                        <jar>target/${artifactId}-${version}-shaded.jar</jar> <!-- 'shaded' is the value set on shadedClassifierName above -->
                        <errTitle>App Err</errTitle>
                        <classPath>
                            <mainClass>${mainClass}</mainClass>
                        </classPath>                
                        <jre>
                            <minVersion>1.5.0</minVersion>
                            <maxVersion>1.6.0</maxVersion>
                            <initialHeapSize>128</initialHeapSize>
                            <maxHeapSize>1024</maxHeapSize>
                        </jre>
                    </configuration>
                </execution>
            </executions>
        </plugin>  

当我在 Eclipse 中运行 launch4j:launch4j 目标时(如果这是正确的?)我得到:

未能执行目标 org.bluestemsoftware.open.maven.plugin:launch4j-plugin:1.5.0.0:launch4j 项目导入器上的(默认-cli):参数“headerType”,“jre” 为目标 org.bluestemsoftware.open.maven.plugin:launch4j-plugin:1.5.0.0:launch4j 丢失或无效 -> [帮助 1]

也许我只是在启动错误的目标......

【问题讨论】:

  • 试试this插件怎么样,好像比较新?
  • vorburger 插件看起来很有希望,但应该执行哪个目标?
  • 执行 mvn install 我得到:缺少所需的类:com.akathist.maven.plugins.launch4j.Launch4jMojo 失败。这在 vorburger 演示应用程序中。

标签: java maven launch4j


【解决方案1】:

德雷克!

我可以生成一个与您的配置非常相似的 .exe 文件。跟随我的整个 pom:

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>test</groupId>
    <artifactId>test</artifactId>
    <packaging>jar</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>test</name>

    <properties>
        <mainClass>foo.App</mainClass>
    </properties>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>1.4</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <shadedArtifactAttached>true</shadedArtifactAttached> <!-- Make the shaded artifact not the main one -->
                    <shadedClassifierName>shaded</shadedClassifierName> <!-- set the suffix to the shaded jar -->
                </configuration>
            </plugin>
            <plugin>
                <groupId>com.akathist.maven.plugins.launch4j</groupId>
                <artifactId>launch4j-maven-plugin</artifactId>
                <executions>
                    <!-- Command-line exe -->
                    <execution>
                        <id>l4j-cli</id>
                        <phase>package</phase>
                        <goals>
                            <goal>launch4j</goal>
                        </goals>
                        <configuration>
                            <headerType>console</headerType>
                            <outfile>target/importer.exe</outfile>
                            <jar>target/${artifactId}-${version}-shaded.jar</jar> <!-- 'shaded' is the value set on shadedClassifierName above -->
                            <classPath>
                                <mainClass>${mainClass}</mainClass>
                            </classPath>
                            <jre>
                                <minVersion>1.5.0</minVersion>
                                <initialHeapSize>128</initialHeapSize>
                                <maxHeapSize>1024</maxHeapSize>
                            </jre>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>LATEST</version>
        </dependency>
    </dependencies>

</project>

我将插件的 groupId 和 artifactId 更改为 vorburger 的,但 alakai 的版本也应该可以工作。确保:

  1. 您配置了正确的 mainClass
  2. 您至少声明了一个依赖项(我在过去遇到了一些“非常小的”工件/零依赖工件)
  3. 您可以从 repos 下载插件

我刚刚用简单的 maven 原型测试了这个 pom,所以我看不出有什么理由不能在你的机器上运行。如果您有任何问题,请在此处询问。

要生成 .exe 文件,我需要在终端上运行“mvn clean package”,或者在 Eclipse 中,右键单击您的项目,“Run as...”>“Maven build...”和在目标文本字段中输入“clean package”。

【讨论】:

    猜你喜欢
    • 2016-05-14
    • 2013-01-30
    • 1970-01-01
    • 2021-06-25
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 2015-07-01
    • 2012-09-26
    相关资源
    最近更新 更多