简单问题:每次向客户发布新的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());
你能告诉我吗?
谢谢!
答案 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