[英]How to Manage dependencies in Maven Muti Project across Multiple Maven Project
[英]Maven - how to manage multiple jar with dependencies in common
我有一個大項目,它由幾個較小的項目組成,每個項目都有一個pom.xml
。 一些項目是其他項目的依賴項。 我的工作方式是通過maven生成一些獨立的有陰影的jar
和war
文件。
我遇到的問題是我有一個新的自定義項目,該項目依賴於主項目中的類。 問題在於該項目包含一個自定義類,因此,生成的jar
文件隨后添加到應用程序中。
首先,我考慮將具有所有依賴項的自定義項目編譯到一個有陰影的jar
。 但是,在運行應用程序時,出現強制轉換錯誤:
java.lang.ClassCastException: com.some.class cannot be cast to com.another.class
我猜問題出在某些依賴是雙重的。 com.another.class
存在於兩個有陰影的jar
,因此在自定義項目jar
和主項目中是不同的。 我有一個Java包,它是主項目jar
和自定義項目jar
的依賴項。
有人對如何使其工作有想法嗎? 有沒有一種方法可以不將依賴項包含在自定義項目jar
,並明確表明需要將依賴項查找到另一個jar
?
我希望我能夠使自己理解。
謝謝!
最主要的是:帶陰影的jar並不意味着是其他jar的依賴項。
您可以構建有陰影(或胖)的jar使其作為獨立的應用程序運行,但不要將其放入<dependencies>
。
如果需要在多個項目中使用類,請將它們放入項目或模塊中,然后像平常的jar一樣編譯它們(而不是陰影對象)。 然后,您可以將其用作依賴項。
您可以在依賴項中排除子依賴項:
<dependency>
<groupId>my.group</groupId>
<artifactId>my-artifact</artifactId>
<version>1.2.3</version>
<exclusions>
<exclusion>
<artifactId>xercesImpl</artifactId>
<groupId>xerces</groupId>
</exclusion>
<exclusion>
<artifactId>xmlParserAPIs</artifactId>
<groupId>xerces</groupId>
</exclusion>
</exclusions>
</dependency>
另一種方法是選擇將哪些工件放入您的着色罐中。 因此,除了一些特定的工件外,您可以包括一個組。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.1</version>
<configuration>
<createSourcesJar>true</createSourcesJar>
<minimizeJar>false</minimizeJar>
<artifactSet>
<includes>
<include>org.vaadin.*:*</include>
<include>com.vaadin:*</include>
<include>com.vaadin.external.atmosphere:*</include>
<include>com.vaadin.external.slf4j:*</include>
<include>com.github.*:*</include>
<include>fi.jasoft:dragdroplayouts</include>
</includes>
<excludes>
<exclude>com.vaadin:vaadin-client-compiler</exclude>
<exclude>com.vaadin:vaadin-client</exclude>
<exclude>com.vaadin:vaadin-theme-compiler</exclude>
</excludes>
</artifactSet>
</configuration>
<executions>
<execution>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.