Отладка сборки maven из Eclipse

у меня есть проект в Eclipse, который, после сборки имеет структуру пакет

launcher.tar.gz
 |-- launcher.jar
 |-- lib/
 |-- resources/
 |-- plugins/

который достигается с помощью maven-assembly-plugin.

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

мой текущий рабочий процесс

$ mvn [clean] package
$ cd target/launcher/
$ java -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -jar launcher.jar

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

как я могу оптимизировать этот процесс из Eclipse?

Я can запустить от моего лаунчера.java class, но при отладке в Eclipse у меня нет возможности устанавливать плагины с помощью этого метода.

3 ответов


ниже приведен один из способов, возможно, сделать то, что вы хотите, с примерами для Windows. Часть идеи от здесь.

Я считаю, что есть два способа выполнения внешних команд с помощью кнопки в eclipse. Один-это настраиваемая конфигурация внешнего инструмента, другой может быть выполнен с конфигурацией запуска для maven в eclipse. Сначала я покажу конфигурацию внешнего инструмента:

идея состоит в том, чтобы создать пакетный файл в корне вашего проекта каталог и запустите его из eclipse, создав новую конфигурацию программы внешних инструментов.

так, например, у вас есть launcher.bat в каталоге проекта со следующим скриптом:

call mvn clean package
call cd target/
call "C:\Program Files\Java\{jdkfolder}\bin\cjava.bat" -{your debug options} -jar launcher.jar


Где cjava.bat-это еще один пакетный файл, который вам нужно создать со следующим скриптом:

start /wait cmd.exe /c java %*


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

external tools config



установите параметры запуска на вкладке Общие на ваш выбор

enter image description here

добавьте эту внешнюю конфигурацию в избранное, чтобы ее было легко получить (кнопка "внешние инструменты" уже должна быть на панели задач).


Альтернатива этому, если вы действительно хотите иметь возможность сделать это с помощью запуска Вместо этого команда должна настроить конфигурацию Maven exec (exec-maven-plugin) и вызвать файл сценария таким образом с чем-то вроде этого, хотя я не пробовал.

<plugin>
                <artifactId>exec-maven-plugin</artifactId>
                <groupId>org.codehaus.mojo</groupId>
                <executions>
                    <execution>
                        <id>Launcher Remote Debug</id>
                        <phase>package</phase>
                        <goals>
                            <goal>exec</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <executable>${basedir}/launcher.bat</executable>
                </configuration>
            </plugin>

тогда вы просто удалите вызов для mvn clean package в файле скрипта, чтобы вы не оказались в бесконечном цикле.


поэтому я никогда не пробовал это, но вот как я бы дал ему шанс:

в вашем проекте, параллельно pom.xml, добавьте сборку.xml (Ant script) со следующим содержимым:

<project>
<target name="mytarget" description="runs my class" >
<java jar="target/launcher/launcher.jar"
       fork="true"
       failonerror="true"
       maxmemory="128m"
       >
</java>
</target>
</project>

теперь в Eclipse перейдите в Run - >External Tools - >конфигурации внешних инструментов

создайте новую конфигурацию в разделе "Ant Build"

под Buildfile выберите полный путь сборки.в XML

под целями цель "mytarget" должна быть выбрана автоматически. Просто убедитесь, что он установлен.

на вкладке JRE передайте свои аргументы VM

-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000

теперь нажмите кнопку Выполнить. В случае успеха подключите отладчик. Вы можете дополнительно автоматизировать его, настроив вкладку Build. Я бы на самом деле настроить на вкладке "Build" запустить "чистый пакет МВН". Но теперь у тебя есть сценарий муравья. Делайте все, что хотите: -)


по рекомендации Braheem, я смог сделать это, используя exec-maven-plugin плагин, однако я изменил немного, чтобы сделать его более независимым от платформы.

С помощью определения профиля из этого ответа, Я могу использовать ${script.extension} для обмена между и .летучая мышь!--19-->

у меня есть следующее определение плагина, которое я могу выполнить с помощью verify target, который в конечном итоге повелось цели полностью.

<plugin>
    <artifactId>exec-maven-plugin</artifactId>
    <groupId>org.codehaus.mojo</groupId>
    <version>1.5.0</version>

    <executions>
        <execution>

            <id>Application Launcher</id>
            <phase>verify</phase>
            <goals>
                <goal>exec</goal>
            </goals>
        </execution>
    </executions>

    <configuration>
        <executable>"${project.build.directory}${project.artifactId}-${project.version}\bin\launcher${script.extension}"</executable>

        <arguments>
            <argument>${flags}</argument>
        </arguments>
    </configuration>
</plugin>

с вышеуказанным определением плагина, у меня есть в наличии

# Launch
mvn package verify
# Calls [ launcher.bat ]

# Launch with debug flag
mvn package verify -Dflags=--debug
# Calls [ launcher.bat --debug ]

тогда из моих сценариев я могу справиться с --debug флаг, и, при необходимости, измените команду запуска.

...

IF "%1"=="--debug" (

        REM add VM arguments to suspend the JVM and wait for debugger to attach
        SET vmOpts=%vmOpts% -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000

        REM some additional arguments to send to my application
        SET extOpts=%extOpts% --debug --console
)

...

REM start the launcher.jar app with assemble arguments
START java %vmOpts% -jar launcher.jar %extOpts%

С Eclipse у меня теперь есть 3 цели запуска.

Стандартный Запуск

стандартный запуск можно запустить, просто запустив

mvn package verify

в debug, теперь мне нужны две цели запуска

Запускаем Отладка

mvn package verify -Ddebug=--debug

это приведет к запуску приложения и зависанию, ожидая присоединения отладчика, с этого момента я могу запустить вторую цель из eclipse, которая просто настроена на

Запустить Debug Attach

эта цель запуска просто подключение к удаленному приложению, как описано в Eclipse документация.

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


после ответ, Я могу просто экспортировать три конфигурации запуска и зафиксировать их с помощью самой пусковой установки, позволяя новым пользователям репозитория просто импортировать цели и быть готовыми к работе за считанные секунды.