Gas*_*ste 6 java jetty maven maven-jetty-plugin maven-module
我正在使用多模块maven项目开发Java Web应用程序.项目设置如下:
pom.xml 主要的maven项目,包括以下模块:
persistence: 实体类和DAObusiness: 服务定义和实施webapp: Apache wicket Web应用程序依赖关系层次结构如下:webapp取决于business,取决于persistence.
我也使用Jetty Maven插件mvn -pl webapp jetty:run在主目录内部使用本地运行Web应用程序pom.xml.在开发应用程序时,在进行代码更改时,我希望jetty服务器重新启动并自动重新加载修改后的代码文件.当我修改里面的文件也能正常工作webapp的模块,但不工作,当我修改的另一个模块中的一个文件,这样persistence或business.
Maven Jetty插件的内部配置webapp/pom.xml如下:
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.2.2.v20140723</version>
<configuration>
<reload>automatic</reload>
<scanIntervalSeconds>1</scanIntervalSeconds>
<webApp>
<extraClasspath>../business/target/classes/;../persistence/target/classes/</extraClasspath>
</webApp>
<scanTargets>
<scanTarget>../business/target/classes</scanTarget>
<scanTarget>../persistence/target/classes</scanTarget>
</scanTargets>
</plugin>
Run Code Online (Sandbox Code Playgroud)
我按照这个答案的说明.该<scanTarget>标签做工精细,因为当我修改中的文件被码头重新启动business或persistence.但是,<extraClasspath>由于修改后的文件未被jetty加载,因此无效.链接的答案使用<webAppConfig>标记.但是,我正在使用插件文档中<webApp>指定的标记(我也尝试了旧标记,这导致了相同的结果).<webAppConfig>
我的问题是:如何为多模块项目配置Jetty Maven插件,以便从其他模块重新加载修改过的文件?
小智 5
要在子模块发生更改时强制重新加载,可以使用以下选项
1-静态模块名称和扫描目标
您可以将每个模块的目标目录定义为扫描目标
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${jetty.plugin.version}</version>
<configuration>
<scanIntervalSeconds>${jetty.scanInterval}</scanIntervalSeconds>
<scanTargets>
<scanTarget>module-name/target/classes</scanTarget>
<scanTarget>module-name2/target/classes</scanTarget>
</scanTargets>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
2-动态模块名称和扫描目标(推荐)这使用RegEx查找其他模块的编译目标,在以下示例中,每次在任何模块上编译类时,我们都会重新加载应用程序
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>${jetty.plugin.version}</version>
<configuration>
<scanIntervalSeconds>${jetty.scanInterval}</scanIntervalSeconds>
<scanTargetPatterns>
<scanTargetPattern>
<directory>${project.basedir}</directory>
<includes>
<include>**/target/classes/**/*.class</include>
</includes>
</scanTargetPattern>
</scanTargetPatterns>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
通过反复试验,我找到了解决方案。问题是jetty是从父pom中执行的
mvn -pl webapp jetty:run
Run Code Online (Sandbox Code Playgroud)
该命令是从主pom的目录中调用的,因此jetty无法extraClasspath正确解析内部的相对路径。jetty:run在目录内执行目标时webapp,所有修改的类都会正确加载。
我假设scanTargets即使在使用时也能正常工作mvn -pl webapp jetty:run,因为相对路径在插件执行期间得到解析(使用正确的工作目录)。Jetty 在启动时输出扫描目标:
[INFO] Added extra scan target:C:\PathToProject\business\target\classes
[INFO] Added extra scan target:C:\PathToProject\persistence\target\classes
Run Code Online (Sandbox Code Playgroud)
但是,该<extraClasspath>属性是属性的一部分,属性是org.eclipse.jetty.webapp.WebAppContext<webApp>类的实例。我假设这个实例直接传递给jetty,并且extraClasspath属性在jetty启动时由jetty访问。
| 归档时间: |
|
| 查看次数: |
7449 次 |
| 最近记录: |