与Maven远程资源共享/ src / test / resources下的资源

时间:2018-07-11 13:49:21

标签: java maven pom.xml parent-pom maven-remote-resources

我想与项目中的其他模块共享我的log4j属性文件。我发现maven-remote-resource插件是解决方案之一,但是在使用时遇到了一些问题。

log4j属性文件仅在测试中使用,因此所有模块上的测试将引用相同的log4j文件。

以下是我的项目和子模块的结构。


parent-module
 -module_A
    -src
      -test
        -properties
          -log4j.properties
  pom.xml
 -module_B
    -src
      -main
        -java
    -src
      -test
        -java

  pom.xml
 -module_C
    -src
      -main
        -java
    -src
      -test
        -java

  pom.xml
 -module_D
    -src
      -main
        -java
    -src
      -test
        -java
   pom.xml
pom.xml 

“ module_A”(共享资源,log4j.properties)上的pom如下:

<build>
    <resources>
        <resource>
            <directory>${basedir}/src/test/resources/</directory>
            <includes>
                <include>*.properties</include>
            </includes>
        </resource>
    </resources>
    <pluginManagement>
        <plugins>
            <plugin>
                <artifactId>maven-remote-resources-plugin</artifactId>
                <version>1.5</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>bundle</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <includes>
                        <include>**/*</include>
                    </includes>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

<build> <resources> <resource> <directory>${basedir}/src/test/resources/</directory> <includes> <include>*.properties</include> </includes> </resource> </resources> <pluginManagement> <plugins> <plugin> <artifactId>maven-remote-resources-plugin</artifactId> <version>1.5</version> <executions> <execution> <goals> <goal>bundle</goal> </goals> </execution> </executions> <configuration> <includes> <include>**/*</include> </includes> </configuration> </plugin> </plugins> </pluginManagement> </build> 然后在父模块的pom上,将module_a添加到依赖项列表中,并调用远程资源插件         

        <dependency>
            <groupId>com.myproject</groupId>
            <artifactId>module_A</artifactId>
            <version>${project.version}</version>
            <scope>provided</scope>
        </dependency>

当我尝试在整个项目上进行maven全新安装时,每个单独的模块都看不到log4j.properties。 但是,如果我将远程资源移动到每个单独的子模块pom,他们都可以看到该属性。

是否可以通过在父pom上声明一次来共享log4属性?

1 个答案:

答案 0 :(得分:1)

我建议将Module_A设置为默认的jar,其中包含src/main/resources中的资源...无需声明或配置。只需将属性放入src/main/resources目录中。所有内容都将打包到ja文件中。

<project>
  <parent>
   ...
  </parent>

  <artifactId>module_A</artifactId>

</project>

并将上述模块添加为测试依赖项,例如:

<dependency>
  <groupId>com.myproject</groupId>
  <artifactId>module_A</artifactId>
  <version>${project.version}</version>
  <scope>test</scope>
</dependency>
每个需要配置的模块中的

。比起测试类路径上的属性,它可以工作...