Отладить сборку 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?

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

Ответ 1

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

Используя определения профиля из этого ответа, я могу использовать ${script.extension} для обмена между .sh и .bat

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

<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, которая просто настроена на

Запустить приложение отладки

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

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


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

Ответ 2

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

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

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

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

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


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

start /wait cmd.exe /c java %*


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

настройка внешних инструментов



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

введите описание изображения здесь

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


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

<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 в файле script, чтобы не оказаться в бесконечном цикле.

Ответ 3

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

В вашем проекте, параллельном pom.xml, добавьте файл build.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- > External Tools Configurations

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

В файле Buildfile выберите полный путь к вашему build.xml

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

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

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

Теперь нажмите "Выполнить". В случае успеха добавьте отладчик. Вы можете дополнительно автоматизировать его, настроив вкладку "Построение". Я бы на самом деле настроил вкладку "Сборка", чтобы запустить "mvn clean package". Но давай, у тебя теперь есть ant script. Делайте все, что хотите: -)