将版本分配给jar文件

时间:2015-01-01 08:52:52

标签: java eclipse jar manifest

简单问题:每次向客户发布新的jar文件时,我都希望分配一个新版本\内部版本号。

我知道涉及到一个manufest文件,但到目前为止我无法获得该版本。

我的jar项目有一个共同的" com"包装:"主要"和" loginRequest"。

我的主要班级(" Main")位于" main"封装

我的清单文件是:

Manifest-Version: 1.0
Main-Class: main.Main
Specification-Version: 1.1

我尝试使用eclipse(不包括src文件)构建jar,包括清单。

我也尝试了以下内容:

jar -cvfm v11_4_WebExClientEE.jar ..\..\v11_4_WebExClientEE.mf main\Main.class 

让我重新振作起来

"added manifest

 adding: main/Main.class(in = 1206) (out= 677)(deflated 43%)"

然后:

java -jar v11_4_WebExClientEE.jar

让我回来了

Exception in thread "main" java.lang.NoClassDefFoundError: main/Main (wrong name: com/main/Main)

在我的主要班级中,我补充道:

    Package p = this.getClass().getPackage();

    System.out.println("v11_4_WebExClientEE spec Version : " + p.getSpecificationVersion());

你能告诉我吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

您所做错的线索在异常消息中:

  

... NoClassDefFoundError:main / Main(错误名称:com / main / Main)

JVM找到了入口点类的条目(根据你的" Main-Class"属性)但是类加载器抛出了一个异常,即JAR入口路径名与完整的匹配您的类的包名称。 (类加载器期待" main / Main"但实际的包名是" / com / main / Main" ...根据类文件内容。)

  

按照我给出的细节,它应该是com / main / * .class吗?

是。这就是您应该在jar命令行上添加具有正确JAR路径的类的内容。 (或者至少是类似的东西。关键是参数应该对应于JAR文件所需的完整入口路径;即完全限定的类名。)

  

我该怎么做而不是java / util /和java.util?

Name属性可能不应该存在。 A"名称" attribute为JAR文件中的条目引入了清单部分。

"实施 - 标题"属性纯粹是描述性的。你可以放任何你想要的东西。

在您继续前进之前,强烈建议您仔细阅读JAR file specification 。请注意规范中有关清单语法的内容以及清单属性的含义。

答案 1 :(得分:0)

我们首先创建一个名为 Manifest.txt 的文本文件,其中包含以下内容:

Name: com/main/
Specification-Title: Main Common Class
Specification-Version: 1.2
Specification-Vendor: Example Tech, Inc.
Implementation-Title: com.main 
Implementation-Version: build57
Implementation-Vendor: Example Tech, Inc.

然后输入以下命令,创建名为 MyJar_1.2.jar JAR 文件:

jar cfm MyJar_1.2.jar Manifest.txt MyPackage/*.class