При выполнении proguard-maven-plugin возникает "ошибка CreateProcess=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)Javajdk1.7.0_55jrebinjava.exe": CreateProcess error=206, The filename or extension is too long -> [Help 1]
кто-нибудь сталкивался с этим? Если да, то как вы решили проблему?
обратите внимание, что я действительно видел этот вопрос и другие связанные с этим вопросы, прежде чем решить, чтобы спросить, но ответ Брэда Мейса не применим к моему случаю, так как" ошибка CreateProcess=206, имя файла или расширение слишком длинное " генерируется Proguard, а не Javadoc. Первоначально я думаю (поправьте меня, если я ошибаюсь), что либо 1 из 7 вариантов, заданных espinchi, либо их вариант могут работать, но я не уверен, какой из них. Просто чтобы вы знали мои ограничения при определении решения:
- Я не уверен, что все пути к классам в данном конкретном плагина действует с это было разработано кем-то еще много, много лет назад, поэтому я не думаю, что все еще могу связаться с разработчиком. Эта марка я не решаюсь уменьшить классные дорожки из-за страха, что это может на самом деле больше вреда, чем пользы.
- Я не могу использовать параметр "использовать 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>
2 ответов
Как-то, для нашего случая, ff. шаги устранили ошибку:
сравните зависимости в POM компонента.xml и зависимости, определенные proguard-maven-plugin. В нашем случае мы заметили, что proguard-maven-plugin определил некоторые зависимости, которые на самом деле не нужны компоненту. Фактически, эти зависимости даже не указаны в POM компонента.XML.
после выполнения шага 1 измените компоненты ПФЛ.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>
Если у вас есть огромный список зависимостей, список-libraryjars результирующей командной строки для выполнения ProGaurd может стать слишком длинным. В Windows сообщение об ошибке может выглядеть как CreateProcess error=206, имя файла или расширение слишком длинное.
<putLibraryJarsInTempDir>true</putLibraryJarsInTempDir>
в конфигурации плагина плагин копирует все банки библиотеки в один временный каталог и передает этот каталог как единственный аргумент-libraryjars в ProGuard. Производительность сборки будет немного хуже, но командная строка будет намного короче.
для получения подробной информации об использовании плагина proguard maven обратитесь к их здесь