java - Spring Boot 和生成的 JavaScript/CSS 内容

标签 java spring spring-mvc spring-boot post-processing

我正在尝试将 Spring/Maven 应用程序迁移到 Spring Boot。它使用 Maven 插件生成一些 JavaScript(在我的例子中 handlebars-maven-plugin )。

该插件本质上生成应包含在部署工件中的生成的 JavaScript 代码。然而,这个“生成的代码”本身并不是源代码的一部分。在旧式 Maven Web 应用程序中,此内容是在 target 目录中创建的,作为 Web 应用程序文件夹的一部分。

我可以想象其他类似的情况,其中源代码的某些部分作为构建的一部分进行处理,而该过程的结果文件不成为源代码本身的一部分(缩小聚合混淆SASSLess等)。

我读到,在 Spring Boot 中,静态内容应该存储在类路径中的某个位置,/META-INF/resources//resources/>/static//public/。但是生成的内容应该输出到哪里呢?

我可以将插件的输出目录更改为“/target/classes/static”,但是在运行mvn spring-boot:run时我无法找到生成的内容。我认为“mvn spring-boot:run”正在从“src”而不是“target”读取源代码。

在 Spring Boot 中应如何处理生成的 JavaScript/CSS?

最佳答案

我确定我生成的 JavaScript/CSS 文件不应写入 src 目录。生成的内容仅属于 target 目录 - 即使生成的代码包含在分发工件(war/jar 文件)中。

我的困惑是由于两个问题造成的。

“mvn spring-boot:run”行为

我的应用程序构建了一个 war 文件,因为我当前需要将其安装在远程 Tomcat 服务器上。 The behaviour of "mvn spring-boot:run" is different for jar and war packaging.据我所知,如果您有一个 war 包“mvn spring-boot:run” 将尝试从 src/main/webapp 提供 Web 内容 目录。我生成的内容不属于 src 目录 - 因此我需要从 target 目录中获取它。

对 Spring Boot 如何提供静态内容的困惑

I read that Spring Boot automatically serves up content from several classpath locations ; /META-INF/resources//resources//static//public/。 p>

即使我更新了生成的 JavaScript 插件输出路径以定位类路径位置,我最初也无法找到它。

我确定WebMvcAutoConfiguration包含负责添加静态内容路径的代码,并且如果您的配置扩展WebMvcConfigurerAdapter,则会触发WebMvcAutoConfiguration

但是,I've seen comments to suggest如果您使用@EnableWebMvc,那么这会有效地禁用这些默认静态内容位置(我会重视这方面的权威引用 - 我现在发现这个请参阅下面的更新)。 p>

我使用了@EnableWebMvc,所以为了解决这个问题,我扩展了WebMvcConfigurerAdapter来显式定义静态位置以包含我输出生成内容的类路径文件夹。

我敢说,当我现在扩展WebMvcConfigurerAdapter时,我可能不再需要使用@EnableWebMvc,但我对此还没有100%确定。

现在我已经显式配置了要定位的生成内容(通过覆盖 WebMvcConfigurerAdapteraddResourceHandlers 方法),我现在可以在使用“ mvn spring-boot:run".

问题已解决 - 如果没有完全理解!


更新

我找到了 Spring Boot 文档中与使用 @EnableWebMvc 时禁用默认静态内容位置的原因相关的部分,它说:

The easiest way to take complete control over MVC configuration is to provide your own @Configuration with the @EnableWebMvc annotation. This will leave all MVC configuration in your hands.

它来自标题为“Switch off the Default MVC configuration”的部分。

关于java - Spring Boot 和生成的 JavaScript/CSS 内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43116760/

相关文章:

java - 复制 ArrayList 的前半部分

java - (java.util.regex.Pattern 的问题)检查字符串中的数字和字母

java - 使用 Selelnium 时出现错误

spring - 如何在 Spring Boot 提供的 create-react-app 中使用本地字体?

spring-mvc - <mvc :annotation-driven/> do? 是什么意思

java - 修改 Spring @RolesAllowed 的行为

java - 使用 thymeleaf 中的搜索功能和请求参数

java - Java中的关键字 "new"是必要的吗

spring - 如何找到包含 org.springframework.stereotype.Service 的库?

spring - 使用 Spring 3.0.5 和 Jackson 向 Tomcat 发出 JSON PUT 请求时出现 403