我需要在Maven生成的WAR的WEB-INF/lib
文件夹中有一个JAR依赖项x-1.0.final.jar
而不是x-1.0.jar
,这是它在存储库中的名称。实现这一目标的最佳方法是什么?
在我的POM中我有:
<dependency>
<groupId>foo</groupId>
<artifactId>x</artifactId>
<version>1.0</version>
</dependency>
我希望它在WEB-INF/lib
文件夹中显示为x-1.0.final.jar
。
这是对Maven Central的外部依赖我无法控制。此外,我不想强迫每个人使用它将依赖项重新部署到他们的本地存储库。
我是否可以使用Maven插件,还是应该开始编写自己的插件?
答案 0 :(得分:29)
您可以使用maven-dependency-plugin
在您需要的名称下包含工件。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>foo</groupId>
<artifactId>x</artifactId>
<version>1.0</version>
<type>jar</type>
<outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/lib</outputDirectory>
<destFileName>x-1.0.final.jar</destFileName>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
默认情况下,maven-dependency-plugin
绑定到process-sources
阶段,这似乎足以完成您的任务。请记住为依赖项中的工件设置范围provided
,以便war
插件不会自动包含它。
答案 1 :(得分:4)
您可能想看看outputFileNameMapping的maven war plugin参数是否可以为您提供帮助。
答案 2 :(得分:1)
对不起,我完全不明白你的问题,你在POM中导入这个jar的代码是什么?
如果要导入的Jar在存储库中被调用,并且您要在POM中导入正确的文件,那么您不必担心JAR文件的命名约定。
我相信您可能需要做的是重命名存储库中的文件,只需在资源管理器窗口中进入Repository Users / .m2并跟踪文件并重命名,注意这可能会产生影响在其他项目上。
我建议您复制文件重命名并使用新工件ID x-1.0.final.jar将其添加到存储库
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> \
-DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>
填写&lt;&gt;
希望这会有所帮助 克里斯
答案 3 :(得分:1)
我知道我回复了一个旧帖子,但我需要执行上述操作并发现此帖子很有帮助。我发现实现这一目标的方法是执行两个步骤:
因此,举例来说,这是指定要排除的文件的方式。在这种情况下x-1.0.jar:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.6</version>
<configuration>
<!-- Exclude file: x-1.0.jar from packaging -->
<packagingExcludes>WEB-INF/lib/x-1.0.jar</packagingExcludes>
</configuration>
</plugin>
同时指定必须将文件的副本执行到新名称(x-1.0.final.jar),但这需要在打包之前运行。这由阶段指定:&#39; prepare-package&#39;:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<phase>prepare-package</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>the group of the x jar</groupId>
<artifactId>x</artifactId>
<type>jar</type>
<outputDirectory>${project.build.directory}/${project.build.finalName}/WEB-INF/lib</outputDirectory>
<destFileName>x-1.0.final.jar</destFileName>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
在我的例子中,我并不是硬编码1.0,但我认为这应该适用于原始海报问题。