Ste*_*fan 4 maven-2 manifest classpath maven
为了实现可执行的jar文件,我将以下内容添加到pom.xml:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>my.main.Class</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>
Run Code Online (Sandbox Code Playgroud)
结果是(MANIFEST.MF)
...
Class-Path: library1-8.10-SNAPSHOT.jar hessian-4.0.7.jar library2-8.10-SNAPSHOT.jar json-lib-2.2.3-jdk15.jar ezmorph-1.0.6.jar library3-8.10-SNAPSHOT.jar commons-io-1.4.jar
...
Run Code Online (Sandbox Code Playgroud)
等等
这意味着,jar的版本包含在文件名中.我希望没有它:
Class-Path: library.jar hessian.jar library2.jar json-lib.jar ezmorph.jar library3.jar commons-io.jar
Run Code Online (Sandbox Code Playgroud)
只是因为这是他们在lib文件夹中命名的方式.
我们使用的是Maven 2.2,因此classpathLayoutType和customClasspathLayout不可用(如果他们有帮助的话).
有人可以帮忙吗?
Ser*_*riu 11
为什么他们没有lib
目录中的版本?你是不是正在使用适当的依赖管理,这是Maven提供的东西(并且是首先使用Maven的主要原因之一)?
没有版本的罐子是个坏主意,因为你不能轻易分辨出系统上安装了哪个版本的库.问题不在于Class-Path
错误,而是应该对库进行版本控制.其余的构建中存在问题.那么,你如何声明依赖关系,以及如何构建最终的包?
如果你真的想这样做,那么你可以自定义maven-archiver,指定classpathLayoutType
应该是custom
,customClasspathLayout
应该是${artifact.artifactId}.${artifact.extension}
.例如:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathLayoutType>custom</classpathLayoutType>
<customClasspathLayout>lib/${artifact.artifactId}${artifact.dashClassifier?}.${artifact.extension}</customClasspathLayout>
<mainClass>my.main.Class</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
(请注意,我添加了一个lib/
前缀,随意将其删除或替换为您需要的任何内容)