首页 > 代码库 > maven 构建可执行jar文件

maven 构建可执行jar文件

  • 第一部分:认识jar中的MANIFEST.MF文件

一、MANIFEST.MF文件的基本配置信息:

1.一般属性:

           Manifest-Version:定义manifest文件的版本

           Created-By:定义该文件的生成者,一般是由jar命令行工具生成

           Signature-Version:定义jar文件的签名版本(关于jar文件的签名以后详谈)

           Class-Path:(具体作用在下面讲)

2.应用程序相关属性:

   Main-Class:定义jar文件的入口类(该类必须是一个可执行的类);定义该属性后,即可通过java -jar xx.jar来执行该jar文件

3.扩展标识属性:

   Extension-Name:定义jar文件的标识

4.包扩展属性:

   Implementation-Title:定义扩展实现的标题

   Implementation-Version:定义扩展实现的版本

   Implementation-Vendor:定义扩展实现的组织

   Implementation-Vendor-Id:定义扩展实现的组织的标识

   Implementation-URL:定义扩展包的下载地址

   Specification-Title:定义扩展规范的标题

   Specification-Version:定义扩展规范的版本

   Specification-Vendor:定义维护该规范的组织

   Sealed:定义jar文件是否封存,值为true或者false

5.签名相关属性和自定义属性(略) 

二、可执行jar文件引用外部包问题

在jar包(文件)内的目录META-INF下的MANIFEST.MF文件中,有2个属性跟可执行jar文件息息相关,分别是Main-Class和Class-Path:

1. Main-Class属性定义了可执行jar文件的入口,它的值必须是一个带有main方法的java类

2. Class-Path属性定义了可执行jar文件所依赖的第三方jar文件的存放路径和jar文件名(多个jar文件之间以空格分开)

定义该属性的好处是:执行jar文件时,直接使用命令java -jar xx.jar即可,不需要再指定java命令的-classpath选项

  • 第二部分:运用Maven的插件maven-jar-plugin、maven-dependency-plugin生成可执行的jar文件

1. maven-jar-plugin插件的作用(主要是指在生成可执行jar文件时的作用)

在pom.xml文件中的配置如下:

 1 <plugin> 2     <groupId>org.apache.maven.plugins</groupId> 3     <artifactId>maven-jar-plugin</artifactId> 4     <configuration> 5         <archive> 6             <manifest> 7                 <addClasspath>true</addClasspath> 8                 <classpathPrefix>lib/</classpathPrefix> 9                 <mainClass>mainclass_full_name</mainClass>10             </manifest>11         </archive>12     </configuration>13 </plugin>        

 

 

其中:mainClass指定了MANIFEST.MF文件中的Main-Class属性的值(带有main方法的类的全名),addClasspath和classPathPrefix指定了MANIFEST.MF文件中的Class-Path属性(addClasspath为true,表示在MANIFEST.MF文件添加Class-Path属性,其值为classPathPrefix和lib-Maven Dependencies下所有的jar文件名)。

2. maven-dependency-plugin插件的作用

 1 <plugin> 2     <groupId>org.apache.maven.plugins</groupId> 3     <artifactId>maven-dependency-plugin</artifactId> 4     <executions> 5         <execution> 6             <id>copy</id> 7             <phase>install</phase> 8             <goals> 9                 <goal>copy-dependencies</goal>10             </goals>11             <configuration>12                 <outputDirectory>${project.build.directory}/lib</outputDirectory>13             </configuration>14         </execution>15     </executions>16 </plugin>

其中:配置的含义就是在maven的install阶段,把lib-Maven Dependencies下的所有jar文件拷贝到项目build目录下的lib目录下(这个可修改为其它值,注意与MANIFEST.MF文件中Class-Path的值一致)

  • 第三部分:参考网站的链接
  1. maven-jar-plugin官网:http://maven.apache.org/plugins/maven-jar-plugin/
  2. MANIFEST.MF百度百科:http://baike.baidu.com/link?url=zPGW6JdZ1ypMOjengU7pOerNWrJEZGRiSxpTDQr1xYZyjOIq8jMVtxbGe_OoF4xEN853CP0M8RiVobuto7tJe_
  3. CSDN博客:http://blog.csdn.net/e5945/article/details/6215644