выполнение ant java зависает после завершения - PullRequest
2 голосов
/ 02 августа 2010

В Liferay ext build-parent.xml есть целевая build-webxml, которая выполняет Java. К сожалению, эта цель по какой-то причине не завершена.

Я отладил код, и основной метод завершился. Но по-прежнему эхо непосредственно после Java не выполняется. Просто висит в конце

Когда я нажимаю Ctrl + c, он печатает

 [java] Java Result: 1
 [echo] web.xml files merged

Если я добавлю spawn = "true", то это закончится, но мне бы это не понравилось. Любые идеи, что может вызвать это и как я могу сделать это закончить?

Apache Ant версии 1.8.1 и JVM build 1.5.0_17-b04

Цель состоит в следующем:

<target name="build-webxml">
    <java
        classname="com.liferay.portal.tools.WebXMLBuilder"
        classpathref="project.classpath"
        fork="true"
        newenvironment="true" spawn="false" resultproperty="web.xml.build.success"
    >
        <jvmarg value="-Dexternal-properties=com/liferay/portal/tools/dependencies/portal-tools.properties" />
        <!--  -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=n -->
        <arg value="tmp/WEB-INF/web.xml.original" />
        <arg value="docroot/WEB-INF/web.xml" />
        <arg value="tmp/WEB-INF/web.xml" />
    </java>
    <echo message="web.xml files merged"/>
</target>

Я обнаружил, что у меня та же проблема, что и здесь: http://www.liferay.com/community/forums/-/message_boards/message/4931689

И все же у меня нет решения

Ответы [ 2 ]

0 голосов
/ 18 июня 2013

Когда Apache Ant разветвляет новый процесс, например, с помощью задач или, он также начинает чтение нового потока со стандартного ввода и отправляет все прочитанное этому процессу.

пожалуйста, укажите http://ant.apache.org/faq.html#input-makes-exec-hang

0 голосов
/ 18 августа 2010

Предполагает, что класс Java com.liferay.portal.tools.WebXMLBuilder является многопоточным, и один из этих потоков все еще работает в фоновом режиме.

spawn = "true"работает, потому что ANT jvm не ждет завершения дочернего процесса.Точно так же CTRL-C работает, потому что вы посылаете сигнал, чтобы убить процесс.

...