2016-10-12 11 views
1

私はJavaアプリケーションを書くためにEclipseを使用しています。JavaプログラムでEclipse /デバッガを検出

コードがEclipseのデバッグ環境(F11)から実行されるか、コードが "java -jar"を使用してEclipseなしで実行されるかをプログラムで検出することは可能ですか?

Visual StudioでVisual Studioが実行されているかどうかを検出できますが、.NETアプリケーションはここでは作成していませんが、EclipseではJavaを検出できます。

+3

何を達成しようとしていますか? –

+1

多分これは助けになるでしょう:http://stackoverflow.com/questions/3776204/how-to-find-out-if-debug-mode-is-enabled –

+0

1つのオプションは、単にJavaプロパティ、または単に環境変数を使用することですそれをEclipseの実行時に設定するだけです。とにかく特定の開発環境を検出しようとするよりはるかに良い選択肢であり、コードを変更せずにEclipseでも正常にアプリケーションを実行できるようになります。 – hyde

答えて

2

これまでは、私のソフトウェアがEclipseで動作しているかどうかを確認するために、私は.projectファイルを見つけることができるかどうかをチェックしました。

public static boolean isRunningInEclipse(int folderDepth) { 
    File projectRoot = new File(Boot.class.getProtectionDomain().getCodeSource().getLocation().getFile());  
    for (int i = 0; i < folderDepth; i++) { 
     projectRoot = projectRoot.getParentFile(); 
     if (projectRoot == null || !projectRoot.isDirectory()) { 
      return false; 
     } 
    } 
    return new File(projectRoot, ".project").isFile(); 
} 

あなたのメインクラスはtarget/classes/に位置している場合は、特にたい場合は= 2

folderDepthでそれを呼び出し、folderDepth = 1でメソッドを呼び出すbinフォルダにある中、あなたのメインクラスの場合デバッガで実行されているかどうかを確認することをお勧めします。this answer

+0

ニースハック。クラスファイルが 'bin'対' target/classes'対 'WEB-INF/classes'をカバーするためにいくつかチェックする必要があるかもしれませんが、アイデアは同じです。 – AngerClown

+0

@AngerClown Thxの賛辞!つまり、私のコード例では、クラスがターゲット/クラス/フォルダにあると想定しています。私はこれを私の答えに加えます。 – THelper

+1

'false =='は '!'でなければなりません。しかし、 'exists'テストは時代遅れです。最後の' isFile'テストは、その親が存在することを意味します。さらに、 '.toString()'は時代遅れです。したがって、テスト全体を 'return oFile!= null && new File(oFile、" .project ")。isFile();' – Holger

関連する問題