Gradle - 插件应用期间抛出错误 - "Failed to notify ProjectEvaluationListener.afterEvaluate()"



我希望在插件应用方法期间抛出错误,以通知用户缺少设置(并帮助他们修复它)。我反复看到以下错误:

Failed to notify ProjectEvaluationListener.afterEvaluate(), but primary configuration failure takes precedence.

我想做两件事:

  1. 以适当的方式通知 afterEvaluate()
  2. 避免产生巨大的堆栈跟踪 - 只需要异常消息

Gradle 错误 1617 中的最后一条评论如下:

> 发生的情况是,即使 apply() 抛出异常,也会执行 afterEvaluate 闭包。
这并不奇怪。你给 afterEvaluate() 的闭包是一个回调,即使评估失败也会触发。您应该在 afterEvaluate 回调中检查项目的状态 (http://www.gradle.org/docs/current/javadoc/org/gradle/api/Project.html#getState()),如果它处于失败状态,则返回。

经过多次测试,我无法找出构建对getState()调用的正确方法。

gradle 插件文件摘要:

class j2objc implements Plugin<Project> {
    void apply(Project project) {
        project.afterEvaluate {
            // Setup basic paths
            def j2objcHome = System.getenv()['J2OBJC_HOME']
            if (j2objcHome == null) {
                throw new InvalidUserDataException(
                        'j2objc home not set, <helpful instructions to fix>')
            }
            project.tasks.create(name: 'j2objcTranslate', type: Exec) {
                // Should not be called if there's a failure
                description 'Translates all the java source files in to Objective-C using j2objc'
                // <implementation>
            }
        }
    }
}

完整错误,包括我想隐藏的长堆栈跟踪的一部分:

$ gradlew base:j2objcTranslate
Failed to notify ProjectEvaluationListener.afterEvaluate(), but primary configuration failure takes precedence.
org.gradle.api.InvalidUserDataException: j2objc home not set, this can be set using J2OBJC_HOME environment variable or within build.gradle by adding: j2objcConfig { j2objcHome = <path> }, e.g. j2objcConfig { j2objcHome = "$projectDir/../j2objc/"}
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
<a huge number more lines>

更新

父级 gradle 文件中存在错误。修复此问题后,它产生了更好的输出(复制如下)。即便如此,如前所述,当有多个故障时,生成更好的错误消息会很好。

$ gradlew base:j2objcTranslate
FAILURE: Build failed with an exception.
* Where:
Script '/Users/brunobowden/dev/myproject/base/j2objc.gradle' line: 35
* What went wrong:
A problem occurred configuring project ':android'.
> A problem occurred configuring project ':base'.
    > j2objc home not set, <helpful message>

我的情况,添加ANDROID_PATH后,它起作用了。

相关内容

最新更新