Eclipse中将Java项目打包为jar,并且引入第三方jar包解决办法

来源:互联网 发布:如何更改网页授权域名 编辑:程序博客网 时间:2024/04/25 17:31

原文地址
如果自己的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文件名。如果你没有空格的话,还是问题是解决不了的。

0 0