具有多个模块的IntelliJ和Maven着色器插件
我正在尝试用maven着色器插件构建一个胖罐子。我会在修复maven和破坏IntelliJ build,以及viceversa方面做一些周旋 我的项目如下(我省略了包含着色器插件的插件部分):具有多个模块的IntelliJ和Maven着色器插件,maven,pom.xml,Maven,Pom.xml,我正在尝试用maven着色器插件构建一个胖罐子。我会在修复maven和破坏IntelliJ build,以及viceversa方面做一些周旋 我的项目如下(我省略了包含着色器插件的插件部分): 模块a-主项目模块,包含主类 模块b-模块,由A使用 模块-c-模块,由A使用 模块A pom: http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 <groupId>com.my</groupId> <a
<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>
com.my
模块a
1.0-快照
聚甲醛
../module-b
../c模块
com.my
模块b
1.0-快照
com.my
模块c
1.0-快照
org.clapper
灰色-slf4j_2.11
1.0.2
org.slf4j
slf4j api
1.7.7
com.typesafe.akka
akka-http-U 2.11
2.0.3
com.typesafe.akka
akka-http-core-2.11
2.0.3
com.typesafe.akka
akka-stream-experimental_2.11
2.0.3
net.ceedubs
榕树2.11
1.1.2
com.typesafe
配置
1.3.0
回写
回归经典
1.1.3
com.typesafe.akka
akka-actor_2.11
2.4.1
org.apache.maven.plugins
maven编译器插件
2.3.2
1.8
1.8
org.apache.maven.plugins
maven阴影插件
1.5
包裹
阴凉处
真的
蒜酮
*:*
reference.conf
我的服务
模块B和C POM类似(模块名称除外)
4.0.0
com.my
模块b
1.0-快照
聚甲醛
com.typesafe.akka
akka-actor_2.11
2.4.1
org.apache.maven.plugins
maven编译器插件
2.3.2
1.8
1.8
所有模块都在同一级别的同一目录中。虽然我可以通过IntelliJ很好地构建模块,但我不能通过maven构建模块-a,因为它找不到模块-b和-c。因此,一般来说,我不能构建任何引用本地项目的内容,因为maven找不到它们。无论我是在IDE中还是从命令行中尝试,都没有关系。
建筑模块a我得到:
[错误]无法对项目模块a执行目标:无法解析
projectcom.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,试图处理依赖项与模块引用,但是在pom文件中引用本地模块的正确方法是什么,而不必在存储库中安装模块
我读到我应该创建一个第四个父项目,该项目将module-a作为父项目,并使用该项目创建着色jar,但即使使用这种方法,我也无法让它在同一个项目中定位模块,它只解析repo模块
<packaging>pom</packaging>
<modules>
<module>../module-b</module>
<module>../module-c</module>
</modules>
考虑到所有模块在层次结构上都是相互独立的。在依赖项列表中似乎有依赖于自身的模块A。看看模块A的pom中第一个依赖项的artifactId——它是“模块A”。我认为它应该是“模块c”“?是的,你是对的,我在简化发帖时把它搞砸了。我更正了帖子,谢谢。谢谢。因此,如果我读得正确,只需将块添加到模块-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]您是否可以使用问题中每个模块的完整pom进行更新,而不添加同样破坏IDE构建的父块。谢谢你的帮助!我没有让你做到这一点,添加
parent
是否会导致构建失败?此外,mvn clean install
在您的项目上返回了什么错误?修改答案后,您也可以尝试另一种方法是的,添加父级会导致my(maven)构建失败,并出现循环冗余错误,并导致奇怪的intellij错误。不会太担心intellij错误,只想让它得到它
<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>
<modules>
<module>../module-b</module>
<module>../module-c</module>
</modules>