频道栏目
首页 > 程序开发 > 综合编程 > 其他综合 > 正文
Eclipse中将Java项目打包为jar 并且引入第三方jar包解决办法
2017-02-07 11:22:40         来源:qq_20745901的博客  
收藏   我要投稿

Eclipse中将Java项目打包为jar 并且引入第三方jar包解决办法:如果自己的java project中需要引用额外的jar包作为资源文件,那么需要自定义配置文件MANIFEST.MF ,例如:

Manifest-Version: 1.0

Class-Path: lib\crimson.jar lib\jbcl.jar lib\junit.jar lib\log4j-1.2.13.jar lib\mysql-connector-java-3.1.13-bin.jar

Main-Class: src.YourMainClassName

其中的Class-Path就指定了外来jar包的位置。请注意假设我们的项目打包后为project.jar,那么按照上面的定义,应该在 project.jar的同层目录下建立一个lib文件夹,并将相关的jar包放在里面。否则将会出现Exception in thread “main” java.lang.NoClassDefFoundError的错误。

注意:如果在Class-Path 中引入比较多的jar包,不要写成一行,不然会报:java.io.IOException : line too long ,需要分多行写,第二行以及下面的第三行、第四行写的时候需要在前面空两格(敲两下空格键)即可

最后介绍一下使用Eclipse制作jar包的过程吧:

1. 首先在Eclipse中打开项目, 右键点击项目,选择“Export”;

2. 选择Java/JAR file,Next;

3. Select the resources to export中可以选择你想要包含的项目文件夹,一些不必要的文件夹就无需放进去了,免得增大空间;

这里有几个选项:

* Export generated class files and resources 表示只导出生成的.class文件和其他资源文件

* Export all output folders for checked projects 表示导出选中项目的所有文件夹

* Export java source file and resouces 表示导出的jar包中将包含你的源代码*.java,如果你不想泄漏源代码,那么就不要选这项了

* Export refactorings for checked projects 把一些重构的信息文件也包含进去

在Select the export destination中选择导出的jar的路径,Next

4. 下一页可以选择是否导出那些含有警告warning或者错误errors的*.class文件。一般不用理他,Next

5. 下一个页面里可以对项目做一些配置。

* Generate the manifest file是系统帮我们自动生成MANIFEST.MF文件,如果你的项目没有引用其他class-path,那可以选择这一项。

* Use existing mainfest from workspace。这是可以选择我们自定义的.MF文件,格式如上所写。

* Seal content。要封装整个jar或者指定的包packet

* Main class。这里可以选择你的程序入口,将来打包出来的jar就是你这个入口类的执行结果。

最后Finish 完成

另:如果用java命令执行jar包时报”没有主清单属性“的提示时

即jar包中的META-INF文件夹下的MANIFEST.MF文件缺少定义jar接口类。说白了就是没有指定class类。这里说明一下MANIFEST.MF就是一个清单文件,通俗点将就相当于WINDOWS中ini配置文件。用来配置程序的一些信息。因为打包的jar包没有这个属性(至少我这次没有),所以才造成这样的问题。

所以,解决办法很简单。就是在MANIFEST.MF添加入口。

首先找到你的jar文件。

之后双击打开jar文件,你的电脑需要安装有winrar。或者其他压缩工具7z等。

之后,在双击打开这个文件夹META-INF,再选择MANIFEST.MF文件,用记事本打开它。

现在看看文件中是否有Main-Class这样一行文字,如果没有的话那么添加一行。

Main-Class: TestMain这里的TestMain是你的xxx.java文件编译后的xxx.class文件稍微名称。但是不要加.class后缀。如果有的话,那么看下Main-Class: TestMain这后面的名称是否和你的class文件名称一致。不一致请改回来。

Main-Class: packageA.packageB.TestMain

注:这里Main-Class:要空一格写上你的class文件名。如果你没有空格的话,还是问题是解决不了的。

点击复制链接 与好友分享!回本站首页
上一篇:Git虚拟文件系统GVFS
下一篇:RocketMQ生产者消费者示例
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站