[英]Maven: Adding classes from war/web-inf/classes as a jar to war/web-inf/lib
[英]Renaming Maven dependency in WAR's WEB-INF/lib folder
我需要在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>
我希望它以x-1.0.final.jar
出現在WEB-INF/lib
文件夾中。
這是對Maven Central的外部依賴我無法控制。 此外,我不想強迫所有人使用它將依賴項重新部署到其本地存儲庫。
是否有我可以使用的Maven插件或者我應該開始編寫自己的插件?
您可以使用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
為工件provided
的范圍,以便war
插件不會自動包含該范圍。
您可能想看看maven war插件的outputFileNameMapping參數是否可以幫助您。
我知道我正在回復一個舊線程,但我需要執行上述操作並發現此線程很有幫助。 我發現實現這一目標的方法是執行兩個步驟:
因此,通過說明的方式,這是指定要排除的文件的方式。 在這種情況下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),但這需要在打包之前運行。 這由階段指定:'prepare-package':
<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,但我認為這應該適用於原始的海報問題。
對不起,我完全不明白你的問題,你在POM中導入這個jar的代碼是什么?
如果要導入的Jar在存儲庫中被調用,並且您要在POM中導入正確的文件,那么您不必擔心JAR文件的命名約定。
我相信您可能需要做的是重命名存儲庫中的文件,只需在資源管理器窗口中進入存儲庫用戶/ .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>
填寫<>
希望這有助於克里斯
只是添加到上面的答案。 只有在pom.xml中的 build標記下的pluginManagement標記之外配置依賴項插件時,此解決方案才有效
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.