我想用Java邮件嵌入jar模糊jar:
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.5.4</version>
<type>jar</type>
</dependency>
......
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>3.0.0</version>
<extensions>true</extensions>
<configuration>
<instructions>
<!-- Embed dependency into the bundle-->
<Embed-Dependency>javax.mail;inline=true</Embed-Dependency>
<Bundle-Version>${project.version}</Bundle-Version>
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
</instructions>
</configuration>
</plugin>
Proguard配置
<plugin>
<groupId>com.github.wvengen</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<version>2.0.11</version>
<dependencies>
<dependency>
<groupId>net.sf.proguard</groupId>
<artifactId>proguard-base</artifactId>
<version>5.2.1</version>
</dependency>
</dependencies>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>proguard</goal>
</goals>
</execution>
</executions>
<configuration>
<proguardVersion>5.2.1</proguardVersion>
<obfuscate>true</obfuscate>
<injarNotExistsSkip>true</injarNotExistsSkip>
<injar>${project.build.finalName}.jar</injar>
<outjar>${project.build.finalName}.jar</outjar>
<options>
<option>-keep public class org.package.engine.osgi.impl</option>
<option>-keep public interface org.package.engine.osgi</option>
</options>
<exclusions>
<exclusion>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
</exclusion>
</exclusions>
<libs>
<lib>${java.home}/lib/rt.jar</lib>
<lib>${java.home}/lib/jce.jar</lib>
<lib>${java.home}/lib/ext/jfxrt.jar</lib>
</libs>
</configuration>
</plugin>
我在编译期间遇到此错误
proguard jar: C:\Users\user\.m2\repository\net\sf\proguard\proguard-base\5.2.1\proguard-base-5.2.1.jar
[proguard] ProGuard, version 5.2.1
[proguard] Reading library jar [C:\Users\user\.m2\repository\org\osgi\org.osgi.core\6.0.0\org.osgi.core-6.0.0.jar]
[proguard] Reading library jar [C:\Users\user\.m2\repository\org\apache\karaf\shell\org.apache.karaf.shell.core\4.0.1\org.apache.karaf.shell.core-4.0.1.jar]
[proguard] Reading library jar [C:\Users\user\.m2\repository\jline\jline\2.12\jline-2.12.jar]
.............
[proguard] Maybe this is library method 'java.util.Comparators$NullComparator { java.util.Comparator reversed(); }'
[proguard] Warning: there were 1 instances of library classes depending on program classes.
[proguard] You must avoid such dependencies, since the program classes will
[proguard] be processed, while the library classes will remain unchanged.
[proguard] (http://proguard.sourceforge.net/manual/troubleshooting.html#dependency)
[proguard] Error: Please correct the above warnings first.
[proguard] Note: there were 5 accesses to class members by means of introspection.
[proguard] You should consider explicitly keeping the mentioned class members
[proguard] (using '-keep' or '-keepclassmembers').
[proguard] (http://proguard.sourceforge.net/manual/troubleshooting.html#dynamicalclassmember)
答案 0 :(得分:2)
没有尝试运行你的POM,但是正如我所看到的那样,它会将javax.mail
工件提取到你的JAR中,然后对包括javax.mail
在内的所有JAR进行模糊处理,你就会遇到上述问题。 / p>
为什么不将其复制到META-INF/lib
,而不是提取依赖项?删除;inline=true
的AFAIR应该这样做。
答案 1 :(得分:2)
问题来自于-keep
配置中proguard-maven-plugin
选项的配置错误。您应该添加*
通配符,以表明您希望将所有类/接口保留在您提到的包中(请参阅usage page)。
更正的配置是:
<options>
<option>-keep public class org.package.engine.osgi.impl.*</option>
<option>-keep public interface org.package.engine.osgi.*</option>
</options>