gpt4 book ai didi

android - 调试 gradle 任务 compileReleaseJavaWithJavac

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

我正在编写一个自定义 gradle 插件,它生成代码并注入(inject)一些新的 gradle 任务。我目前的问题是 gradlew check任务compileReleaseJavaWithJavaccompileDebugJavaWithJavac失败。

在 Windows 上,任务运行良好,在 Linux 和 mac 上,任务失败。这可能暗示路径或目录分隔符有错误。

这是确切的错误:

:examples:app:compileReleaseJavaWithJavac - is not incremental (e.g. outputs have changed, no previous execution, etc.).
/the/full/path/to/file/MainActivity.java:10: error: package R does not exist
setContentView(R.layout.activity_main);
^
1 error

我现在的问题是如何调试该特殊任务?我想看看类路径,因为我猜出了点问题。

在你说之前,但是没有生成 R 文件:它是。我在文件系统中看到了该文件。

当我在 Mac 上禁用并行任务时,我玩得更多了,它也编译得很好。然而,在特拉维斯它仍然失败。

最佳答案

更新回复:

目前我只知道:

  • 这不是 Travis-ci 问题,因为我在 linux 上本地复制了它
    机器。
  • 它与 R 包无关,它是默认包,不需要导入。
  • 它与 appcompat 错误无关,任何随机更改都会成功构建。
  • 似乎与增量构建有关,see this , 还有 this并尝试将其设置为 false。

  • Story: Don't compile a source file when the API of its compile dependencies has not changed

    Currently, changing the body of a method invalidates all class files that have been compiled against the method's class. Instead, only the method's class should be recompiled. Similarly, changing a resource file invalidates all class files that included that resource file in the compile classpath. Instead, resource files should be ignored when compiling.

    We don't necessarily need a full incremental Java compilation to improve this. For example, the Java compilation task may consider the API of the compile classpath - if it has changed, then compile all source files, and if it has not, skip the task (assuming everything else is up to date). This means that a change to a method body does not propagate through the dependency graph.



    第一次构建时出现 Stracktrace 错误(第二次构建成功):
    org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':examples:app:compileReleaseJavaWithJavac'.
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:69)
    at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:46)
    ...
    Caused by: org.gradle.api.internal.tasks.compile.CompilationFailedException: Compilation failed; see the compiler error output for details.
    at org.gradle.api.internal.tasks.compile.JdkJavaCompiler.execute(JdkJavaCompiler.java:48)

    也许 this warning , Java8annotations有关系。我希望这会有所帮助,我离开是因为我所做的任何更改都会使构建成功并且很难理解真正的问题。

    我配置了 Java 8 用法,如 this :
    android {
    ...
    defaultConfig {
    ...
    jackOptions {
    enabled true
    }
    }
    compileOptions {
    sourceCompatibility JavaVersion.VERSION_1_8
    targetCompatibility JavaVersion.VERSION_1_8
    }
    }

    上一个回复:

    尝试添加到您的 MainActivity.java使用您的真实包进行下一次导入:
    import your.package.R;

    由于以前的错误,R 文件未正确生成,如下所示:
    COMPILE-Error: package android.support.v7.app does not exist

    我刚刚测试了它。我在 linux 机器上下载了你的项目(这不是 travis-ci 问题)。

    我用下一行替换了依赖项,它可以工作:
    compile "com.android.support:appcompat-v7:25.0.0"

    所以我建议你添加 { } :
    compile "com.android.support:appcompat-v7:${project.supportLibVersion}"

    真的,我不确定,现在它总是在没有建议的更改的情况下工作。

    也许,它确实是关于并行选项问题并在第二次运行中工作,但我们已经接近了。

    关于android - 调试 gradle 任务 compileReleaseJavaWithJavac,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40299587/

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