2017-02-22 98 views
10

У меня есть проект в Eclipse, который после сборки имеет пакет структуру следующейотлаживать Maven сборки изнутри Затмения

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, у меня нет возможности установить плагин с помощью этого метода.

+0

Вы ищете что-то подобное (или точно) как удаленное отладочное приложение? http://javarevisited.blogspot.ca/2011/02/how-to-setup-remote-debugging-in.html – ochi

+0

Удаленная отладка - это то, как я это делаю сейчас. Я хотел бы просто нажать кнопку запуска из eclipse, а не внешние команды, а затем удаленную отладку. –

+0

Итак, действительно ли статья в ссылке? – ochi

ответ

0

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

Используя profile definitions from this answer, я могу использовать ${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 цели запуска.

Стандартный Launch

Стандартный запуск может быть запущен только работает

mvn package verify 

Для отладки я сейчас требуют два запуска цели

Запуск Debug

mvn package verify -Ddebug=--debug 

Это заставит приложение для запуска, и повесить, ожидая отладчик для присоединения, с этого момента, я могу запустить вторую мишень из затмения, которое просто сконфигурированный для

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

Эта цель запуска проста connects to a remote application, как описано в документации Eclipse.

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


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

2

Следующее - это один из способов сделать то, что вы хотите, с примерами для Windows. Часть идеи от here.

Я считаю, что есть два способа выполнения внешних команд с помощью кнопки в 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 %* 


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

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

+0

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

1

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

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

<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-> Внешний Tools-> Внешние конфигурации Инструменты

Создать новую конфигурацию под "Ant" Строить

под Buildfile выберите гр omplete path of your build.xml

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

На вкладке JRE передать ваши аргументы VM

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

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

+0

Если аргументы JVM не передаются в вашу банку, это может быть связано с этим «fork = true» в скрипте ant. В этом случае я бы добавил следующее до: htulsiani