如何从maven中的不同父模块获取相同的属性?

时间:2016-11-29 13:24:32

标签: java maven

我有一个具有这种结构的maven项目。

enter image description here

我想在具有不同属性的不同EAR中使用相同的jar。 当我运行“mvn install”时,它会创建2个EAR但不能使用此配置进行过滤。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

使用Maven,您无法过滤属于已构建的JAR模块的文件 每个模块都是单独构建和打包的。所以,如果JAR需要有一个动态填充值的属性,我可能会建议你两个解决方案:

  • 在每个EAR和JAR端放置包含conf.path键值的属性文件,您可以使用辅助类在类路径中查找与{{1}关联的值键。
    您可以在需要值时执行此处理,或者在应用程序启动后立即执行此处理。

  • 创建两种属性不同的JAR。在这种情况下,财产信息不再存储在EAR中,而是直接存储在JAR中 Look at the classifier element

  

分类器允许区分构建的工件   相同的POM但内容不同。这是一些可选的   任意字符串 - 如果存在 - 附加到工件名称   就在版本号之后。作为这个元素的动力,   例如,考虑提供针对JRE的工件的项目   1.5但同时也是一个仍支持JRE 1.4的工件。第一个工件可以配备分类器jdk15和   第二个使用jdk14,客户可以选择使用哪个。

     

分类器的另一个常见用例是需要附加   二次工件到项目的主要工件。如果你浏览了   Maven中央存储库,你会注意到分类器的来源   和javadoc用于部署项目源代码和API文档   以及打包的类文件。

要生成多个jar,请以这种方式在构建中配置conf.path插件:

maven-jar-plugin

在你的WAR中引用了jarVersion神器,就像战争1:

   <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>3.0.2</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>jar</goal>
            </goals>
            <configuration>
              <classifier>jarVersion2</classifier>
              <includes>
                <include>**/jarVersion2.properties</include>
              </includes>
            </configuration>
          </execution>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>jar</goal>
            </goals>
            <configuration>
              <classifier>jarVersion1</classifier>
              <includes>
                <include>**/jarVersion1.properties</include>
              </includes>
            </configuration>
          </execution>
        </executions>
      </plugin>

就像战争2那样:

    <dependency>
        <groupId>groupIdOfTheJar</groupId>
        <artifactId>artifactIdOfTheJar</artifactId>
        <version>versionOfTheJar</version>
        <classifier>jarVersion1</classifier>
    </dependency>