关闭

浅谈java 中构建可执行 jar 包的几种方式

830人阅读 评论(0) 收藏 举报
分类:

有时候,由于项目的需要,我们会将源码编译后以工具包(class打成jar包)的形式对外提供,此时,
你的 jar 包不一定要是可执行的,只要能通过编译,能被别人以 import 的方式调用就行了。但还有的
情况是,我们的 jar 包是要可执行的,即能直接在 cmd 下直接运行。前者的打包很简单,在 eclipse 中,
直接选中要打包的 java 文件和其它资源、依赖文件, export → Java → JAR file 即可。需要注意的是,
这种方式导出的 jar 包是不可执行的,比如你执行如下的语句:
java -jar test.jar
java -classpath test.jar com.test_maven.App
会直接报错:无法找到主类或者找不到 xxx 依赖包/类,这是由于你没有定义 MANIFEST.MF 资源描述文件所致,
或者你直接把依赖的 jar 包打进了你最终的 jar,而这种嵌套的依赖 jar 包是不能直接被程序 import 识别的。

        下面我们看看如何在 eclipse 中构建一个可执行的 jar 包。

(1)最简单的还是依赖于 eclipse 的导出功能

export → java → Runnable JAR file,这种形式的导出

可以通过 lanuch configuration 指定一个 MainClass,并会自动生成 MANIFEST.MF ,而且会帮你把依赖的 jar 包解压出来,一并打进最终

的 jar 包,这样就能被你的代码 import 引用了。


(2)上述方法是 eclipse 自带的,eclipse 也有个专门的插件叫做 Fat Jar,支持许多定制化的功能,但是这个插件有些缺陷,比如修改源码后如果你不 clean & rebuild project, 它会使用缓存重新打包,这样你的编译代码还是老的,会造成执行错误,而且这样是十分不方便的。用Fat Jar Eclipse Plug-In打包可执行jar文件

(3)稍微大点的项目都会用 maven 或者 ant 来构建,在 maven 工程中,我们也可以很方便的打包成可执行的 jar 包。默认Maven生成的JAR包只包含了编译生成的.class文件和项目资源文件,而要得到一个可以直接在命令行通过java命令运行的JAR文件,还要满足两个条件:

 

  • JAR包中的/META-INF/MANIFEST.MF元数据文件必须包含Main-Class信息。
  • 项目所有的依赖都必须在Classpath中,其可以通过 MANIFEST.MF 指定或者隐式设置。

Xml代码  收藏代码
  1. <plugins>  
  2.           <plugin>    
  3.                 <groupId>org.apache.maven.plugins</groupId>    
  4.                 <artifactId>maven-jar-plugin</artifactId>    
  5.                 <configuration>    
  6.                     <archive>    
  7.                         <manifest>    
  8.                             <addClasspath>true</addClasspath>    
  9.                             <mainClass>com.ebay.tools.cms.validator.engine.entrance.StartEngine</mainClass>    
  10.                         </manifest>    
  11.                     </archive>    
  12.                 </configuration>    
  13.             </plugin>    
  14.             <plugin>    
  15.                 <groupId>org.apache.maven.plugins</groupId>    
  16.                 <artifactId>maven-assembly-plugin</artifactId>    
  17.                 <configuration>    
  18.                     <archive>    
  19.                         <manifest>    
  20.                             <mainClass>com.ebay.tools.cms.validator.engine.entrance.StartEngine</mainClass>    
  21.                         </manifest>    
  22.                     </archive>    
  23.                     <descriptorRefs>    
  24.                         <descriptorRef>jar-with-dependencies</descriptorRef>    
  25.                     </descriptorRefs>    
  26.                 </configuration>    
  27.             </plugin>   
  28.     </plugins>  

 

关于 Apache Maven 您不知道的 5 件事

http://www.ibm.com/developerworks/cn/java/j-5things13/

(4)当然了,如果你不怕麻烦的话,手动打包,自己建立、维护 MANIFEST.MF 文件也是可以的,你可以参考如下链接:

http://blog.csdn.net/mango_song/article/details/8531389

http://gushuizerotoone.iteye.com/blog/1757002

REF:

使用maven插件对java工程进行打包

http://chenzhou123520.iteye.com/blog/1706242   

关于如何从jar包中读取配置、属性文件,请参考:

 

http://my.oschina.net/leejun2005/blog/95186

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:846477次
    • 积分:11653
    • 等级:
    • 排名:第1370名
    • 原创:310篇
    • 转载:200篇
    • 译文:0篇
    • 评论:40条
    最新评论