java - NullPointerException : ProGuard, Spring 启动

标签 java spring maven spring-boot proguard

我遇到了空指针异常,并且不知道如何克服此问题并混淆代码。你有什么想法吗?

我正在努力使用 Proguard (proguard + proguard-maven-plugin) 混淆 [Maven] Spring-Boot 项目的一些库

堆栈跟踪:

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal com.github.wvengen:proguard-maven-plugin:2.0.11:proguard (proguard) on project XXX: Execution proguard of goal com.github.wvengen:proguard-maven-plugin:2.0.11:proguard failed.
(...)
Caused by: org.apache.maven.plugin.PluginExecutionException: Execution proguard of goal com.github.wvengen:proguard-maven-plugin:2.0.11:proguard failed.
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:110)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
... 19 more
Caused by: java.lang.NullPointerException
at com.github.wvengen.maven.proguard.ProGuardMojo.execute(ProGuardMojo.java:506)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
... 20 more

POM 构建插件:

<plugin>
 <groupId>com.github.wvengen</groupId>
 <artifactId>proguard-maven-plugin</artifactId>
 <version>2.0.11</version>
 <executions>
  <execution>
   <id>proguard</id>
   <phase>package</phase>
   <goals>
    <goal>proguard</goal>
   </goals>
  </execution>
 </executions>
 <configuration>
  <obfuscate>true</obfuscate>
  <injar>${project.build.finalName}.jar</injar>
  <outjar>${project.build.finalName}-small.jar</outjar>
  <outputDirectory>${project.build.directory}/proguard</outputDirectory>
  <proguardInclude>${basedir}/proguard.conf</proguardInclude>
  <libs>
   <lib>${java.bootstrap.classes}</lib>
   <lib>${java.cryptographic.extension.classes}</lib>
   <lib>${java.secure.socket.extension.classes}</lib>
  </libs>
  <injarNotExistsSkip>true</injarNotExistsSkip>
  <options>
 </options>
</configuration>
<dependencies>
 <dependency>
  <groupId>net.sf.proguard</groupId>
   <artifactId>proguard-base</artifactId>
   <version>5.2.1</version>
   <scope>runtime</scope>
  </dependency>
 </dependencies>
</plugin>

最佳答案

鉴于提到的堆栈跟踪并查看 source code对于 2.0.11 版本的插件,在 ProGuardMojo 类的此 block 中抛出 NullPointerException:

502     if (libs != null) {
503         for (Iterator i = libs.iterator(); i.hasNext();) {
504             Object lib = i.next();
505             args.add("-libraryjars");
506             args.add(fileNameToString(lib.toString()));
507         }
508     }

这意味着 lib.toString() 很可能是对 null 引用的方法调用。

从你提到的插件配置中我们可以看到:

<libs>
   <lib>${java.bootstrap.classes}</lib>
   <lib>${java.cryptographic.extension.classes}</lib>
   <lib>${java.secure.socket.extension.classes}</lib>
</libs>

因此,很可能这些 Maven 属性之一未设置,作为空/null 传递并导致错误。

您应该检查这些属性是否具有有效值,或者应该从命令行传递,但事实并非如此。

关于java - NullPointerException : ProGuard, Spring 启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35065609/

相关文章:

java - 使用文件 api : how to handle a directory containing 20000-30000 files? 读取目录

java - Spring 批处理 : Profiling a batch processing application

java - 步骤后的 Spring 批处理流/拆分

maven - 如何在第谷构建中使用包含第三方包的目录

java - 尽管使用了 Java 8 特性,项目如何支持 Java 7

java - 如何从maven依赖的属性文件中获取位置?

java - 使用 Zeller 的方法和 Java 的星期几

java - 查找对象参数化注释的运行时类类型

java - 如何解析/解压缩/解包 Nexus 生成的 Maven 存储库索引

java - 如何在 Spring @Scheduled 中使用cron 表达式在每个月的第一个星期一解雇工作?