Maven:将生成的 tomcat-maven-plugin 资源放在哪里?
Posted
技术标签:
【中文标题】Maven:将生成的 tomcat-maven-plugin 资源放在哪里?【英文标题】:Maven: Where to put generated resources for tomcat-maven-plugin? 【发布时间】:2022-01-17 14:17:26 【问题描述】:我的项目的 src/main/webapp
目录中有 CSS 和 javascript 文件。
我想加入将这些资源的加入和缩小版本添加到我的 WAR 文件以及 tomcat-maven-plugin
获取它的位置。
我使用 yuicompressor-maven-plugin 创建文件并将其放到$project.build.directory/$project.build.finalName
。它适用于 maven 包,并且这些资源可以进入 WAR 文件,但不知何故 tomcat-maven-plugin
根本看不到这些。我应该为它使用不同的目录吗?
我的 pom:
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>tomcat-maven-plugin</artifactId>
<version>1.1</version>
<configuration>
<path>/MyApp</path>
<warDirectory>$project.build.directory/$project.build.finalName</warDirectory>
</configuration>
</plugin>
<plugin>
<version>2.5.1</version>
<inherited>true</inherited>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.6</source>
<target>1.6</target>
<optimize>true</optimize>
<debug>true</debug>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.5</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.2</version>
<configuration>
<webResources>
<resource>
<directory>$basedir/src/main/resources/META-INF</directory>
<filtering>true</filtering>
<targetPath>META-INF</targetPath>
<includes>
<include>context.xml</include>
</includes>
</resource>
</webResources>
<archive>
<addMavenDescriptor>false</addMavenDescriptor>
<manifest>
<addDefaultImplementationEntries>true</addDefaultImplementationEntries>
<addClasspath>true</addClasspath>
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>yuicompressor-maven-plugin</artifactId>
<version>1.3.0</version>
<executions>
<execution>
<phase>process-resources</phase>
<configuration>
<excludes>
<exclude>**/*</exclude>
</excludes>
<aggregations>
<aggregation>
<output>$project.build.directory/$project.build.finalName/js/commons-pack.js</output>
<includes>
<include>$project.build.sourceDirectory/../webapp/js1.js</include>
<include>$project.build.sourceDirectory/../webapp/js2.js</include>
...
我应该怎么做才能让mvn tomcat:run
也能提取我生成的文件?
【问题讨论】:
【参考方案1】:使用warSourceDirectory
:
<warSourceDirectory>$project.build.directory/$project.build.finalName</warSourceDirectory>
而不是 tomcat-maven-plugin
的此配置属性 (warDirectory
):
<warDirectory>$project.build.directory/$project.build.finalName</warDirectory>
根据tomcat-maven-plugin documentation,warSourceDirectory
是web资源获取的地方,默认值为$basedir/src/main/webapp
。这意味着如果您不设置该属性,则需要在$basedir/src/main/webapp
下生成统一/缩小的 JavaScript 文件。
如果你将warSourceDirectory
设置为输出文件夹,这意味着你需要在启动Tomcat之前生成这个文件。
【讨论】:
设置warSourceDirectory 网站后停止工作:) 我错过了什么吗?可能我应该把所有东西都移到那个目录吗? 如果您将warSourceDirectory
设置为build
文件夹,则必须事先执行mvn package
才能实际处理资源。【参考方案2】:
或者,您也可以使用run-war
目标而不是run
,例如mvn tomcat6:run-war
。这将使用构建目录中的爆炸战争(因此过滤资源)。见this site。还有run-war-only
跳过打包阶段。
【讨论】:
【参考方案3】:请注意,该插件现在由 Apache 维护(所以升级一点 :-))请参阅 http://tomcat.apache.org/maven-plugin-2.0/。
即使它可以使用 install 我不确定它是否是最佳解决方案(关于 io 和构建时间)。
tomcat 运行必须能够使用来自多个目录的资源(我不确定当前的 tomcat 嵌入 api 是否可行)。
你能在这里添加一个功能请求吗https://issues.apache.org/jira/browse/MTOMCAT
谢谢
【讨论】:
是否可以将所有静态资源(webapp)复制到例如 target/ 目录并将 tomcat 指向那里? 可以使用maven.apache.org/plugins/maven-resources-plugin/examples/…以上是关于Maven:将生成的 tomcat-maven-plugin 资源放在哪里?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Maven 中使用模板代码生成器(例如 freemarker)?