使用 jetty:run 时运行资源过滤器
Posted
技术标签:
【中文标题】使用 jetty:run 时运行资源过滤器【英文标题】:Running resource filters when using jetty:run 【发布时间】:2010-11-14 04:49:07 【问题描述】:我在 jsps 上使用基于配置文件的资源过滤。我也在使用mvn jetty:run
进行本地开发,但是过滤阶段没有运行。
如何使用 jetty 插件进行过滤?
配置sn-ps:
<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>
【问题讨论】:
@Robert:你有没有找到解决这个问题的办法?当我遇到你的问题时,我倾向于发布类似的问题...... Runningjetty:deploy-war
让我更进一步,但仍然没有真正可行的解决方案。有人对这个问题有真正的答案吗?
【参考方案1】:
您可能想要使用 jetty:run-exploded 目标而不是 jetty:run。来自the documentation:
这个目标首先将你的 webapp 组装成一个分解的 war 文件,然后将它部署到 Jetty。
这可以确保在服务器启动之前执行适当的战争生命周期阶段。
您还确定 jci 配置文件正在被激活吗?如果为构建指定了另一个配置文件, 属性将不会启用配置文件,请参阅this bug 了解详细信息。
来自 John Casey 的回复:
上面的例子按设计工作。 元素旨在指定如果构建中没有其他配置文件处于活动状态,则将激活此配置文件。因此,任何配置文件的特定激活都会导致该配置文件被停用。
【讨论】:
感谢您的回答。我会调查一下run-exploded。是的,我确定个人资料处于活动状态,这不是问题。mvn jetty:run-exploded -Dmaven.test.skip=true
是赢家。谢谢!
抱歉,很快就联系上了。 jsp 更改和 javarebel 类重新加载似乎都没有生效。【参考方案2】:
过滤后的文件通常最终位于构建目标目录中。如果你运行 'mvn jetty:run',它默认使用你未过滤的 src/main/webapp 目录。您所要做的就是将构建目标添加为附加资源目录。完成后,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>
【讨论】:
【参考方案3】:感谢@Randy,我也设法让它工作了。下面是一个最新的例子,展示了资源过滤和使用 org.eclipse.jetty 而不是旧的 mortbay 的码头变基 baseResource。 在这里,我们过滤两个 jsp 页面 login.jsp 和 index.jsp,并根据下面的属性部分将 jsp 中的变量“$login.resources”设置为“login.res.jsp”。 请注意,我们过滤并将这些写入“jetty.docroot”,然后我们将 jetty.docroot 覆盖在 src/main/webapps 上,以便我们过滤的 jsps 被 jetty 使用。覆盖从@Randy 更新为使用更新的“org.eclipse.jetty.util.resource.ResourceCollection”实现。
<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>
【讨论】:
以上是关于使用 jetty:run 时运行资源过滤器的主要内容,如果未能解决你的问题,请参考以下文章
带有 DataSource 的 jetty-env.xml 导致 mvn jetty:run 上的 WebAppContext 失败