2016-01-27 3 views
0

Я пытаюсь построить толстую банку с помощью плагина maven shader. Я собираюсь немного в кругах, фиксируя maven и разбивая IntelliJ build, и наоборот.Плагин IntelliJ и Maven shader с несколькими модулями

Мой проект следующим образом (я ушел из раздела плагин, который содержит шейдера плагин):

  1. модуль-а - основной модуль проекта, содержит основной класс
  2. модуль-B - модуль, используемый
  3. модуль-C - модуль, используемый модулем

A POM:

http://maven.apache.org/xsd/maven-4.0.0.xsd "> 4.0.0

<groupId>com.my</groupId> 
    <artifactId>module-a</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>pom</packaging> 

    <modules> 
     <module>../module-b</module> 
     <module>../module-c</module> 
    </modules> 

    <dependencies> 
     <dependency> 
      <groupId>com.my</groupId> 
      <artifactId>module-b</artifactId> 
      <version>1.0-SNAPSHOT</version> 
     </dependency> 

     <dependency> 
      <groupId>com.my</groupId> 
      <artifactId>module-c</artifactId> 
      <version>1.0-SNAPSHOT</version> 
     </dependency> 

     <dependency> 
      <groupId>org.clapper</groupId> 
      <artifactId>grizzled-slf4j_2.11</artifactId> 
      <version>1.0.2</version> 
     </dependency> 

     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.7.7</version> 
     </dependency> 

     <dependency> 
      <groupId>com.typesafe.akka</groupId> 
      <artifactId>akka-http-experimental_2.11</artifactId> 
      <version>2.0.3</version> 
     </dependency> 

     <dependency> 
      <groupId>com.typesafe.akka</groupId> 
      <artifactId>akka-http-core-experimental_2.11</artifactId> 
      <version>2.0.3</version> 
     </dependency> 

     <dependency> 
      <groupId>com.typesafe.akka</groupId> 
      <artifactId>akka-stream-experimental_2.11</artifactId> 
      <version>2.0.3</version> 
     </dependency> 

     <dependency> 
      <groupId>net.ceedubs</groupId> 
      <artifactId>ficus_2.11</artifactId> 
      <version>1.1.2</version> 
     </dependency> 

     <dependency> 
      <groupId>com.typesafe</groupId> 
      <artifactId>config</artifactId> 
      <version>1.3.0</version> 
     </dependency> 

     <dependency> 
      <groupId>ch.qos.logback</groupId> 
      <artifactId>logback-classic</artifactId> 
      <version>1.1.3</version> 
     </dependency> 

     <dependency> 
      <groupId>com.typesafe.akka</groupId> 
      <artifactId>akka-actor_2.11</artifactId> 
      <version>2.4.1</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.3.2</version> 
      <configuration> 
       <source>1.8</source> 
       <target>1.8</target> 
      </configuration> 
     </plugin> 

     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <version>1.5</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
        <configuration> 
         <shadedArtifactAttached>true</shadedArtifactAttached> 
         <shadedClassifierName>allinone</shadedClassifierName> 
         <artifactSet> 
          <includes> 
           <include>*:*</include> 
          </includes> 
         </artifactSet> 
         <transformers> 
          <transformer 
            implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> 
           <resource>reference.conf</resource> 
          </transformer> 
          <transformer 
            implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
           <manifestEntries> 
            <Main-Class>com.my.Service</Main-Class> 
           </manifestEntries> 
          </transformer> 
         </transformers> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

     </plugins> 
    </build> 

</project> 

модуль B и C помам аналогичны (за исключением имен модулей)

<?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.my</groupId> 
    <artifactId>module-b</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <packaging>pom</packaging> 


    <dependencies> 
     <dependency> 
      <groupId>com.typesafe.akka</groupId> 
      <artifactId>akka-actor_2.11</artifactId> 
      <version>2.4.1</version> 
     </dependency> 
    </dependencies> 


    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.3.2</version> 
       <configuration> 
        <source>1.8</source> 
        <target>1.8</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

Все модули находятся в том же каталоге на том же уровне. Хотя я могу построить через IntelliJ просто отлично, я не могу построить модуль-через maven, потому что он не может найти модули -b и -c. В общем, я не могу построить ничего, что ссылается на локальный проект, поскольку Maven их не найдет. Не имеет значения, пытаюсь ли я его использовать внутри IDE или из командной строки.

Строительство модуля-а я получаю:

[ERROR] Не удалось выполнить задачу по проекту модуля A: Не удалось разрешить зависимостей для проекта com.my:module-a:pom:1.0-SNAPSHOT : следующие артефакты не могут быть разрешены: com.my:module-b:jar:1.0-SNAPSHOT, com.my:module-c:jar:1.0-SNAPSHOT: Не удалось найти артефакт com.my:module- c: jar: 1.0-SNAPSHOT -> [Справка 1]

Я понимаю, что я, вероятно, испортил эти поры, пытаясь играть с зависимостями от ссылок модулей, но Каков правильный способ ссылки на локальный модуль в файле pom, без необходимости установки модуля в репозиторий?

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

+0

похоже, что у вас есть модуль A, зависящий от себя в вашем списке зависимостей. посмотрите на artifactId вашей первой зависимости в модуле A pom - это «module-a». Я думаю, что это должен быть «модуль-c»? – adammtlx

+0

Да, вы правы, я испортил это, когда был упрощен для публикации. Я исправил сообщение, спасибо. –

ответ

0
<packaging>pom</packaging> 
    <modules> 
     <module>../module-b</module> 
     <module>../module-c</module> 
    </modules> 

эта часть ПОМ вашего модуля-а отражает, что он является родителем модуля б и модуль-с, но Противоположно ваш модуль-б и упускают

<parent> 
     <groupId>com.my</groupId> 
     <artifactId>module-a</artifactId> 
     <version>1.0-SNAPSHOT</version> 
    </parent> 

Просто понимание , pom вашего модуля должен включать те зависимости, которые вы, возможно, захотите использовать в качестве библиотеки для них. Поэтому я надеюсь, что вы захотите использовать какой-либо код из модуля-b/c на своем модуле-a, чтобы включить их в свои зависимости pom.


Или вы можете удалить эти строки из ваших module-a

<modules> 
     <module>../module-b</module> 
     <module>../module-c</module> 
    </modules> 

с учетом всех модулей независимы друг от друга с точки зрения иерархии.

+0

Спасибо. Итак, если я правильно прочитал, просто добавьте блок к модулям -b и -c, должен ли работать? К сожалению, я что-то пропустил, так как в итоге я получил циклическую ссылку. которые я совершенно не понимаю. Это сообщение повторяется дважды (с заменой модуля): проекты в реакторе содержат циклическую ссылку: Edge между «Vertex {label = 'com.my: project-c: 1.0-SNAPSHOT'} ' и' Vertex {label = 'com.my: project-b: 1.0-SNAPSHOT'} 'вводит цикл в график com.my:project-b:1-SNAPSHOT -> com.my:project-c:1.0-SNAPSHOT - > com.my:project-b:1.0-SNAPSHOT -> [Помощь 1] –

+0

Вы могли бы обновить с полным pom от каждого модуля в вопросе – nullpointer

+0

Просто сделал, без добавления родительских блоков, которые также нарушают сборку IDE. Спасибо за вашу помощь! –

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