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