刚进入Maven,我遇到了循环依赖问题。 我原来的结构是
|-mainProject
|-webProject
其中mainProject将webProject作为依赖项(war包装)。 因为webProject也依赖于mainProject而出现错误,所以我改变了结构
|-coreProject
|-mainProject
|-webProject
以便核心被打包到一个jar中,主要和web都有核心作为依赖。 现在我在创建-shade.jar时看到了不同的错误。
CoreProject的组件需要主要和Web项目一起使用。 在这种情况下,最佳做法是什么?
我的依赖图看起来像
mainProject(jar) -> webProject(war) --
|-> coreProject(jar) <-|
|-> jetty jars
我在mainProject中使用了嵌入式jetty,因此我的最终结果将是来自mainProject的单个jar文件,其中包含web和coreProjects。
[错误]无法在项目mainProject上执行目标org.apache.maven.plugins:maven-shade-plugin:1.4:shade(默认):创建阴影jar时出错:Manifest主要属性的签名文件摘要无效 - &GT; [帮助1]
我尝试了过滤器,例如
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
但仍然得到相同的错误
答案 0 :(得分:1)
以你所描述的方式将WAR项目作为另一个项目的依赖项是非常不寻常的。我能想到的有效场景是将WAR捆绑到“更高”级别的存档(如EAR)。但在这种情况下,您的依赖关系是在您的EAR项目中定义的,而不是相反。无论如何,如果您想要遵循最佳实践,请将核心类放在mainProject
中,并将其包装设置为JAR。然后为您的webProject
添加依赖项。
如果mainProject
和webProject
始终一起部署,您应该考虑将它们定义为multimodule POM中的子模块。
答案 1 :(得分:0)
CoreProject的组件需要主要和Web项目一起使用。在这种情况下,最佳做法是什么?
如果CoreProject包含Java类但没有Web内容,请将其作为JAR项目。
如果CoreProject中还包含Web内容(即,属于WAR而不是JAR),那么您可以将其作为WAR项目,并使另外两个WAR项目使用WAR文件覆盖来合并它。您可以阅读有关此here的更多信息。
在Maven中,循环依赖性肯定存在问题。你要么需要打破循环(通过重新组织事物),要么把它全部拉成一个Maven工件。