执行 proguard-maven-plugin 时,会出现“CreateProcess error=206,文件名或扩展名太长”的情况

2022-09-04 04:41:00

我们正在开发我们自己的 Eclipse 插件 jar,这些插件 jar 由基于 Eclipse 的应用程序使用。我们当前正在使用版本 2.0.8 来混淆它们。但是,在某些插件上运行时,我们目前遇到以下错误:proguard-maven-pluginmvn install

[INFO] ---------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ---------------------------------------------------------------------
[INFO] Total time: 1:34.297s
[INFO] Finished at: Tue Apr 21 16:03:51 SGT 2015
[INFO] Final Memory: 88M/210M
[INFO] ---------------------------------------------------------------------
[ERROR] Failed to execute goal com.github.wvengen:proguard-maven-plugin:2.0.8:proguard (default) on project com.x.y: Execution default of goal com.github.wvengen:proguard-maven-plugin:2.0.8:proguard failed: java.io.IOException: Cannot run program "C:\Program Files (x86)\Java\jdk1.7.0_55\jre\bin\java.exe": CreateProcess error=206, The filename or extension is too long -> [Help 1]

有没有人遇到过这种情况?如果是这样,您是如何解决问题的?

请注意,在决定提问之前,我实际上已经看到了这个问题和其他相关问题,但Brad Mace的答案不适用于我的情况,因为“CreateProcess error=206,文件名或扩展名太长”是由Proguard而不是Javadoc生成的。最初,我认为(如果我错了,请纠正我)espinchi给出的7个选项中的1个或它们的变体可能会起作用,但我不确定是哪一个。只是为了让您知道我在确定解决方案时的约束:

  1. 我不确定这个特定插件中的所有类路径是否有效,因为这是由其他人多年前开发的,所以我认为我仍然无法联系开发人员。这让我对减少类路径犹豫不决,因为担心它实际上可能弊大于利。
  2. 我无法使用开关“使用IntelliJ”选项,因为此问题发生在Windows命令行上进行mvn安装而不是在Eclipse IDE中。
  3. 我认为其他选择对我来说太乏味了。我希望有一个更简单的解决方案。

作为参考,以下是我的pom文件中与Proguard相关的片段:

<build>
    <plugins>
        <plugin>
            <groupId>com.github.wvengen</groupId>
            <artifactId>proguard-maven-plugin</artifactId>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>proguard</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <maxMemory>1024m</maxMemory>
                <proguardInclude>${basedir}/proguard.conf</proguardInclude>
                <libs>
                    <lib>${java.home}/lib/rt.jar</lib>
                </libs>
                <exclusions>
                    <exclusion>
                        <groupId>com.company.package</groupId>
                    </exclusion>
                </exclusions>
            </configuration>
        </plugin>
    </plugins>
</build>

答案 1

如果你有一个巨大的依赖关系列表,那么-libraryjars列表,执行ProGaurd的命令行可能会变得太长。在 Windows 上,错误消息可能类似于 CreateProcess error=206,文件名或扩展名太长。

<putLibraryJarsInTempDir>true</putLibraryJarsInTempDir>

在插件配置中,使插件将所有库 jar 复制到单个临时目录,并将该目录作为唯一的 -libraryjars 参数传递给 ProGuard。构建性能会差一些,但命令行会短得多。

有关proguard maven插件用法的详细信息,请参阅他们的这里


答案 2

这样做的原因是,通常maven存储库位于用户的目录中,并且该路径为“类路径”上的每个jar添加,这使得它足够大,可以让Windows处理。

解决方案是,您需要将 maven 存储库移动到较短的路径 - 例如 C:。为此,您需要编辑maven设置.xml并添加一个标签,如下面的图像链接所示。执行此操作后,即可运行 maven 全新安装。这应该可以解决问题。

Maven Issue


推荐