【发布时间】:2015-02-28 00:51:35
【问题描述】:
简单的问题:我想在每次向客户发布新的 jar 文件时分配一个新版本\内部版本号。
我知道涉及到一个清单文件,但到目前为止我尝试过的任何版本都无法获得该版本。
我的 jar 项目在一个常见的“com”包下有两个包:“main”和“loginRequest”。
我的主类(“Main”)在“main”包下。
我的清单文件是:
Manifest-Version: 1.0
Main-Class: main.Main
Specification-Version: 1.1
我尝试使用 eclipse 构建 jar(不包括 src 文件),包括清单。
我还尝试了以下方法:
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)
等等
在我的主类 ctor 中,我添加了:
Package p = this.getClass().getPackage();
System.out.println("v11_4_WebExClientEE spec Version : " + p.getSpecificationVersion());
你能建议吗?
谢谢!
【问题讨论】:
-
你的主类所在的包是什么?您确定需要清单版本而不是 v11_4_WebExClientEE-
.jar 之类的吗? -
名为Main的主类位于“main”包下。你建议我应该在 jar 名称中添加版本号吗?
-
是的。这样,您可以在集中存储库中维护各种版本,并让您的客户通过 maven/ivy 从该存储库中获取。
-
对,但是这样每次我用新的 jar 更改 jar 名称时,他都必须更新它的项目类路径。如果可能的话,我宁愿避免它......
-
如果你有两个 jars 并且你想检查最新的一个,你会遍历 jar 的清单吗?如果只是类路径,则可以使用通配符。