Ошибка создания процесса = 206; имя файла или расширение слишком длинное

Я знаю, что этот вопрос задавался раньше, но я не смог исправить его, используя решения из других сообщений. Я пытаюсь скомпилировать сложную иерархию проектов gwt, используя maven. Все работало нормально, пока мне не пришлось добавить еще одну библиотеку, а именно: org.eclipse.birt.runtime.

Теперь я получаю эту ошибку:

[ERROR] Failed to execute goal org.codehaus.mojo:gwt-maven-plugin:2.6.1:debug ....

..... [Lots of jars, many containing birt, no duplicates though] .....


Error while executing process. Cannot run program "C:\Program Files\Java\jdk1.8.0_20\jre\bin\java": CreateProcess error=206, The filename or extension is too long

Зависимость, которую я использую:

<dependency>
    <groupId>org.eclipse.birt.runtime</groupId>
    <artifactId>org.eclipse.birt.runtime</artifactId>
    <version>4.4.1</version>
</dependency>

person ahlexander    schedule 04.11.2014    source источник
comment
Используется ли Birt в клиентском коде GWT? Если нет, то реорганизуйте свой проект, чтобы разделить клиентский и серверный код на отдельные модули; иначе тогда, ну не пользуйтесь виндой?   -  person Thomas Broyer    schedule 04.11.2014
comment
нет, это только на стороне сервера; клиентская и серверная стороны уже разделены, что именно вы имеете в виду?   -  person ahlexander    schedule 04.11.2014


Ответы (2)


Наконец-то мне удалось это решить:

Оказывается, birt вместе со своими зависимостями просто добавлял слишком много библиотек, а путь к классам стал слишком длинным для обработки командой Windows. Кроме того, библиотеки birt имеют глупо длинные имена.

Решил это с помощью этой зависимости (мне нужна была только среда выполнения), я создал каталоги lib и birt и сам поместил туда банку:

<dependency>
    <groupId>org.eclipse.birt.runtime</groupId>
    <artifactId>org.eclipse.birt.runtime</artifactId>
    <version>4.4.1</version>
    <scope>system</scope>
    <systemPath>${basedir}/lib/birt/birt.runtime-4.4.1.jar</systemPath>
</dependency>
person ahlexander    schedule 05.11.2014
comment
Вы должны пометить этот ответ как принятый, чтобы другим было легче узнать, что вы больше не ищете решение. - person James Jenkins; 05.11.2014
comment
Через 19 часов я смогу это сделать. - person ahlexander; 05.11.2014

У Birt нет причин находиться в пути к классам, если он не используется на стороне клиента.

К сожалению, Maven иногда делает вещи сложнее, чем необходимо; поэтому с Maven вам нужно, чтобы ваш клиентский код GWT был конкретным модулем Maven и не зависел от кода на стороне сервера; затем «объединить» все в одну WAR, используя оверлеи WAR.

С таким макетом (назовем модули app-client и app-server) у вас есть несколько решений для запуска gwt:run или gwt:debug:

  • никогда не пробовал, но вы, вероятно, могли бы настроить hostedWebapp, чтобы он указывал на ваш выходной каталог app-server:

    <hostedWebapp>../app-server/target/app-server-${project.version}/</hostedWebapp>
    

    Перед упаковкой app-server WAR убедитесь, что вы запустили mvn clean, чтобы убедиться, что сгенерированные файлы JS получены из app-client (как наложение WAR), а не app-server (сгенерировано gwt:run)

  • что я использую в gwt-maven-archetypes: запускаю серверный код в отдельном контейнер сервлета и используйте <noServer>true</noServer>

    Убедитесь, что вы запустили mvn clean перед упаковкой, или используйте -Dgwt.compiler.force, чтобы быть уверенным, что gwt:compile не будет считать сгенерированный DevMode файл *.nocache.js актуальным и перекомпилирует приложение.

person Thomas Broyer    schedule 04.11.2014