Переименование зависимостей Maven в папке WAR WEB-INF/lib

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

Ответ 1

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

Ответ 3

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

Если 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>

заполните < >

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

Ответ 4

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

  • Используйте maven-war-plugin, чтобы исключить исходный файл jar из поставляемого.
  • Используйте плагин maven-dependency для копирования исходного файла 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), но это необходимо выполнить перед отправкой. Это определяется фазой: "подготовить-пакет":

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