当前位置: 首页 > 知识库问答 >
问题:

Grails2.1.1在每个“Grails run app”之前都需要“Grails clean”——仅限命令行

乌骏
2023-03-14

我刚刚继承了一个现有的应用程序,我注意到的第一件事是,我必须在每次“grails运行应用程序”之前进行“grails清理”,否则我会出错。创建该项目的人员表示,他们有几个其他具有类似设置的项目没有出现此错误,并且无法跟踪此特定项目的此问题。

细节:

从命令行,我第一次运行它,我得到这个输出:

Grails运行应用

编译192个源文件

它继续运行良好。如果我随后控制-C并运行完全相同的命令(无更改,无任何更改),我将得到:

|编译4个源文件错误编译错误:启动失败:类生成期间发生常规错误:对象不是声明类的实例

奇怪的是,在IntelliJ中,如果我在(命令行)grails清理后从菜单中运行应用程序,我会得到相同的“编译192个源文件”消息,它会工作,第二次我得到“编译4个源文件”,它仍然工作。

我在谷歌上搜索也没用。我甚至不知道如何开始解决这个问题。有人能告诉我解决这个问题的方法吗?我到底在看什么?显然,当相同的编译发生时,它如何在IDE而不是命令行中工作?这个错误意味着什么?

共有2个答案

冀越
2023-03-14

这绝对是个棘手的问题。在开发过程中,偶尔需要清洁是很自然的。

然而,你所描述的听起来不断重复,你肯定应该找到原因。以下是我如何解决这个问题的策略。我假设你有所有的版本控制。

  1. 创建一个全新的项目,具有相同的名称,相同的grails版本。
  2. 删除项目中的所有文件,并将(1)中的文件复制到项目中。现在你有了一个干净的项目和一个巨大的差异。
  3. 首先恢复(完整或逐行)你的BuildConfig.groovy.这绝对是一个很大的可能性,原因是在这里的某个地方。
  4. 接下来我将恢复Config.groovy/Datasource.groovy/Bootstrap。
  5. 现在,如果您仍然无法隔离原因,它必须是您的代码。不断恢复,直到你最终找到原因。恢复resources.groovy的方式,只要你有可用的课程。
陆雨华
2023-03-14

我会尝试不重新加载运行(我认为是grails-noreload run-app)-这解决了吗?

如果是这样的话,我们可以再深入一点:可能只是slcache被错误地填充了,如果使用最新的JDK并加载了较旧的spring,就会发生这种情况。在重启之间(只需使用常规的grails run app)删除。slcache-rm-rf~/grails/2.1.3/。slcache而不是grails clean。这有区别吗?

然后我会抓住一个最近的Spring加载(例如。1.2.0。从这里在中央释放. jar:http://search.maven.org/remotecontent?filepath=org/springframework/springloaded/1.2.0.RELEASE/springloaded-1.2.0.RELEASE.jar

在grails 2.1.3安装中找到Spring加载的罐子。重命名(以备份)。然后将1.2.0 jar复制到该文件夹中,并将其重命名为与原始Spring加载的jar相匹配。我在这里找到了我的:

grails-2.1.3/lib/org.springsource.springloaded/springloaded-core/jars/springloaded-core-1.1.1.jar

所以我要复制springloaded-1.2.0。释放jar放入该文件夹,并将其重命名为springloaded-core-1.1.1。jar

再来一个grails clean,然后再次尝试运行应用程序。更好吗?

 类似资料:
  • 目前,我有一个类的集合,其中包含一个纹理、一个VAO和一个VBO。由于所有的状态切换和使用少量三角形调用,绘制数千个这样的对象会导致性能下降。 因此,现在我将更改我的实现,以便创建一系列1MIB VBO(从一个开始,一旦它满了,创建第二个1MIB VBO并继续填充它)。每个VBO需要单独的VAO吗?VBO已经使用了交错的顶点数据,所以我不是在谈论使用多个VBO来处理顶点、法线、纹理库等。

  • 问题内容: 我想在我运行的每个bash命令之后打印日期。 这可以帮助我了解远离键盘时要执行多少命令。 我知道我能做 获取日期,但我不知道在bash上执行的每个命令之后如何甚至是否可以运行此命令。 我也会对在每个命令 之前 运行同一命令感兴趣,因此我可以知道一个命令花费了多长时间。 可能吗? 我应该编辑什么文件? 例如: 如果我也可以介绍以下功能,我将很高兴: 第一个日期是我运行程序的日期,第二个是

  • 本文向大家介绍每天一个linux命令之locate 命令,包括了每天一个linux命令之locate 命令的使用技巧和注意事项,需要的朋友参考一下 locate 让使用者可以很快速的搜寻档案系统内是否有指定的档案。其方法是先建立一个包括系统内所有档案名称及路径的数据库,之后当寻找时就只需查询这个数据库,而不必实际深入档案系统之中了。在一般的 distribution 之中,数据库的建立都被放在 c

  • 我正在使用Windows 7。我的公司在我们自己的git服务器上存储了一些回购协议。最近我还不得不使用GitHub,但自从我访问了GitHub上的回购协议之后,git bash的表现就非常不稳定。 归根结底,每次我打开git bash,如果我尝试拉,我会得到:“错误:无法跨越git:没有这样的文件或目录。” 我的git版本是2.18.0。窗户。1. 我发现每次启动git-bash时都必须手动执行此

  • 因此,我将从一个代码库构建一组应用程序,并使用productFlavors自定义每个应用程序。 每种口味都需要有自己的Google Analytics跟踪ID,所以我开始为每种口味生成一个新的google-services.json,我发现Google Developer控制台有一个限制。 问题是,如何对所有口味使用相同的json文件?(每种口味都有自己的applicationID)

  • 问题内容: 每个Java程序都要求至少存在一个类。 以上说法总是正确的吗? 问题答案: 是的,您至少需要一个类才能拥有一个程序,但是 不需要 ,您不需要任何方法(与其他答案相反)。 需要一个类的原因是因为在Java中,所有代码都在类内部。因此,要获取任何代码,您需要一个类。但是,代码不一定需要包含在方法中。它也可以在初始化器中。因此,这是一个没有方法的完整Java程序: 那给… 编辑:从Java