gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 06:27:11 26 4
gpt4 key购买 nike

我希望在插件应用方法期间抛出一个错误,以便通知用户丢失的设置(并帮助他们修复它)。我反复看到以下错误:
Failed to notify ProjectEvaluationListener.afterEvaluate(), but primary configuration failure takes precedence.
我想做两件事:

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

  • 最后一条评论在 Gradle bug 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 后,它起作用了。

    关于error-handling - Gradle - 在插件应用期间抛出错误 - "Failed to notify ProjectEvaluationListener.afterEvaluate()",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27068884/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com