【问题标题】:Tomcat7 maven plugin - reload resources when using with maven resources pluginTomcat7 maven 插件 - 与 maven 资源插件一起使用时重新加载资源
【发布时间】:2015-01-28 02:43:37
【问题描述】:

默认情况下,带有tomcat7:run 的Maven Tomcat 插件从src/main/webapp 读取资源。

但是,如果您有来自 Maven 资源插件的自定义资源,则需要将其配置为包含这些资源。 The general advice是配置warSourceDirectory指向target/${project.build.finalName},这是Maven WAR插件在package阶段创建的。这可行,但现在我在src/main/webapp 中更改的文件在运行mvn package 之前不会在Tomcat 实例中更改。 IDE 通常执行mvn compile,因此资源被复制到target/classes。我尝试将它指向目标/类,但它需要一个 WEB-INF/ 文件夹。我还尝试使用additionalClasspathDirs 指向target/classessrc/main/webapp which had no effect

插件版本为 2.2。

如何在 Maven Tomcat 插件中包含资源,同时仍然能够即时重新加载资源?

【问题讨论】:

  • 你说的是什么资源?在 src/main/webapp 中有 js、css、html、jsp 文件,所以如果你在 src/main/myresouces 中有另一个文件夹,那么你有两个资源文件夹用于 js css html 等等。请指定要重新加载的资源类型好吗?
  • 属性文件和 Spring 配置文件。 Maven 资源插件根据配置文件将src/main/config/dev/src/main/config/production/ 复制到目标。我想重新加载src/main/webapp 中的js/html 文件。如果插件有办法用这些文件覆盖目标资源,这将解决问题。
  • 我认为更改 spring 配置文件并不容易。我知道这是可能的,但它经常失败——即使使用像 jrebel 这样的动态类加载器也是如此。出于同样的原因,其他属性文件也可能有问题。但是,如果您想要做的只是能够更改 html、css 和 js 文件,那么这是完全可能的。如果您能阐明您的要求,那么我可以提供帮助。
  • 你描述的配置,有一个 dev 和 prod 文件夹,不是很好的做法。您的目标应该是创建一个二进制文件并让它从外部配置文件或环境变量中发现其环境。
  • @EngineerDollery 我不明白为什么对于只有一个开发和生产配置的小项目来说这是不好的做法,因为这是唯一会导致问题的情况。如果无法将其配置为在重新加载资源时以与打包的 WAR 文件一致的状态运行,我认为这是 Maven Tomcat 插件的缺陷。但是我同意,在这种情况下,这是解决问题的有效方法,如果没有更好的解决方案,我会接受 Eddu 的回答。

标签: java maven maven-tomcat-plugin


【解决方案1】:

我的建议是使用 spring 配置文件以便为每个环境加载正确的 bean,并从外部文件 file://opt/myapp/application.properties 加载属性,其中每个环境的 application.properties 会有所不同。

【讨论】:

  • 这正是我已经做的。 Tomcat插件默认根本不使用target/文件夹。
  • 您应该将所有属性保存在一个路径中。如果您在开发环境中部署,属性将有另一个值(不同于本地),对于生产环境也是如此。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-18
  • 1970-01-01
  • 1970-01-01
  • 2019-09-16
  • 2012-02-02
  • 2017-05-25
  • 2023-04-03
相关资源
最近更新 更多