使用maven创建可执行jar的步骤解析
123 浏览量
更新于2024-09-04
收藏 49KB PDF 举报
"本文将详细介绍如何使用Maven来生成一个可以直接执行的JAR文件。在不依赖外部库的情况下,通过配置Maven的maven-jar-plugin插件,我们可以创建一个包含主清单属性的JAR,使其能够直接通过`java -jar`命令执行。"
在Java开发中,Maven是一个非常流行的构建工具,它可以帮助我们管理项目依赖、构建工件等。当需要将一个Java项目打包成可执行的JAR文件时,通常需要确保JAR包含了运行所需的全部依赖,并且有一个正确的主清单属性(Main-Class),这样才能通过`java -jar`命令直接运行。
首先,创建一个简单的Java项目,只有一个包含主函数的类,例如名为`Xixi.java`的类,其中包含`public static void main(String[] args)`方法。项目的`pom.xml`文件应该至少包含以下基本配置:
```xml
<project>
<groupId>com.paxi</groupId>
<artifactId>xixi</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>xixi</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>
```
然后,执行`mvn clean install`命令,Maven会生成一个JAR文件,但这个JAR文件可能无法直接运行,因为它缺少主清单属性。当你尝试使用`java -jar xixi-1.0-SNAPSHOT.jar`命令时,会收到错误提示:“xixi-1.0-SNAPSHOT.jar中没有主清单属性”。
要解决这个问题,我们需要在`pom.xml`中添加`maven-jar-plugin`插件,配置它来生成包含主清单属性的JAR文件。具体配置如下:
```xml
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<archive>
<manifest>
<mainClass>com.paxi.xixi.Xixi</mainClass> <!-- 替换为你的主类全名 -->
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
```
这里,`<mainClass>`标签指定了程序的入口点,即包含`main`方法的类的全限定名。添加了这个配置后,再次执行`mvn clean install`,Maven会生成一个新的JAR文件,这次它应该包含了主清单属性。现在,你可以通过`java -jar xixi-1.0-SNAPSHOT.jar`来直接运行这个JAR文件,它将执行`Xixi`类中的`main`方法。
如果项目依赖了其他库,还需要使用`maven-assembly-plugin`或`maven-shade-plugin`来创建一个“fat”或“uber”JAR,它包含了所有依赖,以便在没有外部环境的情况下运行。不过,对于简单的无依赖项目,上述的`maven-jar-plugin`配置已经足够生成可执行的JAR文件了。
总结来说,通过正确配置Maven的maven-jar-plugin插件,开发者可以轻松地创建一个可以直接运行的JAR文件,这对于部署和分享小型Java应用程序非常方便。记得在配置插件时指定你的主类全名,这样Maven就能生成一个带有正确主清单属性的JAR,使得`java -jar`命令能够顺利执行。
2016-07-14 上传
2017-11-21 上传
2023-08-30 上传
2023-10-12 上传
2023-05-09 上传
2023-09-16 上传
2023-04-19 上传
2023-07-27 上传
weixin_38553466
- 粉丝: 11
- 资源: 953
最新资源
- 基于Python和Opencv的车牌识别系统实现
- 我的代码小部件库:统计、MySQL操作与树结构功能
- React初学者入门指南:快速构建并部署你的第一个应用
- Oddish:夜潜CSGO皮肤,智能爬虫技术解析
- 利用REST HaProxy实现haproxy.cfg配置的HTTP接口化
- LeetCode用例构造实践:CMake和GoogleTest的应用
- 快速搭建vulhub靶场:简化docker-compose与vulhub-master下载
- 天秤座术语表:glossariolibras项目安装与使用指南
- 从Vercel到Firebase的全栈Amazon克隆项目指南
- ANU PK大楼Studio 1的3D声效和Ambisonic技术体验
- C#实现的鼠标事件功能演示
- 掌握DP-10:LeetCode超级掉蛋与爆破气球
- C与SDL开发的游戏如何编译至WebAssembly平台
- CastorDOC开源应用程序:文档管理功能与Alfresco集成
- LeetCode用例构造与计算机科学基础:数据结构与设计模式
- 通过travis-nightly-builder实现自动化API与Rake任务构建