Переименование зависимости Maven в папке WEB-INF / lib WAR - PullRequest
14 голосов
/ 11 февраля 2011

Мне нужно иметь JAR-зависимость в сгенерированной Maven папке WAR WEB-INF/lib как 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, который я мог бы использовать, или я должен начать писать свой собственный?

Ответы [ 4 ]

30 голосов
/ 22 февраля 2011

Вы можете использовать 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.

4 голосов
/ 13 февраля 2011

Возможно, вы захотите узнать, может ли вам помочь outputFileNameMapping параметра плагин maven war .

1 голос
/ 19 мая 2015

Я знаю, что отвечаю на старую ветку, но мне нужно было выполнить вышеизложенное и найти эту ветку полезной. Я нашел способ добиться этого, выполнив двухэтапный процесс:

  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, но я думаю, что это должно работать для оригинального вопроса об авторах.

1 голос
/ 11 февраля 2011

Извините, я не совсем понимаю ваш вопрос, какой у вас есть код для импорта этого jar-файла в POM?

Если Jar-файл, который вы хотите импортировать, называется таковым в репозитории, и вы импортируете правильный файлв вашем POM вам не нужно беспокоиться о соглашениях об именах файлов JAR.

Я полагаю, что вам, возможно, придется переименовать файл в репозитории, вы можете сделать это, просто зайдя в репозиторий Users / .m2 в окне проводника и отследив файл и переименовав его, обратите внимание на этоможет иметь последствия для других проектов.

Я рекомендую вам скопировать файл, переименовать его и добавить в хранилище с новым идентификатором артефакта x-1.0.final.jar

mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> \
-DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>

заполните <>

Надеюсь, это поможет Крис

...