我们正在使用Maven 3,我正面临一个拥有JSP文件的项目,并且还使用存储在不同项目中的“全局”JSP文件。使用maven-war-plugin和webResources
时,这很有效。所有JSP文件都可以进入WAR文件。
新想法是预编译所有JSP。显而易见的选择是使用jspc-maven-plugin。但是,在编译项目本地JSP时,它不包括外部JSP。
以下是pom.xml
:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jspc-maven-plugin</artifactId>
<executions>
<execution>
<id>jspc</id>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1</version>
<configuration>
<warName>${pom.groupId}.${pom.artifactId}-0.0.1-SNAPSHOT</warName>
<webXml>${basedir}/target/jspweb.xml</webXml>
<webResources>
<resource>
<directory>../name.of.external.project/src/global/webapp</directory>
</resource>
</webResources>
</configuration>
</plugin>
错误是
[ERROR] Failed to execute goal org.codehaus.mojo:jspc-maven-plugin:1.4.6:compile (jspc) on project internal.project: JSPC Error: file:C:/workspace/name.of.internal.project/src/main/webapp/WEB-INF/views/show.jsp(2,0) File "/WEB-INF/views/../jspGlobal/jsp-declaration.jspf" not found -> [Help 1]
jspGlobal
- 目录将被上面的<directory>../name.of.external.project/src/global/webapp</directory>
- 行复制。
在JspC中包含外部JSP有什么缺失?
编辑:感谢prunge's和Raghuram's input我深入了解了源代码和JavaDocs。我注意到提到的sources
需要FileSet
,它不允许列出目录。由于sources
也不是列表,我认为我不可能指定多个JSP源目录。我甚至试图复制<plugin>
- 元素,但这没有帮助。我目前的情况是:
<plugin>
<groupId>org.codehaus.mojo.jspc</groupId>
<artifactId>jspc-maven-plugin</artifactId>
<version>2.0-alpha-3</version>
<executions>
<execution>
<id>jspc</id>
<goals>
<goal>compile</goal>
</goals>
</execution>
</executions>
<configuration>
<sources>
<directory>${basedir}/../name.of.external.project/src/global/webapp</directory>
</sources>
<!-- the later mentioned <sources> gets picked
<sources>
<directory>${basedir}/src/main/webapp</directory>
</sources>
-->
<!-- 1.6 doesn't work!? Something lower than 1.5 seems to be the default -->
<source>1.5</source>
<target>1.5</target>
</configuration>
<dependencies>
<dependency>
<groupId>org.codehaus.mojo.jspc</groupId>
<artifactId>jspc-compiler-tomcat6</artifactId>
<version>2.0-alpha-3</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.1</version>
<configuration>
<warName>${pom.groupId}.${pom.artifactId}-0.0.1-SNAPSHOT</warName>
<webXml>${basedir}/target/jspweb.xml</webXml>
<webResources>
<resource>
<directory>../name.of.external.project/src/global/webapp</directory>
</resource>
</webResources>
</configuration>
</plugin>
现在外部JSP被编译到当前项目的目标路径中。现在我需要一种方法来编译当前项目的JSP。我该怎么做?
顺便说一句,如果我将<sources>
切换到当前项目的行,我会得到与前面提到的相同的错误。
答案 0 :(得分:1)
也许您可以尝试使用最新版本的jspc-maven-plugin,即2.0-alpha-3。请注意usage与早期版本略有不同。
答案 1 :(得分:1)
查看source code的CompilationMojoSupport,我看到类型为sources
的{{1}}属性。您可以在插件的配置中配置它以添加其他源目录。默认情况下,无论WAR插件的配置如何,它都使用FileSet
。