首页 文章

Spring Boot和生成的JavaScript / CSS内容

提问于
浏览
2

我正在尝试将Spring / Maven应用程序迁移到Spring Boot . 它使用maven插件生成一些JavaScript(在我的情况下为handlebars-maven-plugin) .

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

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

我已经读过,在Spring Boot中,静态内容应该存储在/ META-INF / resources /,/ resources /,/ static /,/ public /下的类路径中的某个地方 . 但是应该在哪里输出生成的内容?

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

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

1 回答

  • 2

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

    我的困惑是由于两个问题 .

    "mvn spring-boot:run" behaviour

    我的应用程序构建一个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目录 - 所以不知怎的,我需要从目标目录中获取它 .

    Confusion about how Spring Boot serves up static content

    I read that Spring Boot automatically serves up content from several classpath locations; / META-INF /资源/,/资源/,/静态/,/公共/ .

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

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

    但是,I've seen comments to suggest如果你使用@EnableWebMvc那么这会有效地禁用这些默认的静态内容位置(我会重视这个的权威参考 - 我发现现在看到下面的更新) .

    我使用@EnableWebMv来解决这个问题,我扩展了WebMvcConfigurerAdapter以显式定义静态位置,以包含我输出生成内容的classpath文件夹 .

    我敢说,我现在扩展WebMvcConfigurerAdapter,我可能不再需要使用@EnableWebMvc,但我还不能100%肯定这一点 .

    现在我已经显式配置了生成的内容(通过覆盖WebMvcConfigurerAdapter的addResourceHandlers方法)我现在能够在使用“mvn spring-boot:run”时找到这个内容 .

    问题解决了 - 如果不完全理解!


    Update

    我发现Spring Boot文档的部分与使用@EnableWebMvc时禁用默认静态内容位置的原因有关,它说:

    完全控制MVC配置的最简单方法是使用@EnableWebMvc注释提供自己的@Configuration . 这将使所有MVC配置都在您手中 .

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

相关问题