在自己的Mojo中获取maven插件的目录路径
Get directory path of maven plugin in its own Mojo
我正在创建自定义 Maven 插件。在其中一个 Mojos 中,我正在使用以下代码片段从 XML 文件中读取一个 Xpp3Dom
对象:
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 中搜索了一个 variable/method,它将给我 maven 插件本身的绝对位置。如果我明白了,那么我可以将位置指定为 value-of-that-variable/src/main/resources/plugins.xml
。但我找不到这样的变量。我也尝试过一种方法将属性从 Maven 插件 POM 传递到它的一个 Mojos,这样我就可以传递 project.build.directory
,但找不到方法。
明确一点:我想访问 maven 插件目录下的一个文件,在它的一个 Mojos 中。
任何建议都会有所帮助。
我认为最简单的读取一些插件资源文件的方式是通过getResourceAsStream()
API,因为迟早你的插件会以JAR的形式交付,然后src
目录将消失,只剩下 类路径资源:
try (InputStream input=getClass().getClassLoader().getResourceAsStream("plugins.xml")){
try(Reader reader=new InputStreamReader(input));
{
Xpp3Dom Xpp3DomObject = Xpp3DomBuilder.build(input);
} catch (Exception e) {
...
}
}
无论如何,这种方式存在这样的风险,类路径的其他一些 JAR 应该偶然包含一个 plugins.xml
文件。为了避免(或至少降低)这种风险,您应该 package 它:
src\
main\
resources\
foo\
bar\
MyMojo.java
plugins.xml
...在这种情况下,您必须通读getClass().getResourceAsInputStream()
。
我正在创建自定义 Maven 插件。在其中一个 Mojos 中,我正在使用以下代码片段从 XML 文件中读取一个 Xpp3Dom
对象:
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 中搜索了一个 variable/method,它将给我 maven 插件本身的绝对位置。如果我明白了,那么我可以将位置指定为 value-of-that-variable/src/main/resources/plugins.xml
。但我找不到这样的变量。我也尝试过一种方法将属性从 Maven 插件 POM 传递到它的一个 Mojos,这样我就可以传递 project.build.directory
,但找不到方法。
明确一点:我想访问 maven 插件目录下的一个文件,在它的一个 Mojos 中。
任何建议都会有所帮助。
我认为最简单的读取一些插件资源文件的方式是通过getResourceAsStream()
API,因为迟早你的插件会以JAR的形式交付,然后src
目录将消失,只剩下 类路径资源:
try (InputStream input=getClass().getClassLoader().getResourceAsStream("plugins.xml")){
try(Reader reader=new InputStreamReader(input));
{
Xpp3Dom Xpp3DomObject = Xpp3DomBuilder.build(input);
} catch (Exception e) {
...
}
}
无论如何,这种方式存在这样的风险,类路径的其他一些 JAR 应该偶然包含一个 plugins.xml
文件。为了避免(或至少降低)这种风险,您应该 package 它:
src\
main\
resources\
foo\
bar\
MyMojo.java
plugins.xml
...在这种情况下,您必须通读getClass().getResourceAsInputStream()
。