出于某种原因,我的客户需要在其名称中使用而不使用版本的工件(MyArtifact.jar
而不是MyArtifact-1.23.345.jar
)
因此我将此配置添加到我的父pom:
<build>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>3.0.2</version>
<configuration>
<finalName>${project.artifactId}</finalName>
</configuration>
</plugin>
</plugins>
</pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
</plugin>
</plugins>
</build>
这可以正常工作,这意味着我在没有target
文件夹中生成的版本的情况下获得子项目的jar。
然而
我的一个罐子是一个可执行jar ,它依赖于其他jar。目前我为该子项目配置了maven-jar-plugin
:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.7</version>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>build-classpath</goal>
</goals>
</execution>
</executions>
<configuration>
<fileSeparator>/</fileSeparator>
<pathSeparator>;</pathSeparator>
<outputProperty>bundle.classPath</outputProperty>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<index>true</index>
<manifestEntries>
<Class-Path>${bundle.classPath}</Class-Path>
</manifestEntries>
</archive>
<finalName>${project.artifactId}</finalName>
</configuration>
</plugin>
</plugins>
</build>
问题是这个生成的类路径包含了我电脑上工件的绝对路径。
因此我在配置中添加了<prefix>
标记:
<configuration>
<prefix>lib</prefix>
<fileSeparator>/</fileSeparator>
<pathSeparator>;</pathSeparator>
<outputProperty>bundle.classPath</outputProperty>
</configuration>
但是生成的类路径包含罐子的版本号。
如何在类路径中省略版本号和绝对路径?
问题是:我只想从我自己的工件中删除版本号,而不是从第三方库中删除。
答案 0 :(得分:2)
要从复制的依赖项中删除版本,您可以使用maven-dependency-plugin
的{{3}}选项。
dependency:copy-dependencies
将jars
复制到某个中间位置。<stripVersion>true</stripVersion>
。<stripVersion>false</stripVersion>
。有关详情,请查看stripVersion。
编辑:
这是为了解释finalname
的工作原理。
finalName: This is the name of the bundled project when it is finally built
(sans the file extension, for example: my-project-1.0.jar). It defaults to
${artifactId}-${version}. The term "finalName" is kind of a misnomer,
however, as plugins that build the bundled project have every right to
ignore/modify this name (but they usually do NOT). For example, if the
maven-jar-plugin is configured to give a jar a classifier of test, then the
actual jar defined above will be built as my-project-1.0-test.jar.
基本上它几乎总是包含.jar
中的版本。
在版本(2.6&gt;)中,在<configuration>
中,您可以指定<fileNameMapping>no-version</fileNameMapping>
。
答案 1 :(得分:1)
jar插件可以单独计算和编写清单类路径。 这会生成一个具有所需名称的工作jar
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<archive>
<index>true</index>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
</build>