使用Spring Boot和wro4j在IntelliJ中进行热交换

时间:2016-09-20 10:30:43

标签: spring-boot wro4j

我目前正在使用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中的更改。 有一个简单的方法吗?

我首选的方法是在开发(在调试中运行服务器)时处理未分级/非复合版本,并在部署应用程序时(或仅运行)执行整个构建链

我有什么选择?

2 个答案:

答案 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>

我希望这为我的方法提供了一个广泛的想法。这当然不是完美的,特别是因为它为整个项目的构建时间增加了很多。