maven打包时遇到两个全限定类名相同的类

我使用的一个第三方的jar包,里边有一个类不是public的,但是我需要用,我就在自己的项目里创建了相同的包名,把这个类拷贝过来,改成public类。

现在问题出在打包后,解压缩查看打包后的jar,两份类文件都被包含进去了。

pom.xml中的配置.

<build>

<plugins>

<plugin>

<artifactId>maven-assembly-plugin</artifactId>

<configuration>

<archive>

<manifest>

<mainClass>PreMainTraceAgent</mainClass>

</manifest>

<manifestEntries>

<Class-Path>.</Class-Path>

<Premain-Class>PreMainTraceAgent</Premain-Class>

<Agent-Class>PreMainTraceAgent</Agent-Class>

<Can-Redefine-Classes>true</Can-Redefine-Classes>

<Can-Retransform-Classes>true</Can-Retransform-Classes>

</manifestEntries>

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

</plugins>

</build>

首先我确实需要让所有依赖都在一个jar包中,所有不能通过配置加载顺序规避这个问题。
我可以把那个库修改一个重新打包,这是一个解决办法。
我现在想的是,能不能修改打包配置,让最后生成的jar中只保留我修改过的那一份。

根据回答,使用maven-assembly-plugin插件,时间:4月20号17点。

只保留一份类这个确实符合预期,这个昨天没注意到,确实是我都问题。


回答:

可以自己指定maven-assembly-plugin插件的打包描述符,在这个描述符中,可以指定排除JAR包中的哪些资源。例如:

<plugin>

<groupId>org.apache.maven.plugins</groupId>

<artifactId>maven-assembly-plugin</artifactId>

<configuration>

<descriptors>

<descriptor>${project.basedir}/assembly-descriptor.xml</descriptor>

</descriptors>

<!-- <descriptorRefs>

<descriptorRef>jar-with-dependencies</descriptorRef>

</descriptorRefs> -->

</configuration>

</plugin>

assembly-descriptor.xml文件内容参考如下:
注意核心是 unpackOptions/excludes,JAR解压缩选项 -> 排除JAR包内的资源,源码编译后的文件不受限制。

<?xml version='1.0' encoding='UTF-8'?>

<assembly

xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0

http://maven.apache.org/xsd/assembly-1.1.0.xsd">

<id>assembly-descriptor</id>

<formats>

<format>jar</format>

</formats>

<includeBaseDirectory>false</includeBaseDirectory>

<fileSets>

<fileSet>

<directory>${project.build.directory}/classes</directory>

<outputDirectory>/</outputDirectory>

</fileSet>

</fileSets>

<dependencySets>

<dependencySet>

<outputDirectory>/</outputDirectory>

<unpack>true</unpack>

<unpackOptions>

<excludes>

<!-- 使用通配符*解决内部类的问题,但是要小心其他以Felix开头的类 -->

<exclude>org/apache/felix/framework/Felix*.class</exclude>

<exclude>org/apache/felix/framework/BundleImpl.class</exclude>

</excludes>

</unpackOptions>

</dependencySet>

</dependencySets>

</assembly>

以上是 maven打包时遇到两个全限定类名相同的类 的全部内容, 来源链接: utcz.com/p/944377.html

回到顶部