我使用的一个第三方的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包中的哪些资源。例如:
assembly-descriptor.xml文件内容参考如下:
注意核心是
unpackOptions/excludes
,JAR解压缩选项 -> 排除JAR包内的资源,源码编译后的文件不受限制。