jar 打包java文件

研究了一会怎么用jar命令直接打包可执行jar,写篇文章做个笔记。有人看就当是博客没人看就当笔记了。

其实主要步骤是配置MANIFEST.MF,MANIFEST.MF在META-INF文件夹里。

这里给个例子,在本工程了有一个可执行class(就是有main方法)learninggui.viplugincracker.Cracker,四个依赖库文件appFramework-1.0.jar,commons-codec-1.6.jar,jnlp.jar,licensechecker.jar

我们可以通过Eclipse生成的jar文件研究一下MAINFEST.MF怎么写

在Eclipse的Package Explorer邮件单击点export选Runnable JAR file,next


Launch Configuration选择启动的class;

方法一、

Library handling 第一个是把所需要的jar库全部解压到 jar文件的根目录,如果我们用压缩文件解压会看到这样的文件层次


这种方式生成的MANIFEST.MF文件内容如下

Manifest-Version: 1.0
Class-Path: .
Main-Class: learninggui.viplugincracker.Cracker

这里需要注意的是冒号后面要有一个空格(经过试验发现多个空格也是可以的)不然会出现下图的错误


Mainfest-Version是版本号,Class-Path是和CLASSPATH作用一样的,Main-Class就是可运行jar必须的,指定了jar运行时启动的class。因为Class-Path是一个点也就是jar里面的根目录,所以依赖的class文件都可以找到。

于是我们就可以自己依葫芦画瓢了,把所需要的库文件都就压到要打包的文件夹里然后在该文件夹新建META-INF文件夹再在META-INF文件夹新建MANIFEST.MF,内容依上面的实例改写。

然后用jar命令打包

cd 到要打包的jar文件夹,输入以下命令:

jar cvfm a.jar META-INF/MANIFEST.MF .

参数c是指创建归档,v是verbose(啰嗦的意思)指显示详细输出,f是指定文件 不然不能指定输出文件a.jar,最后的m就是指包含MANIFEST.MF的清单信息对应参数META-INF/MANIFEST.MF 注意最后还有一个参数是个点是指从当前目录创建归档。

方法二、

把jar库文件直接打包到自己的jar里面,我们看看Eclipse生成的文件是什么样子。
文件层次如下

大家看到jar库文件都在压缩包的根目录。MANIFEST.MF文件内容如下:
Manifest-Version: 1.0
Rsrc-Class-Path: ./ jnlp.jar appFramework-1.0.jar licensechecker.jar c
 ommons-codec-1.6.jar
Class-Path: .
Rsrc-Main-Class: learninggui.viplugincracker.Cracker
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
这里多了两个变量Rsrc-Class-Path和Rsrc-Main-Class,而且Main-Class也已经不是我们正真的class: learninggui.viplugincracker.Cracker了。看Main-Class的包名就知道了是Eclipse的class加载器(不知道是不是重载的ClassLoader)。这么说Rsrc-Class-Path和Resr-Main-Class应该是Eclipse的class 加载器所需要的变量。不过从这个文件我们可以看出来Class-Path的不同值之间是用一个空格来间隔开的。不知道Eclipse是出于什么原因要加入自己的Class加载器。但是我们自己打包的时候肯定不会再去找Eclipse的这些东西,于是我们试着自己打包。把编译好的文件复制到工作目录下,新建一个lib目录来存放以来的jar文件,把所有依赖的jar拷贝到lib目录
这时后我们的MANIFEST.MF内容如下:
Mainfest-Version: 1.0
Class-Path: . ./lib/appFramework-1.0.jar ./lib/commons-codec-1.6.jar ./jnlp.jar ./licensechecker.jar
Main-Class: learninggui.viplugincracker.Cracker
其中Class-Path中的./lib的点 和上面意思相同,都是jar文件内部的根目录。
再用上面的打包命令:
jar cfm a.jar META-INF/MAINFEST.MF .
打包之后双击运行~嗯~feels good~


方法三、

最后再看看Eclipse的第三种打包方式。
打包之后发现在生成jar文档的同一个文件夹还有一个lib文件夹

里面就是我们需要的各种jar文件,我们再看此时的MANIFEST.MF文件是怎么写的:
Manifest-Version: 1.0
Class-Path: . 4_lib/jnlp.jar 4_lib/appFramework-1.0.jar 4_lib/licensec
 hecker.jar 4_lib/commons-codec-1.6.jar
Main-Class: learninggui.viplugincracker.Cracker

经过上面几个MANIFEST.MF的研究这个不用说就很明了了。具体做法依旧不赘述了。
=================================================================
啊~终于写完了,好累……中间还有一次手贱关掉了浏览器==!快疯掉了突然想起来csdn有自动保存~太幸福了

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想将Java文件打包JAR文件,你可以使用以下三种方式之一:使用命令行(CMD)、使用Eclipse或使用Maven。 1. 使用命令行(CMD)打包: 在命令行中,使用`jar`命令将Java文件打包JAR文件。首先,将Java文件编译成class文件,然后使用`jar`命令将这些class文件打包JAR文件。以下是具体的步骤: 1. 编译Java文件:`javac 文件名.java` 2. 创建清单文件(可选):`echo Main-Class: com.example.MainClass > Manifest.txt` 3. 打包JAR文件:`jar cvfm jar包名.jar Manifest.txt com/example/*.class` 2. 使用Eclipse打包: 如果你使用Eclipse作为集成开发环境,你可以使用Eclipse内置的导出功能来打包Java文件。以下是具体的步骤: 1. 在Eclipse中,选择你要打包的项目,右键点击选择"导出"。 2. 在弹出的窗口中,选择"Java"文件夹下的"JAR文件",点击"下一步"。 3. 选择要导出的Java文件和资源,设置JAR文件的输出路径和名称,点击"完成"。 3. 使用Maven打包: 如果你使用Maven作为项目构建工具,你可以使用`mvn install`命令将Java文件打包JAR文件。在项目的pom.xml文件中,添加以下配置: ```xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>3.2.0</version> <configuration> <archive> <manifest> <mainClass>com.example.MainClass</mainClass> <!-- 设置可执行的主类 --> </manifest> </archive> </configuration> </plugin> </plugins> </build> ``` 在命令行中,进入项目的根目录,运行`mvn install`命令即可打包JAR文件。 请注意,打包出的JAR文件是否可执行取决于JAR包中是否存在Manifest文件,以及Manifest文件中是否包含`Main-Class`和`Class-Path`属性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值