maven: 打包可运行的jar包(java application)及依赖项处理

IDE环境中,可以直接用exec-maven-plugin插件来运行java application,类似下面这样:

 1 <plugin>
 2     <groupId>org.codehaus.mojo</groupId>
 3     <artifactId>exec-maven-plugin</artifactId>
 4     <version>1.2.1</version>
 5     <executions>
 6         <execution>
 7             <goals>
 8                 <goal>exec</goal>
 9             </goals>
10         </execution>
11     </executions>
12     <configuration>
13         <executable>java</executable>
14         <arguments>
15             <argument>-classpath</argument>
16             <classpath>
17             </classpath>
18             <argument>ctas.importer.reader.app.Program</argument>
19         </arguments>
20     </configuration>
21 </plugin>

18行,改成自己的Main-Class类,然后用mvn exec:exec来运行,但是部署到生产环境中时,服务器上通常并不具备maven环境,只能用 java -jar xxx.jar这种方式来运行,下面是一些处理细节:

一、依赖项的处理

java application运行时需要查找依赖的第三方jar,如果查找classpath失败,就会报错,可以先用

mvn dependency:copy-dependencies -DoutputDirectory=target/lib

命令,把依赖的jar包全部导出到target/lib这个目录下

二、利用maven-jar-plugin修改META-INF\MANIFEST.MF 清单文件

java application的最终jar里,用解压工具打开后,可以看到META-INF目录下,有一个重要的清单文件 MANIFEST.MF,这里面可以指定 Main-Class及classpath,结构如下:

1 Manifest-Version: 1.0
2 Built-By: jimmy
3 Build-Jdk: 1.7.0_09
4 Class-Path: lib/DataEntity-1.0.jar ...
5 Created-By: Apache Maven 3.2.3
6 Main-Class: ctas.importer.reader.app.Program
7 Archiver-Version: Plexus Archiver

其中第4行指定了classpath,也就是所依赖的jar包在什么地方,第6行表示main函数的入口类,默认情况下mvn clean package生成的jar包里,清单文件上并没有这2行,需要在pom.xml中添加插件

 1 <plugin>
 2     <groupId>org.apache.maven.plugins</groupId>
 3     <artifactId>maven-jar-plugin</artifactId>
 4     <configuration>
 5         <archive>
 6             <manifest>
 7                 <mainClass>ctas.importer.reader.app.Program</mainClass>
 8                 <addClasspath>true</addClasspath>
 9                 <classpathPrefix>lib/</classpathPrefix>
10             </manifest>
11         </archive>
12         <classesDirectory>
13         </classesDirectory>
14     </configuration>
15 </plugin>

第7行指定Main-Class,第9行指定classpath的相对路径,这样mvn package后,清单文件里就会自动添加Main-Class和Class-Path这二项

ok了,部署时把jar包和lib目录,都上传到服务器上 ,然后测试一下,顺利的话 java -jar  xxx.jar就可以了,如果要在后台运行,前面加 nohup

时间: 2024-09-30 14:43:07

maven: 打包可运行的jar包(java application)及依赖项处理的相关文章

Ant打包可运行的Jar包(加入第三方jar包)

本章介绍使用ant打包可运行的Jar包. 打包jar包最大的问题在于如何加入第三方jar包使得jar文件可以直接运行.以下用一个实例程序进行说明. 程序结构: 关键代码: package com.alfred.main; import com.alfred.bean.User; import com.alfred.util.ProjConfig; import com.thoughtworks.xstream.XStream; public class Main { public static

Maven打包时引入本地jar包

<!--pom.xml-->..... <dependencies> <dependency> <groupId>com.xxxxxx</groupId> <artifactId>xxxxxx</artifactId> <version>x.x.x</version><!--版本随意填--> <scope>system</scope> <systemPath

eclipse使用MAVEN打包可执行的jar包

1.新建maven工程 注意勾选 随便填一下 建好之后工程目录如下 新建测试类与工具类,主类很简单 工具类也很简单,就是初始化了日志 maven依赖包也只有一个log4j的jar <dependencies>  <dependency>  <groupId>log4j</groupId>  <artifactId>log4j</artifactId>  <version>1.2.17</version><

【Maven学习】Maven打包生成普通jar包、可运行jar包、包含所有依赖的jar包

http://blog.csdn.net/u013177446/article/details/54134394 ****************************************************** 使用maven构建工具可以将工程打包生成普通的jar包.可运行的jar包,也可以将所有依赖一起打包生成jar: 一.普通的jar包 普通的jar包只包含工程源码编译出的class文件以及资源文件,而不包含任何依赖:同时还包括pom文件,说明该包的依赖信息: 在工程pom文件下

将Java项目打包成可以独立运行的Jar包

因为一直也没怎么用过Java的原因,所以以前本科上课的时候,在控制台下运行Java程序都是仅仅运行单个的没有第三方库依赖的情况下运行的 那种情况特别简单,只要输入Javac 文件名.java等到编译完,再执行java 文件名 直接就可以运行了,但是,在公司实习需要写一个独立的来运行的项目, 并且可能要通过脚本来定时的运行,这样的话,最好是将项目打包成一个Jar包,然后,使用crontab创建一个新的定期运行的作业就可以了. 这样就可以使用java -jar 项目.jar来定时的运行这个任务. 但

Maven生成可以直接运行的jar包的多种方式

Maven可以使用mvn package指令对项目进行打包,如果使用java -jar xxx.jar执行运行jar文件,会出现"no main manifest attribute, in xxx.jar"(没有设置Main-Class).ClassNotFoundException(找不到依赖包)等错误. 要想jar包能直接通过java -jar xxx.jar运行,需要满足: 1.在jar包中的META-INF/MANIFEST.MF中指定Main-Class,这样才能确定程序的

Maven生成可以直接运行的jar包的多种方式(转)

转自:https://blog.csdn.net/xiao__gui/article/details/47341385 Maven可以使用mvn package指令对项目进行打包,如果使用java -jar xxx.jar执行运行jar文件,会出现"no main manifest attribute, in xxx.jar"(没有设置Main-Class).ClassNotFoundException(找不到依赖包)等错误. 要想jar包能直接通过java -jar xxx.jar运

[Maven]Maven构建可执行的jar包(包含依赖jar包)

----------------------------------------------------------------- 转载请注明出处! 博主:疲惫的豆豆 链接:http://www.cnblogs.com/dzblog/p/6913809.html ----------------------------------------------------------------- 目标: 将依赖的第三方jar包打进去 方法: maven-assembly-plugin 环境: IDE

Springboot中IDE支持两种打包方式,即jar包和war包

Springboot中IDE支持两种打包方式,即jar包和war包 打包之前修改pom.xml中的packaging节点,改为jar或者war    在项目的根目录执行maven 命令clean package -Dmaven.test.skip=true,即可打包,如下 命令执行成功后,在target目录下即可看到打包好的文件 提示:若打的包为jar包,可通过java -jar guns-xxx.jar来启动Guns系统 原文地址:https://www.cnblogs.com/mracale