如何过滤Maven中依赖项提供的资源?

时间:2015-03-31 04:56:41

标签: java maven

假设我有一个名为com.example的Java项目:awesome-project,它有一个名为com.external的依赖项:awesome-library。

如果这个awesome-library有像configuration.xml这样的资源,我如何过滤这个资源,以便在我在项目代码中使用它之前正确替换Maven属性占位符?

例如,<tag name="${groupId}:${artifact}">之类的内容需要更改为<tag name="com.example:awesome-project">

假设:

  • awesome-library是这个项目的外部,并不是由它构建的 我
  • 我不知道中使用的变量占位符 .xml文件。我所知道的是,它们是由Maven以某种方式定义的。 我们以项目元数据为例,例如$ {artifact},作为一个例子。

2 个答案:

答案 0 :(得分:2)

使用dependency:unpack,它会提取资源,默认情况下为${project.build.directory}/dependency(如果需要,可以更改)。

然后,要么使用:

  • resources:copy-resource并在该插件的执行中定义您的过滤,并将其resources配置配置为指向${project.build.directory}/dependency
  • 在POM的resources部分中添加build元素并通过适当的过滤将其指向${project.build.directory}/dependency可能更为简单。虽然如果你想要标准src/main/resources,你也需要把它放在那里。

答案 1 :(得分:0)

您可以使用此解决方案:

  1. 创建父(构建器)项目,并在其中放置常量,将在资源文件中替换:

     <properties>
         <some.constant>123</some.constant>
     </properties>
    
  2. 将两个项目定义为父项目中的模块:

     <modules>
       <module>../awesome-project</module>
       <module>../awesome-library</module>
     </modules>
    
  3. 在my-configuration.xml中将常量引用作为

    ${some.constant}
    
  4. 在awesome-library.pom配置过滤器处理器中(例如,假设my-configuration.xml放在src / main / resources / META-INF中:

     <build>
        <resources>
            <resource>
                <directory>src/main/resources/META-INF</directory>
                <targetPath>META-INF</targetPath>
                <filtering>true</filtering>
                <includes>
                    <include>**/my-configuration.xml</include>
                </includes>
            </resource>
    

  5. 在父项目中运行maven clean install