我正在使用基于配置文件的jsps资源过滤。我也在使用mvn jetty:run
进行本地开发,但过滤阶段不会运行。
如何使用jetty插件执行过滤?
配置代码段:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<webResources>
<resource>
<directory>src/main/webapp</directory>
<includes>
<include>error.jsp</include>
</includes>
<filtering>true</filtering>
<targetPath>/</targetPath>
</resource>
</webResources>
</configuration>
</plugin>
<profile>
<id>jci</id>
<activation>
<activeByDefault>true</activeByDefault>
<property>
<name>jci</name>
</property>
</activation>
<properties>
<error.title>Some value here</error.title>
</properties>
</profile>
答案 0 :(得分:6)
你可能想要使用jetty:run-explosion目标而不是jetty:run。来自the documentation:
此目标首先将您的webapp组装成爆炸的war文件,然后将其部署到Jetty。
这可以确保在服务器启动之前执行适当的war生命周期阶段。
您还确定jci配置文件正在激活吗?如果为构建指定了另一个配置文件,则&lt; activeByDefault&gt;属性不会启用配置文件,有关详细信息,请参阅this bug。
来自John Casey的回应:
以上示例按设计工作。 &lt; activeByDefault /&gt; element表示如果构建中没有其他配置文件处于活动状态,则指定将激活此配置文件。因此,任何配置文件的特定激活将导致该配置文件被停用。
答案 1 :(得分:1)
过滤后的文件通常最终出现在build target-directory中。如果你运行'mvn jetty:run'它默认使用你未经过滤的src / main / webapp目录。您所要做的就是将build-target添加为附加资源目录。完成后,jetty将创建一个叠加层,并且还将使用过滤后的文件。
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.26</version>
<configuration>
<webAppConfig>
<contextPath>/${project.build.finalName}</contextPath>
<baseResource implementation="org.mortbay.resource.ResourceCollection">
<resourcesAsCSV>src/main/webapp,${project.build.directory}/${project.build.finalName}</resourcesAsCSV>
</baseResource>
</webAppConfig>
<scanIntervalSeconds>2</scanIntervalSeconds>
</configuration>
</plugin>
答案 2 :(得分:0)
感谢@Randy我也成功了。下面是一个最新的示例,显示使用org.eclipse.jetty而不是旧的mortbay的资源过滤和jetty rebasing baseResource。 这里我们过滤两个jsp页面login.jsp和index.jsp并设置变量&#34; $ {login.resources}&#34;在jsp to&#34; login.res.jsp&#34;根据下面的属性部分。 请注意我们过滤并将这些内容写入&#34; jetty.docroot&#34;,然后我们将jetty.docroot覆盖在src / main / webapps上,以便我们过滤的jsps被jetty使用。叠加层从@Randy更新为使用更新的&#34; org.eclipse.jetty.util.resource.ResourceCollection&#34;实施
<profiles>
<profile>
<id>jetty</id>
<properties>
<jetty.docroot>${project.build.directory}/jetty</jetty.docroot>
<login.resources>login.res.jsp</login.resources>
</properties>
<build>
<plugins>
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
<executions>
<execution>
<id>jetty-docroot</id>
<!-- test-compile precedes jetty:run -->
<phase>test-compile</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>${jetty.docroot}</outputDirectory>
<resources>
<resource>
<directory>${basedir}/src/main/webapp</directory>
<filtering>true</filtering>
<includes>
<include>**/login.jsp</include>
<include>**/index.jsp</include>
</includes>
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.4.0.v20161208</version>
<configuration>
<scanIntervalSeconds>2</scanIntervalSeconds>
<webApp>
<contextPath>/intamerge</contextPath>
<baseResource implementation="org.eclipse.jetty.util.resource.ResourceCollection">
<resourcesAsCSV>${jetty.docroot},${basedir}/src/main/webapp</resourcesAsCSV>
</baseResource>
<baseAppFirst>false</baseAppFirst>
</webApp>
</configuration>
</plugin>
</plugins>
</build>
</profile>