2

我正在尝试按照示例使用 maven-remote-resources-plugin 在多个 maven 模块之间选择性地共享公共资源,并且我在选择性导入资源时遇到了很多困难。

我正在尝试使用<includes><excludes>元素,如下所示。我没有在任何地方看到 doco 中提到的插件,但是 eclipse 在命令完成中将它们作为有效选项提供,并且在运行 pom.xml 时我没有收到任何错误。到目前为止,我还无法获得<includes><excludes>对导入的资源产生任何影响

我的pom的相关部分是;

共享资源

<build>
  <plugins>
    <plugin>
       <artifactId>maven-remote-resources-plugin</artifactId>
       <executions>
         <execution>
           <goals>
             <goal>bundle</goal>
           </goals>
         </execution>
       </executions>
       <configuration>
         <includes>
           <include>**/*</include>
         </includes>
       </configuration>
     </plugin>
  </plugins>
</build>

<dependencies>
  <dependency>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-remote-resources-plugin</artifactId>
    <version>1.3</version>
  </dependency>
</dependencies>

资源消费者

<build>
 ...
  <plugins>
    <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-remote-resources-plugin</artifactId>
       <version>1.3</version>
       <configuration>
         <resourceBunldes>
           <resourceBundle>myApp:myApp_sharedresources:${project.version}</resourceBundle>
         </resourceBundles>
         <outputDirectory>${project.build.outputDirectory}</outputDirectory>
         <includes>
           <include>theOnlyResourceIWant.properties</include>
         </includes>
       </configuration>
       <executions>
         <execution>
           <goals>
             <goal>process</goal>
           </goals>
           <phase>generate-resources</phase>
         </execution>
       </executions>
     </plugin>
  </plugins>
</build>

<dependencies>
  <dependency>
    <groupId>myApp</groupId>
    <artifactId>myApp_sharedresources</artifactId>
    <version>1.0</version>
  </dependency>
</dependencies>

我已经尝试了很多组合,<includes><excludes>到目前为止都没有任何影响。

那么,是

<includes></includes>

<excludes></excludes>

maven-remote-resources-plugin 配置的有效元素,以及如何使用它们?我可以合理地将资源分离到单独的 maven 模块中,但这可能会创建大量的单文件 maven 模块并添加大量额外的 xml,所以如果可能的话我想避免它。

我真的不想开始浏览插件源代码,但这是下一步。

4

2 回答 2

3

我为要导入的共享资源使用临时目录并对其进行过滤。

远程资源插件配置如下。这会将所有共享资源复制到项目中的临时目录中。设置attached为 false 意味着它们不包含在您的最终项目工件中,这使您有机会使用 Maven 的正常资源处理来选择要包含的那些。

<plugin>
<artifactId>maven-remote-resources-plugin</artifactId>
<configuration>
  <resourceBundles>
    <resourceBundle>myApp:myApp_sharedresources:${project.version}</resourceBundle>
  </resourceBundles>
  <attached>false</attached>
  <outputDirectory>${project.build.directory}/shared-resources</outputDirectory>
</configuration>
<executions>
   <execution>
     <goals>
       <goal>process</goal>
     </goals>
     <phase>generate-resources</phase>
   </execution>
 </executions>
</plugin>

资源定义。当maven-resource-plugin运行时(它默认绑定到 jars/wars/ears 的生命周期),它将使用共享资源目录以及普通src/main/resources目录。您需要同时定义两者。(如果需要,您也可以启用资源过滤。)

<resources>
  <resource>
     <directory>${project.build.directory}/shared-resources</directory>
     <includes>
       <include>theOnlyResourceIWant.properties</include>
     </includes>
  </resource>
  <resource>
     <directory>${basedir}/src/main/resources</directory>
  </resource>
</resources>

我建议将共享目录设为 的子目录${project.build.directory},因此clean生命周期无需更改即可工作。

于 2012-09-28T13:40:48.000 回答
0

要启用格式“#{expr}”(Ruby 风格)的过滤分隔符,请将以下内容添加到您的插件配置中:

<plugin>
    <artifactId>maven-remote-resources-plugin</artifactId>
    <version>1.3</version>
    <executions>
      <execution>
        <id>process-remote-resources</id>
        <goals>
          <goal>process</goal>
        </goals>
        <configuration>
          <filterDelimiters>
            <filterDelimiter>#{*}</filterDelimiter>
          </filterDelimiters>
          [...]
        </configuration>
      </execution>
    </executions>
  </plugin>

检查此链接以供参考

于 2012-09-28T07:57:27.510 回答