Grails:集成Java类

时间:2016-12-09 14:34:30

标签: java grails

我在IntelliJ IDE中创建了一个新的Grails 3应用程序。

以下是IntelliJ

的文件夹结构视图

folder layout showing grails-app/ and src/ on the same level

然后我创建了两个文件,一个带有以下代码的控制器,

package grailsjavatest
import test.JavaTest;
class JavaTestController {

    def index() {
        JavaTest jt = new JavaTest();
        render jt.someAction();
    }
}

和包含以下代码的Java文件(在src / java / test / JavaTest.java中),

package test;

class JavaTest{

    public String someAction()
    {
        return "<html> <body> <b> Hello From Java! </b> </body> </html>";
    }

}

但是以下项目错误,出现以下错误,

[the java process command was removed as it is a bit long.]

| Running application...
startup failed:

/Users/user/IdeaProjects/GrailsJavaTest/grails-app/controllers/grailsjavatest/JavaTestController.groovy: 2: unable to resolve class test.JavaTest
 @ line 2, column 1.
   import test.JavaTest;
   ^

1 error



FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileGroovy'.
> Compilation failed; see the compiler error output for details.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
| Error Failed to start server (Use --stacktrace to see the full trace)

Process finished with exit code 1

如果我将控制器代码更改为,

package grailsjavatest
class JavaTestController {

    def index() {
        render "<html> <body> <b> Hello From Java! </b> </body> </html>";
    }
}

页面按预期呈现(但显然不会调用java代码)。

修改

以下是创建包的文件结构

JavaTest as a package and not a normal folder

2 个答案:

答案 0 :(得分:1)

您的JavaTest类是使用default(package-private)修饰符声明的,因此它只对在同一个'test'包中声明的其他类可见。将'public'关键字添加到类定义的开头(即'public class JavaTest {yada,yada')。

或者按照Grails给出的说明和“Run with --stacktrace选项来获取堆栈跟踪”。这应该会告诉你什么是错的。

答案 1 :(得分:0)

我之前的回答没有多大意义。

问题是&#39;测试&#39;不是包文件夹(在IntelliJ中包含一个点),而是一个普通文件夹。但是为了将包文件夹添加到Java文件夹,需要将Java文件夹标记为&#39;源文件夹&#39; (有蓝色)。右键单击java文件夹,选择“将目录标记为&#39; - &#39;来源root&#39;。 &#39;测试&#39;文件夹现在将自动标记为包文件夹(至少在IntelliJ 2016.1中)。