Groovy 和 Java 聯合開發環境搭建
1. 在主 pom 的 properties 中加上 <groovy.version>2.5.2</groovy.version> 用來覆蓋 spring boot 自帶的 groovy 版本
2. 在主 pom 中的 build > plugins 部分加上交叉編譯插件
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
<encoding>${project.build.sourceEncoding}</encoding>
<compilerId>groovy-eclipse-compiler</compilerId>
<verbose>true</verbose>
<fork>true</fork>
<compilerArguments>
<javaAgentClass>lombok.launch.Agent</javaAgentClass>
</compilerArguments>
</configuration>
<dependencies>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-eclipse-compiler</artifactId>
<version>3.0.0-01</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy-eclipse-batch</artifactId>
<version>2.5.2-01</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.2</version>
</dependency>
</dependencies>
</plugin>
3. 在 start 對應的 pom 中的 build 部分加上
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
4. 這樣就可以在項目中同時使用 Groovy 和 Java 開發了,直接在 src/main/java 下面建立 groovy 類即可,當然也可以在 src/main/groovy 下建立
錯誤解決:
1. 使用命令行 mvn clean install -Dmaven.test.skip=true -X 編譯,如果報類似於下面的編譯失敗,則在對應的 pom 中添加對應包的依賴:
如:
<dependency>
<groupId>org.hamcrest</groupId>
<artifactId>hamcrest-all</artifactId>
<version>1.3<version>
</dependency>
ERROR in /Users/leiting.hlt/iwant-tmsx/iwant-tmsx-service/src/main/java/com/cainiao/iwant/tmsx/service/impl/TmsxOrderServiceImpl.java (at line 1)
package com.cainiao.iwant.tmsx.service.impl;
^
The type org.hamcrest.Matcher cannot be resolved. It is indirectly referenced from required .class files
2. 如果用 IDEA 直接運行報類似下面的錯誤,就需要改變 spring boot 自帶的 groovy 版本,不要通過依賴管理覆蓋 groovy 版本, 使用 groovy.version 在 properties 中配置覆蓋 spring boot 自帶的 groovy 版本即可
如:
<properties>
<groovy.version>2.5.2</groovy.version>
</properties>
Information:Groovyc: While compiling iwant-tmsx-start:java.lang.NoClassDefFoundError: org/codehaus/groovy/ast/MethodCallTransformation needed for org.codehaus.groovy.macro.transform.MacroTransformation
at org.jetbrains.jps.incremental.groovy.JointCompilationClassLoader._defineClass(JointCompilationClassLoader.java:41)