我正在创建一个自定义 Maven 插件。在其中一篇 Mojos 中,我正在读一本Xpp3Dom
使用以下代码段从 XML 文件中获取对象:
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
)存储在src/main/resources
Maven 插件本身。我的问题是,如何在不明确说明该文件的绝对路径的情况下指向该 XML 文件?
需要明确的是:我希望这个文件位于我的 Maven 插件的目录下。它不能位于 Maven 插件之外,因为它是 Maven 插件的必要部分,并且不应被使用此插件的其他 Maven 项目更改。
我在 Maven Mojo 中搜索了一个变量/方法,它可以为我提供 Maven 插件本身的绝对位置。如果我明白了,那么我可以将位置指定为value-of-that-variable/src/main/resources/plugins.xml
。但我无法找到这样的变量。我还尝试了一种将属性从 Maven 插件 POM 传递到其 Mojos 之一的方法,以便我可以传递project.build.directory
,但找不到方法。
需要明确的是:我想访问其 Mojos 之一中 Maven 插件目录下的文件。
任何建议都会有所帮助。
我认为读取一些自己的插件资源文件的最简单的形式是通过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 it:
src\
main\
resources\
foo\
bar\
MyMojo.java
plugins.xml
...在这种情况下,您必须通读它getClass().getResourceAsInputStream()
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)