Maven:JspC应该使用外部JSP文件

时间:2011-08-23 06:13:51

标签: maven pom.xml

我们正在使用Maven 3,我正面临一个拥有JSP文件的项目,并且还使用存储在不同项目中的“全局”JSP文件。使用maven-war-pluginwebResources时,这很有效。所有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'sRaghuram'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>切换到当前项目的行,我会得到与前面提到的相同的错误。

2 个答案:

答案 0 :(得分:1)

也许您可以尝试使用最新版本的jspc-maven-plugin,即2.0-alpha-3。请注意usage与早期版本略有不同。

答案 1 :(得分:1)

查看source codeCompilationMojoSupport,我看到类型为sources的{​​{1}}属性。您可以在插件的配置中配置它以添加其他源目录。默认情况下,无论WAR插件的配置如何,它都使用FileSet