【发布时间】:2017-08-25 14:35:06
【问题描述】:
出于某种原因,我的客户需要我的工件在其名称中没有版本(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>
问题是这个生成的类路径包含我 PC 上工件的绝对路径。
因此我在配置中添加了<prefix> 标签:
<configuration>
<prefix>lib</prefix>
<fileSeparator>/</fileSeparator>
<pathSeparator>;</pathSeparator>
<outputProperty>bundle.classPath</outputProperty>
</configuration>
然后生成的类路径包含 jar 的版本号。
如何在类路径中省略版本号和绝对路径?
问题是:我只想从我自己的工件中删除版本号,而不是从第三方库中删除。
【问题讨论】:
-
所以您想保留版本号,但希望路径不同,以便客户端可以仅从您自己的工件中获取您的插件?
-
@KingReload:不完全是:我想要 no 路径和 not 版本号用于 my own 工件(子项目maven 构建),但我需要保留第三方依赖项的版本号。因此我不能使用基于正则表达式的解决方案...
-
这就是你尝试使用
<finalName>的原因? -
@KingReload 是的。
标签: version classpath maven-dependency-plugin maven-jar-plugin