問題タブ [ecj]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Maven ビルドでの Eclipse Java コンパイラ (ecj) の使用
Eclipse は独自のコンパイラ (ECJ) を使用して Java コードをコンパイルします。Eclipse でコンパイルされたプログラムのデバッグは、単純なコード変更が (ホット コード置換によって) 即座に適用できるため、より簡単です。
一方、Maven は (デフォルトで) oracle JDK を使用します。これは、Eclipse デバッグ セッションでのホット コード置換を防止するさまざまなバイト コードを生成します。
したがって、プログラムをデバッグする予定がある場合は、maven ビルドで Eclipse ECJ コンパイラを使用したいと考えています。私にとって便利な方法は、「ecj」プロファイルです。
コンパイルリリース
/li>ホットコード置換を有効にしてスナップショットをコンパイルする
/li>
また、プロファイルのアクティブ化は、settings.xml
Eclipse プロジェクトのプロパティで指定することもできます。
私の質問は次のとおりです。
- これは正しい方法ですか?
- これはどのように構成できますか?
- これにMavenツールチェーンを使用できますか?
java - 依存関係が無効なため、クラス org.eclipse.jdt.core.JDTCompilerAdapter をロードできませんでした
一部のクラスに対してバイトコードの変更を行うために使用されるJavaエージェントを作成していますorg.eclipse.jdt.core.JDTCompilerAdapter
が、その1つです。javassit を使用して のexecute()
メソッドをいくつか変更していorg.eclipse.jdt.core.JDTCompilerAdapter
ます。だから私はエージェントプロジェクトのようにecjを含めました(gradleを使用)
ecj のいくつかのクラスを使用する必要があるためです。
エージェントの目的は、execute メソッドの呼び出しをインターセプトし、execute メソッドを変更して、いくつかの処理をトリガーする目的で、いくつかのクラスにいくつかの呼び出しを追加することです。
2 つのクラスを持つ単純な Java プロジェクトに対してエージェントをテストしています。プロジェクトは ant でビルドJDTCompilerAdapter
され、コンパイラとして使用されます。
ここにbuild.xmlファイルがあります
エージェントは、プロジェクトのビルド時に使用されます。したがって、エージェントをテストするには、次のコマンドを使用します。
build_wrapper.sh にはこれが含まれています( ecj 依存関係を追加したので、 bulid.xml にあるようにプロジェクトをコンパイルできJDTCompilerAdapter
ました <property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>
:
アイデアは、エージェントラッパーが引数を解析することです (outdir はいくつかのものを生成するために使用され、exec は私のテストプロジェクトのビルドを起動するために使用されるスクリプトです) から実行されるコマンドを取得しますbuild_wrapper.sh
(この場合は ../ant/bin/ant -lib ../eclipse/plugins/ecj-4.3.1.jar build-e
) と追加コマンドに対する Java エージェントとして機能します。
この問題は、エージェントの実行中に発生します。出力は次のとおりです。
エージェント プロジェクト内で ecj-4.3.1.jar を使用しない場合、ビルドは正常に実行されますexecute()
。メソッドの呼び出しをインターセプトしますが、ecj jar の他のクラスを使用できません。
java - Mockito:型互換の引数を持つオーバーロードされたメソッドの検証
次のメソッド シグネチャを含むインターフェイスをモックしたいとします。Mockito
(他のメソッドではなく) 正確に 1 回呼び出されたことを確認する必要があります。doThis(Object o)
最初に、次の行でうまくいくと思いました。
ただし、これは Windows では機能するようですが、Linux では機能しません。この環境では、他のdoThis
メソッドの呼び出しが想定されているためです。
これは、anyObject()
引数が両方のメソッド シグネチャに一致するように見え、一方が多かれ少なかれ予測できない方法で選択されるために発生します。
Mockito が常に検証を選択doThis(Object o)
するように強制するにはどうすればよいですか?
eclipse - Eclipse Compiler for Java バッチ パッケージ 4.5.2+ の入手方法
バージョン4.5.1
は中央から入手できる最後のバージョンです - http://mvnrepository.com/artifact/org.eclipse.jdt.core.compiler/ecj/4.5.1
残念ながら、厄介なバグがあり、これは でのみ修正されました4.5.2
。
バイナリパッケージがどこにも見つからないようです。ソースからビルドしようとしましたが失敗しました (詳細は後述)。4.5.2 バイナリを取得するための推奨される方法は何ですか?
https://github.com/eclipse/eclipse.jdt.coreを試しましたが、関連するタグがありません。
https://git.eclipse.org/c/jdt/eclipse.jdt.core.git/tag/?h=R4_5_2R4_5_2
からタグを作成してみました
驚くべきことに、まだスナップショット バージョンがあり、同じバージョンの親が必要です。親プロジェクトのビルドを試すことはできますが、既にいくつかのリポジトリなどで利用可能になっていると思います。続行する前に、少なくともこのパスがどこにでもつながるかどうかを知りたいと思います。4.5.2-SNAPSHOT
最後にProject Tychoに出会いましたが、これは新しいプラグインを作成する場合にのみ関連すると思います。