【问题标题】:Maven build appears to be overwriting classes when creating jar-with-dependencies在创建 jar-with-dependencies 时,Maven 构建似乎正在覆盖类
【发布时间】:2016-08-01 15:04:18
【问题描述】:

我正在使用 maven 构建一个 jar-with-dependencies jar。项目中的供应商 jar 文件之一具有类似命名的不同大小写的类。例如 aM.class 和 am.class。

当构建创建“jar-with-dependencies”jar 文件时,只有 aM.class 存在。 am.class 似乎已被覆盖或跳过。每个类似命名的类文件都会发生同样的事情。

我们有几个变通方法,但我很好奇为什么 maven 构建会这样。谢谢

我的 pom:

        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.1</version>
            <configuration>
                <archive>
                    <manifest>
                        <mainClass>com.mytest.MyTest</mainClass>
                    </manifest>
                </archive>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>
                    <id>make-assembly</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

<dependencies>
        <dependency>
            <groupId>com.bloomberglp</groupId>
            <artifactId>blpapi3</artifactId>
            <version>3.10.1</version>
        </dependency>   
</dependencies>

【问题讨论】:

  • 嗯,这可能是因为您在 Windows 上编译并且它是不区分大小写的操作系统。但我不确定为什么操作系统会在解包依赖项时发挥作用。尝试使用最新版本的 maven-assembly-plugin,即 2.6。
  • 如果你真的有类名称相同并且它们的包相同,类加载器应该如何处理这样的事情?哪个类会先加载?
  • 是的.....这有点尴尬,但我有点忘记了 windows 不区分大小写。供应商 jar 必须在 Linux/Solaris 上生成。使用阴影插件而不是程序集插件可以解决我的问题。谢谢

标签: java maven jar jar-with-dependencies


【解决方案1】:

maven-assembly-plugin 会发生相同的类冲突问题,这个插件将所有依赖jar提取到原始类中,并将它们组合在一起。它只适用于依赖较少的项目,对于依赖较多的大型项目,它会导致Java 类名冲突问题,请查看here。

如果您有许多可能会发生冲突的 jar,则使用 maven-shade-plugin 的更好方法。您也可以在 shade 插件中使用 relocating 功能来明确避免冲突

【讨论】:

  • 谢谢...使用 maven-shade-plugin 为我工作。
猜你喜欢
  • 2011-06-28
  • 1970-01-01
  • 2012-01-31
  • 2011-07-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-13
相关资源
最近更新 更多