私はカスタムMavenプラグインを作成しています。そのMojosのいずれかで、私は、次のコード片を使用して、XMLファイルからXpp3Dom
オブジェクトを読んでいます:独自のMojoでmavenプラグインのディレクトリパスを取得します
File pluginsFile = new File(
"absolute-path-to-file/plugins.xml");
Xpp3Dom Xpp3DomObject = new Xpp3Dom("plugins");
try {
FileReader reader = new FileReader(pluginsFile);
Xpp3DomObject = Xpp3DomBuilder.build(reader);
reader.close();
} catch (Exception e) {
// TODO throw exception
}
私が読んでいたからXMLファイルを(plugins.xml
)自体のプラグインのMavenのsrc/main/resources
に格納されています。 私の質問はです。明示的にそのファイルへの絶対パスを明示せずにXMLファイルをどのように指していますか?
明確にする:このファイルを私のMavenプラグインのディレクトリの下に置いて欲しい。これは、Mavenプラグインの必要な部分であり、このプラグインを使用する他のMavenプロジェクトによって変更されるべきではないので、Mavenプラグインの外にあることはできません。
私は、Maven Mojoの変数/メソッドを検索しました。この変数は、Mavenプラグイン自体の絶対的な場所を指定します。私がそれを得たら、ちょうどvalue-of-that-variable/src/main/resources/plugins.xml
と位置を与えることができます。しかし、私はそのような変数を見つけることができません。私はまた、Maven PluginのプロパティをMojosの1つに渡して、project.build.directory
を渡すことができますが、方法を見つけることはできません。
明確にする:mavenプラグインディレクトリの下にあるファイル(Mojos)にアクセスします。
提案があれば助かります。
それがうまくいった!私は 'getClassLoader()。getResource(" fileName ")'を試して、そのリソースファイルを 'Xpp3DomBuilder.build()'で直接入力として使用しました。しかし、 'absolute-path-to-plugin-jar/jarName!/ fileName'が存在しないというエラーが出ました。しかし、 'getResourceAsStream'を使用し、それを' OutputStream'を使って一時ファイルに保存し、そのファイルを使用しました。なぜそれを直接使用していないのですか? –
他の人のために明確にするために、 'Xpp3DomBuilder.build(input)'は動作しません。入力はファイルでなければなりません。 –
なぜそれが直接動作しませんでしたか?私はあなたが 'getResource'によって返されたURLを使って' File'を作成しようとしていたと思います。これらは互換性のない型です。だから、 'InputStream'を返す' getResourceAsStream'を使うことを勧めました。そのため、 'File' APIの使用を避けることができます。 –