2017-02-22 5 views
10

の中からMavenのアセンブリ私は、組立後maven-assembly-pluginを使用して達成され、次のデバッグEclipseの

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

のパッケージ構造を持っている、Eclipseでプロジェクトを持っています。

アプリケーションが正しく起動するためには、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を使用して

、私は私が最終的にカスタムのターゲットになりますverifyターゲットを、使用して実行することができ、次のプラグイン定義を持つ

.batファイル .SHの間で交換すること${script.extension}を使用することができます完全に。上記のプラグイン定義に

<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フラグを扱うことができ、必要に応じて、起動コマンドを変更用意して。 Eclipseによるから

... 

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% 

、私は今3つの打ち上げ目標を持っています。

標準の起動標準の打ち上げだけでデバッグする

mvn package verify 

を実行することによって実行することができます

、私は2回の打ち上げが

起動デバッグを対象に、今必要

mvn package verify -Ddebug=--debug 

これは、アプリケーションが起動し、ハングアップ、デバッガがアタッチするのを待つ、この時点から、私は日食から2番目のターゲットを実行することができ、単に

起動デバッグするように構成されていることになりますアタッチ

この起動対象は、Eclipseのマニュアルに記載されているように、単にconnects to a remote applicationです。

このターゲットを実行すると、実行中のjvmに接続され、ユーザスペースコードが再開され、コンパイルされたdistディレクトリからアプリケーションが実行されている間にデバッグできます。 this answer


、私は単純に3つの起動設定のエクスポート、およびランチャー自体でそれらをコミットし、リポジトリの新規ユーザーは、単に目標をインポートして、数秒で移動する準備できるようにすることができます。

2

以下は、Windowsの例を使って、おそらくあなたが望むことを行うための方法の1つです。アイディアの一部はhereです。

私は、eclipseのボタンで外部コマンドを実行する2つの方法があると思います。 1つはカスタムの外部ツール構成で、もう1つはeclipseでmaven用の実行構成で実現できます。

プロジェクトディレクトリのルートにバッチファイルを作成し、それをeclipseから実行するには、新しい外部ツールプログラム設定を作成します。したがって、たとえば、あなたは次のスクリプトを使用してプロジェクトディレクトリにlauncher.batいる

:cjava.batでは、次のスクリプトを作成する必要があり、別のバッチファイルがある

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


私はあなたがHIGする必要はありませんので、あなたではなく、明示的に作業ディレクトリを設定します確信しているが、

start /wait cmd.exe /c java %* 


次に、あなたの外部プログラム起動の設定は、このようになります。実行をクリックすると、プロジェクトが軽く表示されます。あなたが

enter image description here

を選ぶに共通タブで起動パラメータを設定し

external tools config



その簡単にアクセスする(外部ツールボタンがあるべきように、あなたのお気に入りにこの外部設定を追加します。すでにタスクバーに表示されています)。


代わりに実行コマンドを使用してこれを実行できるようにするには、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スクリプト)を追加します。

今、Eclipseで

ランに行く

<project> 
<target name="mytarget" description="runs my class" > 
<java jar="target/launcher/launcher.jar" 
     fork="true" 
     failonerror="true" 
     maxmemory="128m" 
     > 
</java> 
</target> 
</project> 
>外部ツール - >外部ツールの構成

Cを選択するビルドファイルの下で、「Antビルド」

の下に新しい構成を作成します。あなたのbuild.xmlの完全なパス

ターゲットの下でターゲット "mytarget"が自動的に選択されているはずです。それがチェックされていることを確認してください。 JREタブで

は、今すぐあなたのVM引数

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

を渡すファイル名を指定して実行]をクリックします。成功した場合は、デバッガを接続します。 [ビルド]タブを設定することで、さらに自動化することができます。私は実際にビルドタブを設定して "mvn clean package"を実行します。しかし、今あなたの蟻のスクリプトがあります。

+0

JVMの引数がjarに渡されず、antスクリプトの "fork = true"のbacuseである可能性がある場合。その場合は、の前に次のように追加します。 htulsiani

関連する問題