You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ra...@apache.org on 2020/10/14 15:23:49 UTC

[sling-jspc-maven-plugin] branch issue/SLING-9816 created (now 96ee57f)

This is an automated email from the ASF dual-hosted git repository.

radu pushed a change to branch issue/SLING-9816
in repository https://gitbox.apache.org/repos/asf/sling-jspc-maven-plugin.git.


      at 96ee57f  SLING-9816 - Lookup jsp includes from the class path if not found locally

This branch includes the following new commits:

     new 96ee57f  SLING-9816 - Lookup jsp includes from the class path if not found locally

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[sling-jspc-maven-plugin] 01/01: SLING-9816 - Lookup jsp includes from the class path if not found locally

Posted by ra...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

radu pushed a commit to branch issue/SLING-9816
in repository https://gitbox.apache.org/repos/asf/sling-jspc-maven-plugin.git

commit 96ee57fdc3686673b24ed35c92a2390a4e6df744
Author: Radu Cotescu <ra...@apache.org>
AuthorDate: Wed Oct 14 17:23:08 2020 +0200

    SLING-9816 - Lookup jsp includes from the class path if not found locally
    
    * added support for scanning the project's dependencies when looking
    for JSPs required by the project's source files
---
 pom.xml                                            |  82 ++++++++++++++++-
 .../apache/sling/maven/jspc/JspCIOProvider.java    |  22 ++++-
 .../java/org/apache/sling/maven/jspc/JspcMojo.java |   3 +-
 .../org/apache/sling/maven/jspc/JspcMojoTest.java  |  97 +++++++++++++++++++++
 .../jspc-maven-plugin-it-includes/pom.xml          |  60 +++++++++++++
 .../jspc-maven-plugin-it-includes-deps-0.0.1.jar   | Bin 0 -> 4477 bytes
 .../jspc-maven-plugin-it-includes-deps-0.0.1.pom   |  27 ++++++
 .../maven-metadata-local.xml                       |  30 +++++++
 .../src/main/scripts/included-fs.jsp               |  19 ++++
 .../src/main/scripts/main.jsp                      |  21 +++++
 10 files changed, 354 insertions(+), 7 deletions(-)

diff --git a/pom.xml b/pom.xml
index 2c1b925..47cd42e 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
     <parent>
         <groupId>org.apache.sling</groupId>
         <artifactId>sling</artifactId>
-        <version>38</version>
+        <version>40</version>
         <relativePath />
     </parent>
 
@@ -40,13 +40,18 @@
         <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/sling-jspc-maven-plugin.git</developerConnection>
         <url>https://gitbox.apache.org/repos/asf?p=sling-jspc-maven-plugin.git</url>
       <tag>HEAD</tag>
-  </scm>
+    </scm>
 
     <properties>
         <maven.site.path>${project.artifactId}-archives/${project.artifactId}-LATEST</maven.site.path>
         <site.jira.version.id>12313225,12313347,12319479,12319561,12325751,12347153,12348438,12348556</site.jira.version.id>
+        <maven.version>3.5.0</maven.version>
     </properties>
 
+    <prerequisites>
+        <maven>${maven.version}</maven>
+    </prerequisites>
+
     <build>
         <plugins>
             <plugin>
@@ -71,6 +76,7 @@
                 <configuration>
                     <excludes>
                         <exclude>src/site/markdown/**</exclude>
+                        <exclude>src/test/resources/jspc-maven-plugin-it-includes/target/**</exclude>
                     </excludes>
                 </configuration>
             </plugin>
@@ -114,6 +120,38 @@
         </plugins>
     </reporting>
 
+    <!-- force maven-plugin-testing-harness to use newer plexus container (https://issues.apache.org/jira/browse/MPLUGINTESTING-53) -->
+    <dependencyManagement>
+        <dependencies>
+            <!-- maven -->
+            <dependency>
+                <groupId>org.apache.maven</groupId>
+                <artifactId>maven-core</artifactId>
+                <version>${maven.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.maven</groupId>
+                <artifactId>maven-compat</artifactId>
+                <version>${maven.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.maven</groupId>
+                <artifactId>maven-model</artifactId>
+                <version>${maven.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.maven</groupId>
+                <artifactId>maven-plugin-api</artifactId>
+                <version>${maven.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.maven</groupId>
+                <artifactId>maven-aether-provider</artifactId>
+                <version>${maven.version}</version>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
     <dependencies>
 
         <dependency>
@@ -163,7 +201,14 @@
         <dependency>
             <groupId>org.apache.maven</groupId>
             <artifactId>maven-plugin-api</artifactId>
-            <version>3.5.0</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven</groupId>
+            <artifactId>maven-model</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven</groupId>
+            <artifactId>maven-core</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.maven</groupId>
@@ -188,5 +233,36 @@
             <version>3.5</version>
             <scope>provided</scope>
         </dependency>
+
+        <!-- Testing Dependencies -->
+        <dependency>
+            <groupId>org.codehaus.plexus</groupId>
+            <artifactId>plexus-container-default</artifactId>
+            <version>1.6</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>junit</groupId>
+            <artifactId>junit</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.mockito</groupId>
+            <artifactId>mockito-core</artifactId>
+            <version>3.5.11</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven.plugin-testing</groupId>
+            <artifactId>maven-plugin-testing-harness</artifactId>
+            <version>3.3.0</version>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.maven</groupId>
+            <artifactId>maven-compat</artifactId>
+            <scope>test</scope>
+            <version>${maven.version}</version>
+        </dependency>
     </dependencies>
 </project>
diff --git a/src/main/java/org/apache/sling/maven/jspc/JspCIOProvider.java b/src/main/java/org/apache/sling/maven/jspc/JspCIOProvider.java
index 748d25c..b5b1768 100644
--- a/src/main/java/org/apache/sling/maven/jspc/JspCIOProvider.java
+++ b/src/main/java/org/apache/sling/maven/jspc/JspCIOProvider.java
@@ -21,6 +21,7 @@ import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.net.URL;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.sling.commons.classloader.ClassLoaderWriter;
@@ -55,8 +56,23 @@ public class JspCIOProvider implements IOProvider {
     }
 
     @Override
-    public InputStream getInputStream(String fileName) throws FileNotFoundException, IOException {
-        return FileUtils.openInputStream(getFile(fileName));
+    public InputStream getInputStream(String fileName) throws IOException {
+        File file = getFile(fileName);
+        if (file.exists()) {
+            return FileUtils.openInputStream(getFile(fileName));
+        }
+        // coming from a jar; remove the leading slash
+        String jarEntryPath;
+        if (fileName.startsWith("/")) {
+            jarEntryPath = fileName.substring(1);
+        } else {
+            jarEntryPath = fileName;
+        }
+        URL url = loader.getResource(jarEntryPath);
+        if (url != null) {
+            return url.openStream();
+        }
+        throw new FileNotFoundException("Cannot find file " + fileName + ".");
     }
 
     @Override
@@ -93,4 +109,4 @@ public class JspCIOProvider implements IOProvider {
     public ClassLoaderWriter getClassLoaderWriter() {
         return writer;
     }
-}
\ No newline at end of file
+}
diff --git a/src/main/java/org/apache/sling/maven/jspc/JspcMojo.java b/src/main/java/org/apache/sling/maven/jspc/JspcMojo.java
index 3624f21..a045a03 100644
--- a/src/main/java/org/apache/sling/maven/jspc/JspcMojo.java
+++ b/src/main/java/org/apache/sling/maven/jspc/JspcMojo.java
@@ -34,6 +34,7 @@ import org.apache.commons.logging.impl.LogFactoryImpl;
 import org.apache.commons.logging.impl.SimpleLog;
 import org.apache.maven.artifact.Artifact;
 import org.apache.maven.artifact.DependencyResolutionRequiredException;
+import org.apache.maven.model.Repository;
 import org.apache.maven.plugin.AbstractMojo;
 import org.apache.maven.plugin.MojoExecutionException;
 import org.apache.maven.plugins.annotations.LifecyclePhase;
@@ -405,7 +406,7 @@ public class JspcMojo extends AbstractMojo implements Options {
         classPath.add(new File(targetDirectory).toURI().toURL());
 
         // add artifacts from project
-        Set<Artifact> artifacts = project.getDependencyArtifacts();
+        Set<Artifact> artifacts = project.getArtifacts();
         jspcCompileArtifacts = new ArrayList<Artifact>(artifacts.size());
         for (Artifact a: artifacts) {
             final String scope = a.getScope();
diff --git a/src/test/java/org/apache/sling/maven/jspc/JspcMojoTest.java b/src/test/java/org/apache/sling/maven/jspc/JspcMojoTest.java
new file mode 100644
index 0000000..f7b9d39
--- /dev/null
+++ b/src/test/java/org/apache/sling/maven/jspc/JspcMojoTest.java
@@ -0,0 +1,97 @@
+/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ ~ Licensed to the Apache Software Foundation (ASF) under one
+ ~ or more contributor license agreements.  See the NOTICE file
+ ~ distributed with this work for additional information
+ ~ regarding copyright ownership.  The ASF licenses this file
+ ~ to you under the Apache License, Version 2.0 (the
+ ~ "License"); you may not use this file except in compliance
+ ~ with the License.  You may obtain a copy of the License at
+ ~
+ ~   http://www.apache.org/licenses/LICENSE-2.0
+ ~
+ ~ Unless required by applicable law or agreed to in writing,
+ ~ software distributed under the License is distributed on an
+ ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ ~ KIND, either express or implied.  See the License for the
+ ~ specific language governing permissions and limitations
+ ~ under the License.
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+package org.apache.sling.maven.jspc;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.commons.io.FileUtils;
+import org.apache.maven.artifact.repository.DefaultArtifactRepository;
+import org.apache.maven.artifact.repository.layout.DefaultRepositoryLayout;
+import org.apache.maven.execution.DefaultMavenExecutionRequest;
+import org.apache.maven.execution.MavenExecutionRequest;
+import org.apache.maven.execution.MavenSession;
+import org.apache.maven.plugin.MojoExecution;
+import org.apache.maven.plugin.testing.MojoRule;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.ProjectBuilder;
+import org.apache.maven.project.ProjectBuildingRequest;
+import org.junit.After;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+import static org.junit.Assert.assertTrue;
+
+
+public class JspcMojoTest {
+
+    private static final String INCLUDES_PROJECT = "src/test/resources/jspc-maven-plugin-it-includes";
+    private static final String REPOSITORY = "src/test/resources/jspc-maven-plugin-it-includes/repo";
+
+    @Rule
+    public MojoRule mojoRule = new MojoRule();
+
+    private MavenProject mavenProject;
+    private JspcMojo jspcMojo;
+    private File baseDir;
+
+    @Before
+    public void before() throws Exception {
+        baseDir = new File(INCLUDES_PROJECT);
+        MavenExecutionRequest request = new DefaultMavenExecutionRequest();
+        request.setBaseDirectory(baseDir);
+        ProjectBuildingRequest configuration = request.getProjectBuildingRequest();
+        configuration.setResolveDependencies(true);
+        configuration.setLocalRepository(new DefaultArtifactRepository("project", "file://" + new File(REPOSITORY).getAbsolutePath(),
+                new DefaultRepositoryLayout()));
+        mavenProject = mojoRule.lookup(ProjectBuilder.class).build(new File(baseDir, "pom.xml"), configuration).getProject();
+        Assert.assertNotNull(mavenProject);
+        MavenSession session = mojoRule.newMavenSession(mavenProject);
+        MojoExecution execution = mojoRule.newMojoExecution("jspc");
+        jspcMojo = (JspcMojo) mojoRule.lookupConfiguredMojo(session, execution);
+    }
+
+    @After
+    public void after() {
+        FileUtils.deleteQuietly(new File(baseDir, "target"));
+    }
+
+    @Test
+    public void testIncludesFromClassPath() throws Exception {
+        jspcMojo.execute();
+        File generatedMain = new File(mavenProject.getBuild().getOutputDirectory() + File.separator + "main__002e__jsp.java");
+        assertTrue("Expected to find a generated main__002e__jsp.java file.", generatedMain.exists());
+        FileReader fileReader = new FileReader(generatedMain);
+        BufferedReader bufferedReader = new BufferedReader(fileReader);
+        Set<String> expectedContent = new HashSet<>(Arrays.asList("included-fs.jsp", "included-cp.jsp", "/libs/l1/l2/included-cp.jsp"));
+        String line = bufferedReader.readLine();
+        while (line != null) {
+            expectedContent.removeIf(line::contains);
+            line = bufferedReader.readLine();
+        }
+        assertTrue("Some files were not correctly included: " + expectedContent.toString(), expectedContent.isEmpty());
+    }
+
+}
diff --git a/src/test/resources/jspc-maven-plugin-it-includes/pom.xml b/src/test/resources/jspc-maven-plugin-it-includes/pom.xml
new file mode 100644
index 0000000..80831c4
--- /dev/null
+++ b/src/test/resources/jspc-maven-plugin-it-includes/pom.xml
@@ -0,0 +1,60 @@
+<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <groupId>org.apache.sling</groupId>
+    <artifactId>jspc-maven-plugin-it-includes</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <packaging>jar</packaging>
+
+    <name>HTL Maven Plugin IT - Generate Java Classes</name>
+
+    <repositories>
+        <repository>
+            <id>project</id>
+            <url>file://${project.basedir}/repo</url>
+        </repository>
+    </repositories>
+
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.sling</groupId>
+                <artifactId>jspc-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>jspc</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.apache.sling</groupId>
+            <artifactId>jspc-maven-plugin-it-includes-deps</artifactId>
+            <version>0.0.1</version>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/src/test/resources/jspc-maven-plugin-it-includes/repo/org/apache/sling/jspc-maven-plugin-it-includes-deps/0.0.1/jspc-maven-plugin-it-includes-deps-0.0.1.jar b/src/test/resources/jspc-maven-plugin-it-includes/repo/org/apache/sling/jspc-maven-plugin-it-includes-deps/0.0.1/jspc-maven-plugin-it-includes-deps-0.0.1.jar
new file mode 100644
index 0000000..d2d0907
Binary files /dev/null and b/src/test/resources/jspc-maven-plugin-it-includes/repo/org/apache/sling/jspc-maven-plugin-it-includes-deps/0.0.1/jspc-maven-plugin-it-includes-deps-0.0.1.jar differ
diff --git a/src/test/resources/jspc-maven-plugin-it-includes/repo/org/apache/sling/jspc-maven-plugin-it-includes-deps/0.0.1/jspc-maven-plugin-it-includes-deps-0.0.1.pom b/src/test/resources/jspc-maven-plugin-it-includes/repo/org/apache/sling/jspc-maven-plugin-it-includes-deps/0.0.1/jspc-maven-plugin-it-includes-deps-0.0.1.pom
new file mode 100644
index 0000000..306213a
--- /dev/null
+++ b/src/test/resources/jspc-maven-plugin-it-includes/repo/org/apache/sling/jspc-maven-plugin-it-includes-deps/0.0.1/jspc-maven-plugin-it-includes-deps-0.0.1.pom
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+  <modelVersion>4.0.0</modelVersion>
+  <groupId>org.apache.sling</groupId>
+  <artifactId>jspc-maven-plugin-it-includes-deps</artifactId>
+  <version>0.0.1</version>
+  <description>POM was created from install:install-file</description>
+</project>
diff --git a/src/test/resources/jspc-maven-plugin-it-includes/repo/org/apache/sling/jspc-maven-plugin-it-includes-deps/maven-metadata-local.xml b/src/test/resources/jspc-maven-plugin-it-includes/repo/org/apache/sling/jspc-maven-plugin-it-includes-deps/maven-metadata-local.xml
new file mode 100644
index 0000000..f55fdd5
--- /dev/null
+++ b/src/test/resources/jspc-maven-plugin-it-includes/repo/org/apache/sling/jspc-maven-plugin-it-includes-deps/maven-metadata-local.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~-->
+<metadata>
+  <groupId>org.apache.sling</groupId>
+  <artifactId>jspc-maven-plugin-it-includes-deps</artifactId>
+  <versioning>
+    <release>0.0.1</release>
+    <versions>
+      <version>0.0.1</version>
+    </versions>
+    <lastUpdated>20201014094724</lastUpdated>
+  </versioning>
+</metadata>
diff --git a/src/test/resources/jspc-maven-plugin-it-includes/src/main/scripts/included-fs.jsp b/src/test/resources/jspc-maven-plugin-it-includes/src/main/scripts/included-fs.jsp
new file mode 100644
index 0000000..07514cf
--- /dev/null
+++ b/src/test/resources/jspc-maven-plugin-it-includes/src/main/scripts/included-fs.jsp
@@ -0,0 +1,19 @@
+<%--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~--%>
+included-fs.jsp
diff --git a/src/test/resources/jspc-maven-plugin-it-includes/src/main/scripts/main.jsp b/src/test/resources/jspc-maven-plugin-it-includes/src/main/scripts/main.jsp
new file mode 100644
index 0000000..3761afb
--- /dev/null
+++ b/src/test/resources/jspc-maven-plugin-it-includes/src/main/scripts/main.jsp
@@ -0,0 +1,21 @@
+<%--~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~--%>
+<%@include file="included-fs.jsp"%>
+<%@include file="included-cp.jsp"%>
+<%@include file="/libs/l1/l2/included-cp.jsp"%>