2016-07-18 4 views
0

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

<?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> 

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

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

enter image description here

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

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

ответ

0

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

    <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. Они должны оставаться такими, какими они указаны на веб-сайте пакета.

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

Смежные вопросы