Как использовать Netbeans для отладки кода, скомпилированного с помощью пользовательского файла Ant build.xml? - PullRequest
5 голосов
/ 08 декабря 2011

У меня есть свой собственный build.xml файл, состоящий из нескольких целей для компиляции и запуска моего Java-проекта с Ant. Вот соответствующая часть этого:

<path id="libpath">
    <fileset dir="${lib.dir}" includes="**/*.jar" />
</path>

<patternset id="resources">
    <include name="relative/path/to/resources/" />
</patternset>

<path id="resourcespath">
    <fileset dir="${src.dir}">
        <patternset refid="resources" />
    </fileset>
</path>

<target name="compile">
    <mkdir dir="${build.dir}" />
    <mkdir dir="${classes.dir}" />
    <javac srcdir="${src.dir}" destdir="${classes.dir}" classpathref="libpath" includeantruntime="false" debug="true" debuglevel="lines,vars,source" />
    <copy todir="${classes.dir}">
        <path refid="resourcespath" />
    </copy>
</target>

<target name="debug" depends="compile">
    <java fork="true" classname="${main-class}">
        <sysproperty key="java.library.path" path="${dist.dir}"/>
        <classpath>
            <pathelement location="${classes.dir}" />
            <path refid="libpath" />
        </classpath>
    </java>
</target>

Все, что я хочу сделать, это отладить скомпилированный код в ${classes.dir}, используя Netbeans, запустив цель debug, равную build.xml. На данный момент эта цель запускает скомпилированное приложение, не давая возможности остановиться на точках останова. Я знаю, что Netbeans генерирует файл по умолчанию build-impl.xml, но этот файл слишком велик и мне трудно понять. Вот почему я хочу знать, возможно ли использовать IDE Netbeans для отладки кода Java, скомпилированного Ant, используя мой собственный файл build.xml.

Существует также аналогичный вопрос по отладке Java-кода при использовании Ant-сценария в Eclipse , но, как я вижу, предлагаемое решение относится к Eclipse.

Ответы [ 2 ]

8 голосов
/ 08 декабря 2011

Метод, предложенный Сергеем, работает, но каждый раз для отладки проекта необходимо выполнить следующие действия:

  1. Нажать Отладка основного проекта * Кнопка 1005 * (Ctrl+F5), Netbeansбудет ожидать подключения отладчика;
  2. Выберите " Debug "> " Attach Debugger ... " из главного меню Netbeans, укажите параметры отладчика в появившемся диалоговом окне изатем нажмите кнопку « OK » или выберите ранее использовавшийся отладчик из выпадающего списка кнопки отладки панели инструментов (например, Присоединить к 5432 );
  3. Отладьте приложение и закройте его(Shift+F5 не прекратит работу приложения как обычно, а только завершит сеанс отладки).

На мой взгляд, лучший способ использовать " Attach Debugger ..."должен выбрать SocketListen соединитель:

  1. Выполните шаг 2 из цепочки предыдущих шагов (выберите Listen to 5432 ) - отладчик будет ожидать запуска приложения (обратите внимание, что подопция jvmarg server должна бытьустановите n - см. FAQ по удаленной отладке ).
  2. Нажмите Отладка основного проекта * Кнопка 1039 * (Ctrl+F5).
  3. Отладкаприложения, а затем закройте его или завершите одновременно с сеансом отладки, нажав Shift+F5.

В любом случае, этот метод также неудобен, особенно если вы привыкли запускать отладку простым нажатием Ctrl+F5или нажав соответствующую кнопку на панели инструментов.Выбор требуемого отладчика из выпадающего меню раздражает каждый раз.

Так что вот лучшее решение - запустить отладчик прямо из цели Ant debug.В моем случае это выглядит так:

<target name="debug" depends="compile">
    <nbjpdastart addressproperty="jpda.address" name="MyProjectName" transport="dt_socket">
        <classpath>
            <pathelement location="${classes.dir}" />
            <path refid="libpath" />
        </classpath>
    </nbjpdastart>
    <java fork="true" classname="${main-class}">
        <sysproperty key="java.library.path" path="${dist.dir}" />
        <classpath>
            <pathelement location="${classes.dir}" />
            <path refid="libpath" />
        </classpath>
        <jvmarg value="-Xdebug" />
        <jvmarg value="-Xnoagent" />
        <jvmarg value="-Djava.compiler=none" />
        <jvmarg value="-Xrunjdwp:transport=dt_socket,address=${jpda.address}" />
    </java>
</target>

Для получения дополнительной информации, пожалуйста, посмотрите Создание цели для отладки вашего приложения Java SE

2 голосов
/ 08 декабря 2011

Советы из темы Eclipse также подойдут вам.

  1. Используйте следующие параметры JVM (добавьте их в целевой вызов java):

    <jvmarg value="-Xdebug" />
    <jvmarg value="-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=5432" />

  2. В сетевых компонентах используйте Debug-> Attach Debugger с портом 5432

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...