2017-02-01 2 views
1

Цель: создать исполняемый uber jar с плагином maven shade, который может быть выполнен во время компиляции mvn другого pom.mvn process-resources не вытаскивает uber jar, созданный с помощью теневого плагина

репрографии шаги:

  1. Создать pom.xml для компонента "издателя", используя ниже ПОМ.
  2. Используйте Дженкинс построить для МВН развернуть его (МВН установка будет работать, а)
  3. Добавить зависимость в pom.xml для «потребителя» (ПОМ ниже)
  4. МВН компилировать потребителя

Ожидаемое поведение: Uber баночка для издателя загружаются где-то в потребительском/целевых каталогах

Actual: Uber баночка делает п OT появляются в каталоге потребителей

Компонент 1: Издательство

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

<groupId>com.mec.experiment</groupId> 
<artifactId>publisher</artifactId> 
<version>1.0-SNAPSHOT</version> 
<packaging>jar</packaging> 
<dependencies> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>5.2.6.Final</version> 
    </dependency> 
</dependencies> 
<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-jar-plugin</artifactId> 
      <configuration> 
       <archive> 
        <manifestFile>src/main/resources/META-INF/MANIFEST.mf</manifestFile> 
       </archive> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <version>2.3</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

Компонент 2: Потребитель

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

<groupId>com.mec.experiment</groupId> 
<artifactId>consumer</artifactId> 
<version>1.0-SNAPSHOT</version> 
<dependencies> 
    <dependency> 
     <groupId>com.mec.experiment</groupId> 
     <artifactId>publisher</artifactId> 
     <version>1.0-SNAPSHOT</version> 
    </dependency> 
</dependencies> 

+0

Где вы указали, что у издателя есть классификатор? Вы используете ' издателя' в зависимости от потребителя. – Tunaki

+0

А, рудиментарный от предыдущего эксперимента.Я попытался с обоими выше и с POMS издатель: <конфигурация> True издатель потребитель: издатель Такое же поведение в обоих случаях. Обновлен потребительский пом, чтобы удалить классификатор для внутренней согласованности. – mcating

+0

Хорошо. Что вы подразумеваете под «целевыми каталогами» здесь? Я не уверен, что понимаю, почему издатель должен быть загружен «где-то в каталогах потребителей/целевых». – Tunaki

ответ

1

answer from the possible duplicate У меня есть ссылки на комментарии, ссылки на страницу с мертвыми примерами. Вот вам supplement. Конфигурация плагина будет принадлежать внутри потребительского пом.

Exec: Java

Полное имя:

org.codehaus.mojo: EXEC-Maven-плагин: 1.5.0: Java

Описание: Выполняет прилагаемое класс Java в текущую ВМ с зависимыми зависимостями проекта как путь к классам.

Атрибуты:

Требуется проект Maven будет выполняться. Требуется разрешение зависимости артефактов в области: тест. Цель потокобезопасна и поддерживает параллельные сборки. С версии: 1.0.

См. Особенно executableDependency для вашего прецедента. Похоже, что это позволит вам ссылаться на producer в соответствии с его идентификатором группы и артефактом вместо жесткого кодирования пути.

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