多项目中的插件在 Grails 3.2.11 中失败

Plugins in a Multiproject fails at Grails 3.2.11

配置

按照 Grails 3.2.11 手册中的 Plugins and Multi-Project Builds section,假设我可以在终端中使用以下命令设置多项目:

echo "Creating the root folder..."
mkdir test-multi-project
cd test-multi-project

echo "Creating the settings.gradle file..."
echo "include 'myapp', 'myplugin'" >> settings.gradle

echo "Creating the Grails application..."
grails create-app myapp

echo "Creating the Grails plugin..."
grails create-plugin myplugin

echo "Configuring the dependency between the application and the plugin..."
echo "grails { plugins { compile project(':myplugin') } }" >> myapp/build.gradle 

echo "Executing the Grails application..."
cd myapp
grails run-app 

错误

但是,当我尝试使用这些命令创建和配置 Grails 应用程序和插件时,grails run-app 命令抛出下一个错误:

FAILURE: Build failed with an exception.

* Where:
Build file '~/test-multi-project/myapp/build.gradle' line: 61

* What went wrong:
A problem occurred evaluating root project 'myapp'.
> Project with path ':myplugin' could not be found in root project 'myapp'.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

CONFIGURE FAILED

Total time: 4.835 secs
| Error Error initializing classpath: Project with path ':myplugin' could not be found in root project 'myapp'. (Use --stacktrace to see the full trace)

附加信息

我已经使用 Grails 3.2.8、3.2.9、3.2.10 和 3.2.11 测试了上述命令,代码抛出相同的错误。

另一方面,我使用 Grails 3.2.3、3.2.5 和 3.2.7 测试了上述命令,项目执行良好。此外,Grails 登陆页面显示 'mypluin' 已被应用程序使用。

请注意,我正在使用 sdk 来处理 Grails 版本。这些命令是使用 Java 1.7 和 Yosemite:

执行的

问题:

我想知道我还需要做什么或我做错了什么才能使此代码在 Grails 3.2.11 上运行

提前致谢。

这时候可能出错了:

echo "grails { plugins { compile project(':myplugin') } }" >> myapp/build.gradle 

该段需要添加到该文件的现有块而不是新块(我没有测试过)

当您手动执行这些步骤时会发生什么情况?它是否以这种方式工作?如果是这样,您是否考虑过对更改的文件进行比较以查看不同之处。

您提供的脚本很棒,也许其他人希望 运行 通过它,但我怀疑这就是已经指出的内容。

你应该看看 ed 像这个例子:

我正在使用 grails 3.2.8 应用程序,它在依赖项部分的结尾如下:

   runtime "com.h2database:h2"
    testCompile "org.grails:grails-plugin-testing"
    testCompile "org.grails.plugins:geb"
    testRuntime "org.seleniumhq.selenium:selenium-htmlunit-driver:2.47.1"
    testRuntime "net.sourceforge.htmlunit:htmlunit:2.18"

现在如果我执行

test328$ ed -s build.gradle <<EOF >/dev/null
g/^    testRuntime "net.sourceforge.htmlunit:htmlunit:2.18"
a
compile project(':myplugin') 
.
w
q
EOF

您现在可以看到:

tail -n20 build.gradle 
    runtime "com.h2database:h2"
    testCompile "org.grails:grails-plugin-testing"
    testCompile "org.grails.plugins:geb"
    testRuntime "org.seleniumhq.selenium:selenium-htmlunit-driver:2.47.1"
    testRuntime "net.sourceforge.htmlunit:htmlunit:2.18"
compile project(':myplugin') 
}

新条目已添加。您需要在 grails 生成的现有文件中找到一个指针,并像上面那样使用该指针来添加您的条目​​

ed 脚本被用来演示这个,因为显然以前不够清楚

Jeff Brown 解决了上述问题,删除了 multi-project-test2/myapp/settings.gradle 文件并将下一行添加到 multi-project-test2/settings.gradle 文件:

project(':myapp').name = 'myapp'

正如您在下一个 GitHub 的提交中看到的那样:https://github.com/esalomon/multi-project-test2/commit/d92c3fbc67156bcd1af9f47dc6f2984534154bad

以上更新后 multi-project-test2 可以下载,正常使用。