当前位置: 首页 > 知识库问答 >
问题:

在自己的Mojo中获取maven插件的目录路径

王涵育
2023-03-14

我正在创建一个自定义maven插件。在其中一个mojo中,我使用以下代码段从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中搜索了一个变量/方法,它可以为我提供Maven插件本身的绝对位置。如果我得到了这个值,那么我可以把位置作为变量/src/main/resources/plugins.xml的值。但我找不到这样的变量。我还尝试了一种方法,将属性从Maven插件POM传递到它的一个mojo,这样我就可以传递project.build。目录,但找不到方法。

需要明确的是:我想访问maven插件目录下的文件,在其Mojos之一中。

任何建议都会有所帮助。


共有1个答案

郑安晏
2023-03-14
匿名用户

我认为读取自己插件的一些资源文件的最简单形式是通过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就有可能包含插件。xml文件。为了避免(或至少减少)这种风险,您应该将其打包:

src\
    main\
        resources\
            foo\
                bar\
                    MyMojo.java
                    plugins.xml

…在这种情况下,您必须通过getClass()读取它。getResourceAsInputStream()。

 类似资料:
  • 我的问题是:根据这些参数,我可以在哪里归档标准maven插件的API fefinition?

  • 问题内容: 我目前正在对Jenkins Pipeline插件(以前称为Workflow插件)进行一些评估。阅读文档后,我发现当前无法使用以下方法检索工作空间路径 : 以下变量当前在工作流脚本中不可用: NODE_LABELS 工作空间 特定于SCM的变量,例如SVN_REVISION 还有其他方法如何获取当前工作空间的绝对路径吗?我需要运行一些测试,该测试又得到一些参数(某些可执行文件的绝对路径)

  • 我想从maven资源目录(src/main/resources)中读取我的属性文件。属性文件的路径称为: 该文件名为test。财产。我使用了JSF2.2、Eclipse和Java Web项目,webapp在Tomcat7上运行 我在mavenpom.xml文件中写道: 并在我的java文件中写入:Properties prop=new Properties(); 但是它没有找到属性文件。我可以读出

  • 问题内容: 我正在开发一个Maven插件。我似乎很难弄清楚,从执行MOJO的项目中获取POM信息的好方法是什么? 例如,如果我在另一个Maven项目中执行我的mojo,我想获取项目名称或其他一些参数。 还有一件事,在AbstractMojo.java类中有一个上下文MAP,有私有Map pluginContext,如果我错了,有人可以纠正我,但这应该用于在mojos之间传递信息吗? 问题答案: 您

  • 我有一个带有两个maven插件模块的mutli项目:base和child()。孩子依赖基础。 带POM: 基本编译正确,子级通过编译但失败: 未能在项目plugin-child上执行goal org.apache.maven.plugins:maven-plugin-plugin:3.4:descriptor(default-descriptor):mojo扫描器的API与此插件版本不兼容。请检查

  • 有没有办法使用来获取JAR目录中的“子资源”列表? 但我却找不到办法获得“孩子”资源。