使用 launch4j 和 maven 包装 java 命令行应用程序

2024-03-11

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

现在我已经阅读了所有类似的问题,比如this one https://stackoverflow.com/questions/6060560/trying-to-integrate-launch4j-in-a-maven-project-using-alakai-plugin and this https://stackoverflow.com/questions/9285386/maven-shade-plugin-launch4j但我无法让它工作。

任何人都可以提供一个简单的 pom.xml 片段,如何通过所有需要的依赖项来实现这一点。 顺便问一下,我应该在 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>  

当我运行启动4j:启动4jEclipse 中的目标(如果这是正确的?)我得到:

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

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


Drejc!

我可以生成一个 .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. 您可以从存储库下载插件

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 launch4j 和 maven 包装 java 命令行应用程序 的相关文章

  • Spring Batch 多线程 - 如何使每个线程读取唯一的记录?

    这个问题在很多论坛上都被问过很多次了 但我没有看到适合我的答案 我正在尝试在我的 Spring Batch 实现中实现多线程步骤 有一个包含 100k 条记录的临时表 想要在 10 个线程中处理它 每个线程的提交间隔为 300 因此在任何时
  • Java中反射是如何实现的?

    Java 7 语言规范很早就指出 本规范没有详细描述反射 我只是想知道 反射在Java中是如何实现的 我不是问它是如何使用的 我知道可能没有我正在寻找的具体答案 但任何信息将不胜感激 我在 Stackoverflow 上发现了这个 关于 C
  • 如何在 Play java 中创建数据库线程池并使用该池进行数据库查询

    我目前正在使用 play java 并使用默认线程池进行数据库查询 但了解使用数据库线程池进行数据库查询可以使我的系统更加高效 目前我的代码是 import play libs Akka import scala concurrent Ex
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • Java JDBC:更改表

    我希望对此表进行以下修改 添加 状态列 varchar 20 日期列 时间戳 我不确定该怎么做 String createTable Create table aircraft aircraftNumber int airLineCompa
  • Android:捕获的图像未显示在图库中(媒体扫描仪意图不起作用)

    我遇到以下问题 我正在开发一个应用程序 用户可以在其中拍照 附加到帖子中 并将图片保存到外部存储中 我希望这张照片也显示在图片库中 并且我正在使用媒体扫描仪意图 但它似乎不起作用 我在编写代码时遵循官方的Android开发人员指南 所以我不
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • 操作错误不会显示在 JSP 上

    我尝试在 Action 类中添加操作错误并将其打印在 JSP 页面上 当发生异常时 它将进入 catch 块并在控制台中打印 插入异常时出错 请联系管理员 在 catch 块中 我添加了它addActionError 我尝试在jsp页面中打
  • 斯坦福 NLP - 处理文件列表时 OpenIE 内存不足

    我正在尝试使用斯坦福 CoreNLP 中的 OpenIE 工具从多个文件中提取信息 当多个文件 而不是一个 传递到输入时 它会给出内存不足错误 All files have been queued awaiting termination
  • Java按日期升序对列表对象进行排序[重复]

    这个问题在这里已经有答案了 我想按一个参数对对象列表进行排序 其日期格式为 YYYY MM DD HH mm 按升序排列 我找不到正确的解决方案 在 python 中使用 lambda 很容易对其进行排序 但在 Java 中我遇到了问题 f
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • AWS 无法从 START_OBJECT 中反序列化 java.lang.String 实例

    我创建了一个 Lambda 函数 我想在 API 网关的帮助下通过 URL 访问它 我已经把一切都设置好了 我还创建了一个application jsonAPI Gateway 中的正文映射模板如下所示 input input params
  • Eclipse Java 远程调试器通过 VPN 速度极慢

    我有时被迫离开办公室工作 这意味着我需要通过 VPN 进入我的实验室 我注意到在这种情况下使用 Eclipse 进行远程调试速度非常慢 速度慢到调试器需要 5 7 分钟才能连接到远程 jvm 连接后 每次单步执行断点 行可能需要 20 30
  • 仅将 char[] 的一部分复制到 String 中

    我有一个数组 char ch 我的问题如下 如何将 ch 2 到 ch 7 的值合并到字符串中 我想在不循环 char 数组的情况下实现这一点 有什么建议么 感谢您花时间回答我的问题 Use new String value offset
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • 在mockito中使用when进行模拟ContextLoader.getCurrentWebApplicationContext()调用。我该怎么做?

    我试图在使用 mockito 时模拟 ContextLoader getCurrentWebApplicationContext 调用 但它无法模拟 here is my source code Mock org springframewo
  • simpleframework,将空元素反序列化为空字符串而不是 null

    我使用简单框架 http simple sourceforge net http simple sourceforge net 在一个项目中满足我的序列化 反序列化需求 但在处理空 空字符串值时它不能按预期工作 好吧 至少不是我所期望的 如
  • 在 Maven 依赖项中指定 jar 和 test-jar 类型

    我有一个名为 commons 的项目 其中包含运行时和测试的常见内容 在主项目中 我添加了公共资源的依赖项
  • 有没有办法为Java的字符集名称添加别名

    我收到一个异常 埋藏在第 3 方库中 消息如下 java io UnsupportedEncodingException BIG 5 我认为发生这种情况是因为 Java 没有定义这个名称java nio charset Charset Ch
  • 使用 xpath 和 vtd-xml 以字符串形式获取元素的子节点和文本

    这是我的 XML 的一部分

随机推荐

  • 创建 Word 文档并从 .NET 应用程序添加图像

    我需要一种生成Word文档 从模板或其他东西 并在特定位置插入图像的方法 有人对执行此操作的最佳方法有任何指示吗 几年前 我参与了一个使用 NET 1 1中的办公自动化的项目 效果确实差得难以形容 我假设 OA 要么得到了改进 要么被更好的
  • Jasper iReport Designer 中的表

    我在 Jasper iReport Designer 中创建了一个表 执行报表时 会多次显示同一个表 虽然只使用了单个数据集和表格 请指导 Thanks 尝试将表格组件放入摘要区域 因为详细信息区域会重复数据集中每一行的记录 如果确实需要将
  • 你最喜欢的 Python 模拟库是什么? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何设置 javac 的 PATH 变量以便我可以手动编译我的 .java 作品?

    这是我的驱动器上的地址 C Program Files Java jdk1 6 0 18 bin 我将如何设置路径变量 以便我可以进入命令窗口 windowskey r cmd 并能够键入以下内容 javac TestApp java 我使
  • 在 Windows 7 上使用 XAudio2 进行构建

    我正在尝试使用以下说明来构建一些使用 XAudio2 并在 Windows 7 上运行的代码 http msdn microsoft com en us library windows desktop ee663275 28v vs 85
  • Android Mapbox SDK v10:归因位置;用户界面设置

    如何调整徽标和属性com mapbox mapboxsdk maps MapView 在较旧的 SDK v9 中 可以通过 XML 属性 或通过以编程方式更改 UiSettings 简单地设置 UiSettings mapbox mapbo
  • 旅行商问题,2-opt算法C#实现

    有人能给我一个旅行商问题的 2 opt 算法的代码示例吗 目前 我使用最近邻来查找路径 但这种方法远非完美 经过一些研究 我发现 2 opt 算法可以将该路径纠正到可接受的水平 我找到了一些示例应用程序 但没有源代码 所以我无聊就写了 它l
  • 在 iOS 中创建 JsonString

    我是 iOS 新手 我创建了一个JSON NSDictionary像这样 NSArray keys NSArray arrayWithObjects User Password nil NSArray objects NSArray arr
  • 如何在 django 视图中使用 celery 存储延迟调用的结果?

    我已遵循以下指南http celeryq org docs django celery getting started first steps with django html http celeryq org docs django ce
  • 在 python 中,在下一个之前完成声音?

    在Python pygame中 我希望重复某个wav文件 由pygame mixer Sound foo wav play 循环播放 并让它们一个接一个地播放 最好是在最后一个完成后或默认延迟 1500 毫秒有效 到目前为止 解释一下 我有
  • ruby 中获取可用磁盘空间

    使用 ruby 获取磁盘空间信息的最佳方法是什么 我更喜欢纯红宝石解决方案 如果不可能 即使有额外的 gems 它也可以使用标准 ubuntu 桌面安装中可用的任何命令将信息解析为 ruby 你可以使用sys文件系统 https githu
  • 使用 MediaSource api 在 safari 上流式传输 HLS

    我想使用媒体源扩展来流式传输 HLS 片段 我已经尝试使用 mpeg dash 片段 使用 MP4Box 生成 和媒体源扩展进行相同的操作 var mediaSource new window MediaSource mediaSource
  • R - 从 data.frames 列表中提取信息

    我有两个需求 都连接到类似于下面可重现的数据集 我有一个包含 18 个实体的列表 每个实体由 17 19 个 data frames 的列表组成 可重现的数据集如下 有矩阵而不是 data frames 但我不认为这有什么区别 test l
  • 如何获取 Base64 编码字符串形式的 PIL 图像

    在过去的几个小时里 我一直在尝试创建图像的 Base64 字符串 但它不起作用 ship color 0 100 100 255 img Image new RGBA 100 100 for i in range 20 for j in r
  • 我可以有一个指向可分配数组组件中的项目的指针吗?

    我有一个用户定义的类型vector 在另一种类型中 我有一个可分配的向量数组 我想要一个指向这个可分配数组中的单个向量的指针 所以我想我会这样做 type another type type vector allocatable targe
  • 我可以使用一个登录页面通过 Spring 3.0 Security 重定向不同的页面吗? [复制]

    这个问题在这里已经有答案了 可能的重复 使用 spring security 根据用户角色设置自定义登录后目标 https stackoverflow com questions 2818055 setting custom post lo
  • 在同一事务中插入和删除?

    我有一个包含一些数据的 Temp Table 根据 Temp Table 中的数据 我将从其他表中删除相关行 然后将 Temp table 中的所有数据插入到 table1 中 就像下面的例子一样 我可以以什么方式在 Server2 Tab
  • 如何使用 SSH 在另一台服务器上运行 PHP 中的 CLI 命令?

    我正在尝试在 PHP 中运行 CLI 命令 但在不同的服务器上 为了在另一台服务器上运行命令 我使用的是linuxssh命令 为了在 PHP 中运行 CLI 命令 我使用exec 这有效 output exec cut d f1 etc p
  • 虽然places.getLatLng()返回null,但places.getName()不返回null

    我一直在尝试从自动完成中单击一个位置后获取经纬度 奇怪的是places getName 工作正常但是place getLatLng 返回空值 我应该怎么做才能解决这个问题我是谷歌地图和地点 API 的新手 protected void on
  • 使用 launch4j 和 maven 包装 java 命令行应用程序

    我想使用 maven 和 launch4j 将基于 java 的命令行应用程序及其所有依赖项包装到单个 exe 文件中 现在我已经阅读了所有类似的问题 比如this one https stackoverflow com questions