Sup*_*ure 6 java dependencies packaging maven
如何使用maven shade或assembly插件自动确定依赖jar中需要哪些类,并将这些类复制到构建中.到目前为止,我没有运气让它自动找到我的构建所需的类.
我可以使用minimizeJar,包括和排除标签来指定哪些会添加类,但我真的希望它做的是事情是这样的:
将我所有类的所有导入复制到jar中,并复制其所有导入及其所有导入的导入,依此类推.
我在想这个问题都错了吗?我怎样才能让maven根据使用的进口量自动最小化jar大小?(请不要只说这个maven插件)因为我已经走到了尽头,我需要一个例子来说明要添加到我的pom中以完成这些任务.
小智 5
ProGuard可以删除未使用的类,甚至更多。
ProGuard 是一个免费的 Java 类文件压缩器、优化器、混淆器和预验证器。它检测并删除未使用的类、字段、方法和属性。它优化字节码并删除未使用的指令。它使用简短的无意义名称重命名其余的类、字段和方法。
首先,您应该打包一个带有依赖项的 jar。使用 maven- assembly-plugin 可以轻松完成:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>2.5.4</version>
<configuration>
<archive>
<manifest>
<mainClass>com.test.HelloWorld</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>
Run Code Online (Sandbox Code Playgroud)
然后配置proguard来优化生成的jar。对于 Maven 项目,请使用proguard-maven-plugin:
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<version>2.0.10</version>
<executions>
<execution>
<phase>package</phase>
<goals><goal>proguard</goal></goals>
</execution>
</executions>
<configuration>
<injar>${project.build.finalName}-jar-with-dependencies.jar</injar>
<outjar>${project.build.finalName}-small.jar</outjar>
<outputDirectory>${project.build.directory}</outputDirectory>
<options>
<option>-dontobfuscate</option>
<option>-dontwarn com.google.**</option>
<option>-keep public class com.test.HelloWorld {public static void main(java.lang.String[]);}</option>
</options>
<libs>
<lib>${java.home}/lib/rt.jar</lib>
</libs>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
运行这些步骤后
mvn clean install
Run Code Online (Sandbox Code Playgroud)
并检查target/<artifact name>-small.jar- 它应该只包含在运行时实际使用的类。
请注意,如果您的代码或依赖项使用反射,可能会出现一些问题。
| 归档时间: |
|
| 查看次数: |
1150 次 |
| 最近记录: |