我目前正在使用AngularJs开发嵌入式服务器的前端/ webapp(打包在.jar文件中,作为Tomcat运行)。服务器有一些我希望能够在前端使用的API端点。
我目前的方法是使用webjars加载我选择的angularjs版本,然后在webapp文件夹中构建应用程序。结构是这样的:
├───src
│ ├───main
│ │ ├───docker
│ │ ├───java
│ │ │ └───com
│ │ │ └───...
│ │ ├───resources
│ │ └───webapp
│ │ └───public
│ │ ├───css
│ │ └───js
│ │ └───controllers
└───target
├───classes
│ ├───com
│ │ └───...
│ └───public
│ ├───css
│ └───js
│ └───controllers
├───generated-sources
│ └───annotations
├───generated-test-sources
│ └───test-annotations
└───test-classes
└───com
└───...
我正在编辑的文件位于src / main / webapp / public文件夹中,他们正在编译"编译"进入target / classes / public文件夹。
如果我想在服务器运行时重新加载文件,我必须执行Run -> Reload Changed Classes
,这在开发时工作正常。
但是,因为我最初来自"独立" AngularJs开发我习惯于拥有真正的livereload和一个构建链,它可以缩小和连接js / css文件以进行优化(grunt,bower)。
现在我已经调查了wro4j并且能够将其设置得很好。对我来说仍然缺少的一件事是热重装。即使上面的方法不再使用wro4j,因此唯一的选择是重新编译整个应用程序以查看css / javascript或HTML中的更改。 有一个简单的方法吗?
我首选的方法是在开发(在调试中运行服务器)时处理未分级/非复合版本,并在部署应用程序时(或仅运行)执行整个构建链
我有什么选择?
答案 0 :(得分:1)
在http://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-devtools.html
查看Spring Boot DevTools文档Maven。
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<强>摇篮。强>
dependencies {
compile("org.springframework.boot:spring-boot-devtools")
}
它包含一个内置的LiveReload服务器。您应该只需运行&#34; Make Project&#34;。
即可从IntelliJ更新您的应用答案 1 :(得分:0)
我最终做的可能是有点矫枉过正,但我没有找到任何其他合适的解决方案。
我构建了一个Gruntfile.js(基于angularjs的yeoman生成器),以便能够拥有livereload和build-chain功能(concat,minify等)。有了这个,我也能够在前端工作而无需启动服务器。这个文件中唯一的“脏黑客”是grunt build
将它的dist文件夹复制到/src/main/resources/static
文件夹,以便它被“编译”到.war文件中。
我使用了一些maven插件,能够在构建时执行所需的命令(npm install,bower install,grunt build,grunt clean)
<plugin>
<groupId>com.github.eirslett</groupId>
<artifactId>frontend-maven-plugin</artifactId>
<version>0.0.22</version> <!-- last version supported by maven 2 -->
<dependencies>
<dependency>
<groupId>org.codehaus.plexus</groupId>
<artifactId>plexus-utils</artifactId>
<version>2.1</version>
</dependency>
</dependencies>
<configuration>
<nodeVersion>v0.10.18</nodeVersion>
<npmVersion>1.3.8</npmVersion>
<workingDirectory>src/main/frontend</workingDirectory>
</configuration>
<executions>
<execution>
<id>install node and npm</id>
<goals>
<goal>install-node-and-npm</goal>
</goals>
<phase>generate-resources</phase>
</execution>
<execution>
<id>npm install</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>install</arguments>
</configuration>
</execution>
<execution>
<id>bower install</id>
<goals>
<goal>bower</goal>
</goals>
<configuration>
<arguments>install</arguments>
</configuration>
</execution>
<execution>
<id>npm rebuild</id>
<goals>
<goal>npm</goal>
</goals>
<configuration>
<arguments>rebuild node-sass</arguments>
</configuration>
</execution>
<execution>
<id>grunt build</id>
<goals>
<goal>grunt</goal>
</goals>
<configuration>
<arguments>build</arguments>
</configuration>
</execution>
<execution>
<id>npm install before clean</id>
<goals>
<goal>npm</goal>
</goals>
<phase>clean</phase>
<configuration>
<arguments>install</arguments>
</configuration>
</execution>
<execution>
<id>grunt clean</id>
<goals>
<goal>grunt</goal>
</goals>
<phase>clean</phase>
<configuration>
<arguments>clean</arguments>
</configuration>
</execution>
</executions>
</plugin>
我希望这为我的方法提供了一个广泛的想法。这当然不是完美的,特别是因为它为整个项目的构建时间增加了很多。