簡體   English   中英

Maven-如何使用共同的依賴項管理多個jar

[英]Maven - how to manage multiple jar with dependencies in common

我有一個大項目,它由幾個較小的項目組成,每個項目都有一個pom.xml 一些項目是其他項目的依賴項。 我的工作方式是通過maven生成一些獨立的有陰影的jarwar文件。

我遇到的問題是我有一個新的自定義項目,該項目依賴於主項目中的類。 問題在於該項目包含一個自定義類,因此,生成的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM