Maven - 如何管理具有共同依赖关系的多个jar

问题描述 投票:0回答:3

我有一个大项目,由几个较小的项目组成,每个项目都有一个pom.xml。有些项目是其他项目的依赖项。我的工作方式是制作一些独立的阴影jarwar文件,感谢maven。

我遇到的问题是我有一个新的自定义项目依赖于主项目中的类。问题是这个项目包含一个自定义类,因此,生成的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的依赖项?

我希望我能够让自己明白。

谢谢!

java maven jar dependencies
3个回答
1
投票

主要内容:阴影罐不是其他罐子的依赖。

您可以构建阴影(或胖)罐作为独立应用程序运行它们,但不要将它们放入<dependencies>

如果您需要多个项目中的类,请将它们放入项目或模块中,并像往常一样编译它们(不是带阴影的)。然后你可以用它作为依赖。


0
投票

您可以排除依赖项中的子依赖项:

<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>


0
投票

另一种方法是选择哪些工件进入阴影罐。所以你可以包括一个组,除了一些特定的工件。

<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>
© www.soinside.com 2019 - 2024. All rights reserved.