Плагин maven-dependency-plugin неправильно копирует jar-файлы

java maven jar maven-dependency-plugin

440 просмотра

2 ответа

146 Репутация автора

В моем локальном репозитории ( .m2/repository) у меня есть несколько jar-файлов, которые я хочу, чтобы они были скопированы (и ссылки) в моем проекте. У меня есть следующее pom.xmlдля com.google.protobufартефакта:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <parent>
      <groupId>groupName</groupId>
      <artifactId>groupName.master</artifactId>
      <relativePath>../pom.xml</relativePath>
      <version>1.0.0-SNAPSHOT</version>
   </parent>
   <groupId>groupName</groupId>
   <artifactId>com.google.protobuf</artifactId>
   <name>com.google.protobuf</name>
   <version>2.5.0</version>
   <build>
   <plugins>
   <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>2.10</version>
          <executions>
            <execution>
              <id>copy-installed</id>
              <phase>install</phase>
              <goals>
                <goal>copy</goal>
              </goals>
              <configuration>
                <artifactItems>
                  <artifactItem>
                    <groupId>${project.groupId}</groupId>
                    <artifactId>${project.artifactId}</artifactId>
                    <version>${project.version}</version>
                    <type>${project.packaging}</type>
                  </artifactItem>
                </artifactItems>
                <outputDirectory>build</outputDirectory>
              </configuration>
            </execution>
          </executions>
        </plugin>
     </plugins>
   </build>
</project>

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

Вот банки того же артефакта. Один из них взят из локального репозитория (см. Выше), а другой - так называемый скопированный в buildпапку. Как видите, в скопированном файле отсутствуют файлы классов, которые находятся в comпапке.

введите описание изображения здесь

Почему плагин копирует это неправильно? У кого-нибудь был подобный опыт?

ОБНОВЛЕНИЕ: Одна вещь, которую я заметил, - то, что у этих двух фляг есть различные файлы МАНИФЕСТА. Может ли быть так, что один из сосудов каким-то образом взят откуда-то, где его не должно быть?

Автор: Schütze Источник Размещён: 18.07.2016 02:40

Ответы (2)


0 плюса

146 Репутация автора

Решение

Ок, разобрался. Проблема была в том, что я неправильно определил артефакт. Это должно было быть:

                  <artifactItem>
                    <groupId>${project.groupId}</groupId>
                    <artifactId>${project.artifactId}</artifactId>
                    <version>${project.version}</version>
                    <overWrite>true</overWrite>
                    <type>${project.packaging}</type>
                    <outputDirectory>build</outputDirectory>
                    <destFileName>protobuf-java-2.5.0.jar</destFileName>
                  </artifactItem>

Обратите внимание на <nameтег>, который в моем коде был неверным pom.xml, поэтому система не смогла получить необходимый артефакт. Также destFileNameтег.

Кроме того, выше, это было неправильно:

<groupId>groupName</groupId>
<artifactId>com.google.protobuf</artifactId>
<name>com.google.protobuf</name>

Если вы хотите использовать тот, который вы загрузили из центрального репозитория, вы не можете изменить groupIdили artifactId. Они должны оставаться так, как они указаны на веб-сайте пакета.

После исправления я теперь могу видеть файлы классов.

Автор: Schütze Размещён: 18.07.2016 03:06

0 плюса

78 Репутация автора

Добавьте этот плагин pox.xml

<plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy-appCtx</id>
                        <phase>generate-resources</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <!--copy location-->
                            <outputDirectory>src/main/resources</outputDirectory>
                            <overwrite>true</overwrite>
                            <resources>
                                <resource>
                                    <!--file location-->
                                    <directory>${basedir}/lib</directory>
                                    <includes>
                                        <include>test1.jar</include>
                                        <include>test2.jar</include>
                                    </includes>
                                </resource>
                            </resources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
Автор: Mahendra Sri Размещён: 14.11.2018 07:14
Вопросы из категории :
32x32