2016-01-27 43 views
0

我想与他的Maven着色器插件构建一个胖罐子。我正在修复maven并打破IntelliJ构建,反之亦然。IntelliJ和Maven的着色器插件与多个模块

我的项目是如下(我离开了插件的部分,包含着色器插件):

  1. 模块一 - 主体工程模块,包含主类
  2. 模块-B - 模块,使用由A
  3. 模块-C - 模块,由A

模块中使用的聚甲醛:

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 POMS是相似的(除模块名称)

<?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或命令行中尝试它,无所谓。

建筑模块,一个我得到:

[错误]未能就项目的执行目标模块一:无法解析 依赖项目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 - > [Help 1]

我意识到我可能搞砸了这些poms,尝试玩与依赖关系与模块引用,但什么是正确的方式来引用一个本地模块在pom文件,而不必将模块安装在存储库?

我读到我应该创建一个第四个父项目,其中有一个模块a作为父项,并使用该项目创建阴影的jar,但即使采用这种方法,我也无法使其找到模块同一个项目,它只解析回购模块。

+0

它看起来像你有模块A取决于你自己的依赖列表。看看模块A的pom中的第一个依赖关系的artifactId - 它是“模块-a”。我认为它应该是“模块-C”? – adammtlx

+0

是的你是对的,当我简化发布时,我搞砸了。我纠正了这个帖子,谢谢。 –

回答

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

你的模块,一个的POM,这部分反映了它的模块B和模块C,但反之你的模块,b和c缺少

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

只是一个认识父,你的模块的pom应该包含你可能想用作库的依赖关系。所以我希望你想使用模块-b/c中的一些代码来将它们包含在pom依赖关系中。


或者你可能想从您module-a

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

考虑所有的模块删除这些行层次结构方面是相互独立的。

+0

谢谢。因此,如果我正确读取,只需将块添加到模块-b和-c应该可以工作?不幸的是我错过了一些东西,因为我最终得到了循环引用。我完全不明白。该消息被重复两次(使用交换的模块顺序):反应器中的项目包含一个循环引用:'Vertex {label ='com.my:project-c:1.0-SNAPSHOT'}' 和'Vertex {label ='com.my:project-b:1.0-SNAPSHOT'}'介绍在图中循环com.my:project-b:1.0-SNAPSHOT - > com.my:project-c:1.0-SNAPSHOT - > com.my:project-b:1.0-SNAPSHOT - > [Help 1] –

+0

你可以用 – nullpointer

+0

这个问题中的每个模块的完整pom进行更新吗?没有添加父块,这也会破坏IDE的构建。谢谢你的帮助! –