mojo-executorを使用して別のMojoを実行するmaven Mojoを作成しました。これが実行されると、そのMojo実行の出力はデフォルト出力になります。だから、それを実行し得るとき、それは次のように出力されますmavenプラグインビルドログをインターセプトする方法
[INFO] Compiling 1 source file to /Users/sergio/hello-world/target/classes
[INFO]
[INFO] --- utqg-maven-plugin:1.1.0-SNAPSHOT:errorprone (default) @ my-app ---
/Users/sergio/hello-world/src/test/java/com/mycompany/App2Test.java:30: warning: [UTQG:HelperMethodCannotBePublic] Helper Methods of test classes cannot be public.
public String getName() {
^
(see https://www.mycompany.com/utqg/HelperMethodCannotBePublic)
/Users/sergio/hello-world/src/test/java/com/mycompany/service/MyServiceTest.java:14: warning: [UTQG:HelperMethodCannotBePublic] Helper Methods of test classes cannot be public.
public void myHelperMethod(){
^
(see https://www.mycompany.com/utqg/HelperMethodCannotBePublic)
/Users/sergio/hello-world/src/test/java/com/mycompany/service/MyServiceTest.java:170: warning: [UTQG:E:UseDeprecatedStatementsNotAllowed] Usage of Deprecated Classes, Methods or Variables Not Allowed
final URL url = new File(".").toURL();
^
(see https://www.mycompany.com/utqg/HelperMethodCannotBePublic)
Note: /Users/sergio/hello-world/src/test/java/com/mycompany/service/MyServiceTest.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
3 warnings
私はErrorproneといくつかのbugcheckersを作成しましたので[OK]を、すべてのそれらの警告が期待されています。しかし、問題は、この出力を標準出力から削除してファイルに入れる必要があることです。しかし、その部分だけ。私がこれまで試したどのような
は、それが実行され得るとき、ファイルへの私の出力をリダイレクトすることでした:
PrintStream originalStream = System.out;
try {
PrintStream ps = new PrintStream(new FileOutputStream(ERRORPRONE_FILE, false));
System.setOut(ps);
} catch (FileNotFoundException e){
LOGGER.error("ErrorProneRunMojo", e);
throw new MojoExecutionException(e.getMessage());
}
// do my logic of calling the plugin here
System.out.flush();
System.setOut(originalStream);
前提: - 彼らは、標準出力からすべてを削除したので、私はmvn --logFile
または-l
を使用することはできませんし、それをファイルの中に置きます。また、ユーザが--logFileなどを置くことで解決する必要はありません。
私は、システムの標準出力とエラーストリームの設定が唯一の方法だと思います。これで何か問題はありましたか? – Tunaki
はい、正しい文字列がまだ得られていません。それは実行後にすべての文字列を取得していた。しかし、私はコードをチェックし、それは大丈夫だった。 –
MavenProjectには、ロガーの別のインスタンスを参照するか、他のmojoを呼び出す方法に応じて独自のロガーインスタンスを設定する必要があるロガーが含まれていますか?しかし、具体的なコードがなければ、助けが難しいです...さらに、ロガーを使用してあなたのmojoで出力を作成しないようですね? – khmarbaise