Java 从Maven中的插件访问项目资源

Java 从Maven中的插件访问项目资源,java,maven,maven-3,Java,Maven,Maven 3,我已经写了一个Maven插件,当独立运行时,它可以正常工作。我在插件源代码中有一些自定义XML资源文件,这些文件在测试时对插件可见并可访问(下面是插件POM)。所以我安装了插件,一切都很好 现在,我创建了一个新项目,该项目引用了新安装的插件(下面的项目POM)。我有一些自定义XML资源文件,类似于插件项目中嵌入的文件 该项目的结构如下: tester | pom.xml | +---src | +---main | | +---java | | | \---[BLAH

我已经写了一个Maven插件,当独立运行时,它可以正常工作。我在插件源代码中有一些自定义XML资源文件,这些文件在测试时对插件可见并可访问(下面是插件POM)。所以我安装了插件,一切都很好

现在,我创建了一个新项目,该项目引用了新安装的插件(下面的项目POM)。我有一些自定义XML资源文件,类似于插件项目中嵌入的文件

该项目的结构如下:

tester
|   pom.xml
|
+---src
|   +---main
|   |   +---java
|   |   |   \---[BLAH}
|   |   |
|   |   \---resources
|   |           tester-catalog-env.xml
|   |
|   \---test
|       \---java
|           \---[BLAH]
在插件中,我有以下方法:

    public TesterProcessCatalog getTesterProcessCatalog(Properties properties) throws TesterDataSourceException {
        try {
            InputStream in = getClass().getClass().getResourceAsStream("tester-catalog-env.xml");
            Reader reader = ReaderFactory.newXmlReader(in);
            return readCatalog(reader);

        } catch (IOException e) {
            throw new TesterDataSourceException("Error reading catalog", e);
        }
    }
该行:

InputStream in = getClass().getClass().getResourceAsStream("tester-catalog-env.xml");
当使用
mvn tester:test
(在插件mojo中定义)从项目运行时返回null,即使我可以看到资源在类路径上。我试过以下方法

InputStream in = getClass().getClass().getResourceAsStream("/tester-catalog-env.xml");
这也会返回
null

如果我将资源文件复制到插件资源目录并运行,它就可以正常工作

最终,我试图实现的是在projects resources目录(即tester-catalog-xxx.xml-其中xxx可以是用户创建的新文件)中有多个配置文件,当运行类似于
mvn tester:test-DprocessCatalog=env2
的命令时,将加载名为tester-catalog-env2.xml的文件

你知道我做错了什么吗

Maven信息

ApacheMaven 3.0.4(r1232337;2012-01-17 10:44:56+0200)
Maven主页:C:\Apps\apache-Maven-3.0.4
Java版本:1.6.0_35,供应商:Sun Microsystems Inc.
Java主页:C:\Java\jdk1.6.0\u 35\jre
默认区域设置:en_GB,平台编码:Cp1252
操作系统名称:“windows xp”,版本:“5.1”,拱门:“x86”,系列:“windows”

插件POM

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.testing.tester.maven</groupId>
    <artifactId>tester</artifactId>
    <packaging>maven-plugin</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>tester Maven Mojo</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-plugin-api</artifactId>
            <version>2.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.2-beta-5</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.plexus</groupId>
            <artifactId>plexus-component-annotations</artifactId>
            <version>1.5.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.1</version>
        </dependency>
        <dependency>
            <groupId>com.sun</groupId>
            <artifactId>tools</artifactId>
            <version>1.6</version>
            <scope>system</scope>
            <systemPath>C:\java\jdk1.6.0_35\lib\tools.jar</systemPath>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>commons-cli</groupId>
            <artifactId>commons-cli</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>com.brsanthu</groupId>
            <artifactId>data-exporter</artifactId>
            <version>1.0.0</version>
            <!-- http://code.google.com/p/data-exporter/wiki/UserGuide -->
            <!-- mvn install:install-file -DgroupId=com.brsanthu -DartifactId=data-exporter -Dversion=1.0.0 -Dpackaging=jar -Dfile=http://data-exporter.googlecode.com/files/data-exporter-1.0.0.jar-->
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.plexus</groupId>
                <artifactId>plexus-component-metadata</artifactId>
                <version>1.5.5</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>generate-metadata</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.testing.tester</groupId>
  <artifactId>tester</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>tester</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
      <dependency>
          <groupId>com.testing.tester.maven</groupId>
          <artifactId>tester</artifactId>
          <version>1.0-SNAPSHOT</version>
      </dependency>
  </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>com.testing.tester.maven</groupId>
                <artifactId>tester</artifactId>
                <version>1.0-SNAPSHOT</version>
            </plugin>
        </plugins>
    </build>
</project>

4.0.0
com.testing.tester.maven
测试员
maven插件
1.0-快照
测试仪Maven Mojo
http://maven.apache.org
org.apache.maven
maven插件api
2
朱尼特
朱尼特
3.8.1
测试
org.apache.maven.plugins
maven汇编插件
2.2-β-5
org.codehaus.plexus
神经丛成分注释
1.5.5
org.apache.commons
commons-lang3
3.1
com.sun
工具
1.6
系统
C:\java\jdk1.6.0\u 35\lib\tools.jar
真的
commons cli
commons cli
1.2
com.brsanthu
数据导出器
1.0.0
org.codehaus.plexus
丛组件元数据
1.5.5
生成元数据
org.apache.maven.plugins
maven源插件
附加来源
罐子
项目POM

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.testing.tester.maven</groupId>
    <artifactId>tester</artifactId>
    <packaging>maven-plugin</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>tester Maven Mojo</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>org.apache.maven</groupId>
            <artifactId>maven-plugin-api</artifactId>
            <version>2.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <version>2.2-beta-5</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.plexus</groupId>
            <artifactId>plexus-component-annotations</artifactId>
            <version>1.5.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.1</version>
        </dependency>
        <dependency>
            <groupId>com.sun</groupId>
            <artifactId>tools</artifactId>
            <version>1.6</version>
            <scope>system</scope>
            <systemPath>C:\java\jdk1.6.0_35\lib\tools.jar</systemPath>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>commons-cli</groupId>
            <artifactId>commons-cli</artifactId>
            <version>1.2</version>
        </dependency>
        <dependency>
            <groupId>com.brsanthu</groupId>
            <artifactId>data-exporter</artifactId>
            <version>1.0.0</version>
            <!-- http://code.google.com/p/data-exporter/wiki/UserGuide -->
            <!-- mvn install:install-file -DgroupId=com.brsanthu -DartifactId=data-exporter -Dversion=1.0.0 -Dpackaging=jar -Dfile=http://data-exporter.googlecode.com/files/data-exporter-1.0.0.jar-->
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.plexus</groupId>
                <artifactId>plexus-component-metadata</artifactId>
                <version>1.5.5</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>generate-metadata</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.testing.tester</groupId>
  <artifactId>tester</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>jar</packaging>

  <name>tester</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
      <dependency>
          <groupId>com.testing.tester.maven</groupId>
          <artifactId>tester</artifactId>
          <version>1.0-SNAPSHOT</version>
      </dependency>
  </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>com.testing.tester.maven</groupId>
                <artifactId>tester</artifactId>
                <version>1.0-SNAPSHOT</version>
            </plugin>
        </plugins>
    </build>
</project>

4.0.0
com.testing.tester
测试员
1.0-快照
罐子
测试员
http://maven.apache.org
UTF-8
朱尼特
朱尼特
3.8.1
测试
com.testing.tester.maven
测试员
1.0-快照
com.testing.tester.maven
测试员
1.0-快照

我认为您需要将testerProcessCatalog文件指定为Maven插件属性:

/**
 * @parameter expression="${tester.testerProcessCatalog}"
 * default-value="${basedir}/src/main/resources/tester-catalog-env.xml"
 */
private File testerProcessCatalog; 

注意:我在某个地方读到,现在可以使用Java注释代替Javadoc注释,但我还没有尝试过。

我找到了一个有效的解决方案。这详细说明了所需的步骤

基本上,我在插件中添加了以下类(我已经删除了原始帖子中对LOGGER的引用)

我的魔咒宣言,它的工作