簡體   English   中英

在WAR的WEB-INF / lib文件夾中重命名Maven依賴項

[英]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參數是否可以幫助您。

我知道我正在回復一個舊線程,但我需要執行上述操作並發現此線程很有幫助。 我發現實現這一目標的方法是執行兩個步驟:

  1. 使用maven-war-plugin從交付項中排除原始jar文件。
  2. 使用maven-dependency-plugin將原始jar文件復制到新命名的jar文件中,並將其放在WEB-INF / lib目錄中。

因此,通過說明的方式,這是指定要排除的文件的方式。 在這種情況下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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM