Использование плагина maven-dependency-plugin внутри профиля maven

Я создал профиль maven с плагином maven-dependency-plugin внутри него.

Ниже мой плагин

         <profile>
            <id>copy-dep</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-dependency-plugin</artifactId>
                        <executions>
                        <execution>
                            <id>copy-external</id>
                            <phase>none</phase>
                            <goals>
                                <goal>copy</goal>
                            </goals>
                        </execution>
                        </executions>
                        <configuration>
                            <excludeGroupIds>group ids that I need to exclude</excludeGroupIds>
                            <excludeArtifactIds>artifact ids that I need to exclude</excludeArtifactIds>
                            <includeArtifactIds>artifact ids that I need to include</includeArtifactIds>
                            <includeGroupIds>group id that I need to include</includeGroupIds>
                            <outputDirectory>${project.build.directory}/libs</outputDirectory>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

Я использую приведенную ниже команду для выполнения

mvn dependency:copy-dependencies -DoutputDirectory=libs -Pcopy-dep

Но когда я выполняю команду, она ищет все зависимости, определенные в pom, и также копирует их.

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

В моем pom я использую плагин сборки maven, чтобы отделить необходимые зависимости, которые я не хочу копировать с созданным профилем.

Любая идея, где я иду не так здесь? есть ли лучший способ добиться того же.


person Kashyap    schedule 17.06.2020    source источник


Ответы (2)


Чтобы скопировать только «перечисленные» артефакты (в этом примере будут скопированы только junit и mockito):

<profile>
  <id>copy-dep</id>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>2.8</version>
        <configuration>
          <artifactItems>
            <artifactItem>
              <groupId>junit</groupId>
              <artifactId>junit</artifactId>
              <version>4.12</version>
            </artifactItem>
            <artifactItem>
              <groupId>org.mockito</groupId>
              <artifactId>mockito-core</artifactId>
              <version>2.28.2</version>
            </artifactItem>
          </artifactItems>
          <outputDirectory>${project.build.directory}/libs</outputDirectory>
        </configuration>
      </plugin>
    </plugins>
  </build>
</profile>

и выполнить его:

mvn dependency:copy -Pcopy-dep
person Gmugra    schedule 17.06.2020
comment
Спасибо за решение, оно работает нормально, есть ли способ загрузить транзитивные зависимости, а также исключить некоторые зависимости. - person Kashyap; 17.06.2020

Вам нужно указать Maven, какое выполнение запустить. Итак, напишите:

mvn dependency:copy-dependencies@copy-external -DoutputDirectory=libs -Pcopy-dep

Кстати: помещать это в профиль, вероятно, не нужно.

person J Fabian Meier    schedule 17.06.2020
comment
Спасибо за решение, все равно не работает. Когда я использую команду mvn dependency:copy, она загружает только зависимость, указанную в ‹artifactItem›, но не транзитивные зависимости. Если я использую команду mvn dependency:copy-dependencies, она снова ищет все зависимости в pom и терпит неудачу. - person Kashyap; 17.06.2020