IntelliJ& Eclipse:由Maven exec:exec

时间:2015-05-28 22:57:09

标签: java eclipse maven debugging intellij-idea

在我的项目中,我有一个配置,如

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <executions> 
        <execution>
            <id>default-cli</id>
            <goals>
                <goal>exec</goal>
            </goals>
            <configuration>
                <commandlineArgs>${additionalExecArgs} -jar ${project.build.directory}/someDir/some.jar</commandlineArgs>
                <executable>java</executable>
                <classpathScope>runtime</classpathScope>
            </configuration>
        </execution>
    </executions>
</plugin>

使用Maven exec:exec启动可执行JAR。 默认情况下,additionalExecArgs属性为空。

在NetBeans中,我可以通过在nbactions.xml文件中指定以下操作来运行此目标:

<action>
    <actionName>run</actionName>
    <goals>
        <goal>exec:exec</goal>   
    </goals>
</action>

要在NetBeans中调试此目标,我已将以下操作添加到nbactions.xml文件中:

<action>
    <actionName>debug</actionName>
    <goals>
        <goal>exec:exec</goal>   
    </goals>
    <properties>
        <jpda.listen>true</jpda.listen>
    </properties>
    <activatedProfiles>
        <activatedProfile>debug</activatedProfile>
    </activatedProfiles>
</action>

因此,除了运行exec:exec之外,它还将NetBeans(?)属性jpda.listen设置为true并激活Maven配置文件debug

我还将以下Maven个人资料添加到我的POM中:

<profile>
    <id>debug</id>
    <properties>
        <additionalExecArgs>-Xdebug -Xrunjdwp:transport=dt_socket,server=n,address=${jpda.address}</additionalExecArgs>
    </properties>
</profile>

使用此配置,我只需从项目上下文菜单/工具栏中运行调试操作。

但请注意jpda.address Maven属性。这个属性似乎以某种方式被NetBeans填充。

如果我尝试使用IntelliJ或Eclipse中的调试配置文件运行exec:exec我收到错误,可能是因为jpda.address Maven属性没有设置。

E.g。我在IntelliJ中收到以下错误:

/usr/lib/jvm/java-8-oracle/bin/java -agentlib:jdwp=transport=dt_socket,address=127.0.0.1:42300,suspend=y,server=n -Dmaven.home=/usr/share/maven -Dclassworlds.conf=/usr/share/maven/bin/m2.conf -Dfile.encoding=UTF-8 -classpath /usr/share/maven/boot/plexus-classworlds-2.x.jar:/opt/idea-IC-141.1010.3/lib/idea_rt.jar org.codehaus.classworlds.Launcher -Didea.version=14.1.3 -Dmaven.repo.local=/home/someUser/.m2/repository exec:exec -P debug
Connected to the target VM, address: '127.0.0.1:42300', transport: 'socket'
[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building test-application 0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- exec-maven-plugin:1.4.0:exec (default-cli) @ test-application ---
ERROR: transport error 202: connect failed: Verbindungsaufbau abgelehnt
ERROR: JDWP Transport dt_socket failed to initialize, TRANSPORT_INIT(510)
JDWP exit error AGENT_ERROR_TRANSPORT_INIT(197): No transports initialized [debugInit.c:750]
FATAL ERROR in native method: JDWP No transports initialized, jvmtiError=AGENT_ERROR_TRANSPORT_INIT(197)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------

每次通话都会改变端口。

我已尝试使用固定地址/端口(例如127.0.0.1:8000)替换jpda.address,但我收到了相同的错误,现在也在NetBeans中。

那么我如何在IntelliJ和Eclipse中获得与NetBeans类似的行为,并直接使用Maven运行配置调试exec:exec目标,而无需使用远程调试器配置等?

1 个答案:

答案 0 :(得分:0)

听起来您可以使用Remote debug Maven目标在intellij中设置Before launch配置。

按如下方式进行设置:

Run/Debug Configurations - &gt;添加Remote - &gt;添加Before Launch - &gt; Maven - &gt;指定正确的模块和目标。