Mat*_*ark 10 java eclipse debugging maven maven-assembly-plugin
我在Eclipse中有一个项目,在组装之后具有以下的包结构
launcher.tar.gz
|-- launcher.jar
|-- lib/
|-- resources/
|-- plugins/
Run Code Online (Sandbox Code Playgroud)
这是使用的maven-assembly-plugin.
为了使应用程序正常启动,有些resources是必需的,但在最终装配之外不可用,另外,我希望能够像我目前那样安装插件.
我目前的工作流程是
$ mvn [clean] package
$ cd target/launcher/
$ java -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -jar launcher.jar
Run Code Online (Sandbox Code Playgroud)
一旦应用程序以挂起状态启动,我可以附加调试器并恢复我的正常工作流程.
如何从Eclipse简化此过程?
我可以从我的Launcher.java类启动它,但是在Eclipse中调试时,我无法通过此方法安装插件.
按照Braheem的建议,我能够使用该exec-maven-plugin插件来完成此任务,但是我进行了一些更改以使其更加独立于平台。
使用此答案中的配置文件定义,我可以在.sh和.bat${script.extension}之间进行交换
我有以下插件定义,可以使用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>
Run Code Online (Sandbox Code Playgroud)
通过上面的插件定义,我可以使用
# Launch
mvn package verify
# Calls [ launcher.bat ]
# Launch with debug flag
mvn package verify -Dflags=--debug
# Calls [ launcher.bat --debug ]
Run Code Online (Sandbox Code Playgroud)
然后,我可以从我的脚本中处理该--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%
Run Code Online (Sandbox Code Playgroud)
从 Eclipse 开始,我现在有 3 个启动目标。
标准启动
只需运行即可运行标准启动
mvn package verify
Run Code Online (Sandbox Code Playgroud)
为了调试,我现在需要两个启动目标
启动调试
mvn package verify -Ddebug=--debug
Run Code Online (Sandbox Code Playgroud)
这将导致应用程序启动并挂起,等待调试器附加,从此时起,我可以从 eclipse 运行第二个目标,它只需配置为
启动调试附加
此启动目标只是连接到远程应用程序,如 Eclipse 文档中所述。
运行此目标会连接到正在运行的 jvm,并且用户空间代码将恢复,允许我正常调试 - 当应用程序在编译后的 dist 目录中运行时。
按照这个答案,我可以简单地导出三个启动配置,并使用启动器本身提交它们,从而允许存储库的新用户简单地导入目标并在几秒钟内准备好。