我正在构建一个包含.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
中答案 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被过滤的需要。