过滤后如何预编译文件?

时间:2014-08-18 10:11:32

标签: maven

我正在构建一个包含.jsp文件的.war文件。在.jsp中,有一些maven属性变量,因此我需要使用maven war插件来过滤它。 除此之外,我想使用mojo jspc插件对其进行预编译,并将.class文件打包到war文件中。

但是,未编译过滤的文件。结果war文件包含已过滤的.jsp文件和未过滤的.class文件。

我应该如何配置pom.xml以编译过滤后的.jsp?

我的pom文件如下所示:

  <build>
<finalName>${Component}</finalName>
<resources>
    <resource>
        <directory>src/main/resources</directory>
    </resource>
</resources>
<plugins> 
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <configuration>
      <archiveClasses>true</archiveClasses>  
      <attachClasses>true</attachClasses> 
      <packagingExcludes>**/*.vpp,WEB-INF/web.xml,**/eclipselink.jar,**/coherence.jar,**  /toplink-grid.jar</packagingExcludes>
      <outputFileNameMapping>@{artifactId}@.@{extension}@</outputFileNameMapping> 
      <webResources>
        <resource>
          <directory>src/main/webapp/verification</directory>
          <targetPath>verification</targetPath> 
          <filtering>true</filtering> 
        </resource>
      </webResources>  
      <executions>
          <execution>
              <phase>process-resources</phase> 
          </execution>
      </executions>         
    </configuration>
  </plugin>



  <!-- start jspc -->

  <plugin>
     <groupId>org.codehaus.mojo</groupId>
     <artifactId>jspc-maven-plugin</artifactId>
     <executions>
         <execution>
             <id>jspc</id>           
             <goals>        
                 <goal>compile</goal>
             </goals>             
              <phase>compile</phase> 
         </execution>
     </executions>
 </plugin>
  <!-- end jspc -->

</plugins>
</build>

JSP文件存储在src / main / webapp / verification

1 个答案:

答案 0 :(得分:0)

插件很可能以错误的顺序执行。大多数插件允许通过添加例如它们来改变它们所结合的相位。 <phase>generate-resources</phase>。您需要以这种方式将插件显式绑定到阶段,以便首先执行过滤。阶段记录here。选择要绑定的适当的。 顺便说一句,直接过滤JSP是一个非常糟糕的做法。相反,生成.properties文件(过滤它,或动态生成)并将其加载到Servlet上下文,因此它可供所有JSP使用。如果你使用Spring,这是一件轻而易举的事。下面的示例(runtime.properties是过滤/生成的文件):

<bean class="org.springframework.web.context.support.ServletContextAttributeExporter">
        <property name="attributes">
            <map>
                <entry key="config">
                    <util:properties location="classpath:runtime.properties"/>
                </entry>
            </map>
        </property>
    </bean>

然后在JSP中以config['someKey']的形式访问它。这也消除了担心阶段JSP被过滤的需要。