При выполнении proguard-maven-plugin происходит ошибка "CreateProcess error = 206, слишком длинное имя файла или расширение"

Мы разрабатываем наши собственные плагины Eclipse, используемые нашим Eclipse-приложением. В настоящее время мы используем proguard-maven-plugin версию 2.0.8 для обфускации. Однако при запуске mvn 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]

Кто-нибудь когда-нибудь сталкивался с этим? Если да, то как вы решили проблему?

Обратите внимание, что я действительно видел этот вопрос и другие связанные вопросы, прежде чем принимать решение, но ответ Брэда Мейса не применим к моему делу как "ошибка CreateProcess = 206, имя файла или расширение слишком длинное" генерируется Proguard, а не Javadoc. Первоначально, я думаю (исправьте меня, если я ошибаюсь), что один из 7 вариантов, заданных espinchi или их вариант, может работать, но я не уверен, какой из них. Чтобы сообщить вам свои ограничения при определении решения:

  • Я не уверен, что все классные пути в этом конкретном плагине действительно, поскольку это было разработано кем-то еще много, много лет назад, поэтому я не думаю, что смогу связаться с разработчиком. Это делает я колеблюсь, чтобы уменьшить classpaths из страха, что это может на самом деле больше вреда, чем пользы.
  • Я не могу использовать переключатель для использования опции IntelliJ, поскольку эта проблема возникла в командной строке Windows при выполнении установки mvn а не в Eclipse IDE.
  • Я думаю, что другие варианты слишком утомительны для меня. Я надеюсь, что там будет более простое решение.

Для справки ниже приведен фрагмент, связанный с Proguard, из моего файла pom:

<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

Как-то, для нашего случая, ff. шаги устранили ошибку:

  • Сравните зависимости в компоненте pom.xml и зависимостях, определенных с помощью proguard-maven-plugin. В нашем случае мы заметили, что proguard-maven-plugin идентифицировал некоторые зависимости, которые действительно не нужны компоненту. Фактически, эти зависимости даже не указаны в компоненте pom.xml.

  • После выполнения шага 1 измените компонент pom.xml таким образом, чтобы он исключил ненужные зависимости, которые Proguard определил (т.е. используйте исключение ). Ниже приведен пример фрагмента:

<build>
    <plugins>
        <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>
                <maxMemory>1024m</maxMemory>
                <proguardInclude>${basedir}/proguard.conf</proguardInclude>
                <libs>
                    <lib>${java.home}/lib/rt.jar</lib>
                    <lib>${java.home}/lib/jce.jar</lib>
                </libs>
                <!-- For some reason, these components are included by the plugin even if they are not dependencies of SES components so we need to explicitly indicate to proguard-maven-plugin to exclude them. -->
                <exclusions>
                    <exclusion>
                        <groupId>p2.eclipse-plugin</groupId>
                        <artifactId>org.apache.geronimo.specs.geronimo-jms_1.1_spec</artifactId>
                    </exclusion>
                    <!-- other exclusions here -->
                </exclusions>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>net.sf.proguard</groupId>
                    <artifactId>proguard-base</artifactId>
                    <version>5.2</version>
                    <scope>runtime</scope>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

Ответ 2

Если у вас огромный список зависимостей, список -libraryjars результирующей командной строки для выполнения ProGaurd может стать слишком длинным. В Windows сообщение об ошибке может выглядеть как ошибка CreateProcess = 206. Имя файла или расширение слишком длинное.

<putLibraryJarsInTempDir>true</putLibraryJarsInTempDir>

в конфигурации плагина заставляет плагин копировать все файлы библиотеки в один временный каталог и передавать этот каталог в качестве единственного аргумента -libraryjars в ProGuard. Производительность сборки будет немного хуже, но командная строка будет намного короче.

Более подробную информацию об использовании плагинов Proguard Maven вы найдете здесь.

Ответ 3

Причина этого в том, что обычно maven репо находится в пользовательском каталоге, и этот путь добавляется для каждого jar файла 'classpath, что делает его достаточно большим для обработки окнами.

Решение заключается в том, что вам нужно переместить репозиторий Maven на более короткий путь - скажем, C :. Для этого вам нужно отредактировать maven settings.xml и добавить тег, как показано на изображении ниже. После этого вы можете запустить maven clean install. Это должно решить проблему.

Maven Issue