在单独执行maven war插件时过滤资源

时间:2017-03-10 09:49:17

标签: maven-war-plugin

是否可以过滤资源 - 每个资源都在单独的执行标记中? 我的目标是拥有2个war文件,每个文件都使用不同的过滤器文件过滤资源。 实际上这个解决方案不起作用 - 变量没有值,没有被触及 <jta-data-source>${ds-jta}</jta-data-source> - 我必须在maven-war-plugin - 评论部分之外添加过滤器和资源标签。 我认为可以在执行配置中指定这个“过滤” - 如片段所示。

<build>
<!-- I dont want to add this here - I want to have it in execution
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
    </resources>
    <filters>
        <filter>config/1.properties</filter>
    </filters> -->
<plugins>
   <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-war-plugin</artifactId>
      <version>3.0.0</version>
      <executions>
         <execution>
            <id>1</id>
            <phase>package</phase>
            <configuration>
               <filters>
                  <filter>config/1.properties</filter>
               </filters>
               <classifier>-1</classifier>
               <webappDirectory>${project.build.directory}/${project.build.finalName}-1</webappDirectory>
               <webResources>
                  <resource>
                     <directory>src/main/resources</directory>
                     <filtering>true</filtering>
                  </resource>
               </webResources>
            </configuration>
            <goals>
               <goal>war</goal>
            </goals>
         </execution>
         <execution>
            <id>2</id>
            <phase>package</phase>
            <configuration>
               <filters>
                  <filter>config/2.properties</filter>
               </filters>
               <classifier>-2</classifier>
               <webappDirectory>${project.build.directory}/${project.build.finalName}-2</webappDirectory>
               <webResources>
                  <resource>
                     <directory>src/main/resources</directory>
                     <filtering>true</filtering>
                  </resource>
               </webResources>
            </configuration>
            <goals>
               <goal>war</goal>
            </goals>
         </execution>
      </executions>
   </plugin>
</plugins>
</build>

有什么线索我错过了什么?

1 个答案:

答案 0 :(得分:0)

由maven-war-plugin创建的.war看起来像:

  ├── myapp.war
    │   ├── index.html    │   
    │   ├── myapp.properties
    │   ├── logback.xml
    │   ├── META-INF   
    │   │   ├── persistence.xml    
    │   │   
    │   └── WEB-INF          
    │       ├── classes   
    │       │   ├── myapp.properties
    │       │   ├── logback.xml
    │       │   ├── META-INF   
    │       │   │   ├── persistence.xml

我想过滤persistence.xml中定义的标记<jta-data-source>${ds-server-jta}</jta-data-source>中的'ds-server-jta'变量。 Maven-war-plugin仅过滤了位于META-INF中的persistence.xml。 关于maven-war-plugin用META-INF创建了这个.war并且只过滤了一个persistence.xml(WEB-INF / classes / META-INF / persistence.xml一个)我添加到插件配置如下:

 <webResources>
     <resource>
         <directory>src/main/resources</directory>
         <filtering>true</filtering>
         <targetPath>WEB-INF/classes</targetPath>
    </resource>
    <resource>
         <directory>src/main/resources</directory>
         <filtering>true</filtering>
    </resource>
 </webResources>

这会明确告诉插件要过滤哪些资源,现在两个文件都会根据需要进行更改。

然而,我的应用程序服务器(Glassfish)没有使用META-INF中的Persistence.xml,但是maven-war-plugin仍然会创建它。服务器使用的是WEB-INF / classes / META-INF / persistence.xml。 现在我尝试不在我的.war中创建第一个未使用的appserver META-INF目录,但它只是一个小细节。