How to call java code in Grails 3.2.6

解决方法

我的Grails的环境是

grails -v
| Grails Version: 3.2.6
| Groovy Version: 2.4.7
| JVM Version: 1.8.0_71

grails 3.2.6是用gradle进行构建的。所以如果要添加java类, 就需要修改build.gradle

第一步

创建src/main/java目录。对于com.yanggeorge.XMLtest类, 则要创建src/main/java/com/yanggeorge/目录,并把XMLtest.java放在该 路径下。

第二步

build.gradle文件中添加如下代码

1
2
3
4
5
6
7
8
9
10
apply plugin: "java"

task compileOne (type: JavaCompile) {
source = sourceSets.main.java.srcDirs
include 'com/yanggeorge/XMLtest.java'
classpath = sourceSets.main.compileClasspath
destinationDir = sourceSets.main.output.classesDir
}

compileOne.options.compilerArgs = ["-sourcepath", "$projectDir/src/main/java"]

第三步

编译XMLtest.java。可以用grails compile进行编译。

D:\work\grails>grails compile
:compileJava UP-TO-DATE
:compileGroovy UP-TO-DATE
:buildProperties
:processResources UP-TO-DATE
:classes UP-TO-DATE

BUILD SUCCESSFUL

Total time: 23.638 secs
D:\work\grails>

第四步

修改grails-app/conf/spring/resources.groovy

1
2
3
4
5
import com.yanggeorge.XMLtest

beans = {
myXMLtest(XMLtest)
}

第五步

已经可以使用myXMLtest了,例如创建一个service,grails-app/services/rss/RssService.groovy 第6行就是依赖注入的bean。

1
2
3
4
5
6
7
8
9
10
11
12
13
import grails.transaction.Transactional

@Transactional
class RssService {

def myXMLtest

def serviceMethod(String url, String keyword) {
def items = myXMLtest.getAllItems(url)

}

}