我在IntelliJ IDE中创建了一个新的Grails 3应用程序。
以下是IntelliJ
的文件夹结构视图然后我创建了两个文件,一个带有以下代码的控制器,
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代码)。
修改
以下是创建包的文件结构
答案 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中)。