小编Luk*_*fer的帖子

Gradle 4.0不会在命令行中显示已执行的任务

当我gradle build从终端运行或任何其他gradle命令时,我无法看到最近执行的任务及其状态(例如:testClasses UP-TO-DATE),但仅限于BUILD SUCCESSFUL:

命令行中的行为

但是当我使用gradle插件从eclipse IDE运行build命令时,一切都很好:

Eclipse IDE中的行为

我正在使用Gradle 4.0.任何建议如何解决?

java terminal gradle

22
推荐指数
2
解决办法
4139
查看次数

TypeError:'builtin_function_or_method'对象不可订阅

elif( listb[0] == "-test"):
    run_all.set("testview")
    listb.pop[0]
Run Code Online (Sandbox Code Playgroud)

错误:Tkinter回调中的异常回溯(最近一次调用最后一次):文件"/tools/python/2.7.2/lib/python2.7/lib-tk/Tkinter.py",第1410行,在调用 return self.func中(*args)文件"./edit.py",第581行,填充listb.pop [0] TypeError:'builtin_function_or_method'对象不可订阅

第581行由上面代码中的最后一个pop语句表示.run_all是一个StringVar.

为什么我会收到此错误以及如何解决?

python tkinter typeerror

20
推荐指数
5
解决办法
17万
查看次数

并行无限 Java 流耗尽内存

我试图理解为什么下面的 Java 程序给出了OutOfMemoryError,而没有的相应程序没有.parallel()

System.out.println(Stream
    .iterate(1, i -> i+1)
    .parallel()
    .flatMap(n -> Stream.iterate(n, i -> i+n))
    .mapToInt(Integer::intValue)
    .limit(100_000_000)
    .sum()
);
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. 这个程序的预期输出是什么?

    没有.parallel()它似乎只是输出sum(1+2+3+...),这意味着它只是“卡在” flatMap 中的第一个流,这是有道理的。

    使用并行我不知道是否有预期的行为,但我的猜测是它以某种方式交错了第一个n左右的流,n并行工作人员的数量在哪里。根据分块/缓冲行为,它也可能略有不同。

  2. 是什么导致它耗尽内存?我特别想了解这些流是如何在幕后实现的。

    我猜有什么东西阻塞了流,所以它永远不会完成并且能够摆脱生成的值,但我不太清楚事物的评估顺序以及缓冲发生的位置。

编辑:如果相关,我使用的是 Java 11。

编辑 2:显然即使对于简单的程序也会发生同样的事情IntStream.iterate(1,i->i+1).limit(1000_000_000).parallel().sum(),所以它可能与limit而不是的懒惰有关flatMap

java out-of-memory lazy-evaluation java-stream

16
推荐指数
2
解决办法
1484
查看次数

未找到名称为"compileClasspath"的配置

当我迁移到com.android.tools.build:gradle:3.0.0-beta3Gradle 4.1时,我看到以下错误:

引起:org.gradle.api.artifacts.UnknownConfigurationException:找不到名为"compileClasspath"的配置.位于org.gradle.api.internal的org.gradle.api.internal.artifacts.configurations.DefaultConfigurationContainer.createNotFoundException(DefaultConfigurationContainer.java:123)org.gradle.api.internal.DefaultNamedDomainObjectCollection.getByName(DefaultNamedDomainObjectCollection.java:229)位于com.android.build.gradle.internal.LintGradleProject的org.gradle.api.internal.artifacts.configurations.DefaultConfigurationContainer.getByName(DefaultConfigurationContainer.java:48)中的.artifacts.configurations.DefaultConfigurationContainer.getByName(DefaultConfigurationContainer.java:113) $ ProjectSearch.getProject(LintGradleProject.java:884)at com.android.build.gradle.internal.LintGradleProject $ ProjectSearch.getProject(LintGradleProject.java:996)at com.android.build.gradle.internal.LintGradleProject $ ProjectSearch.getProject (LintGradleProject.java:785)位于com.android.tools.lint.LintCliClient.run(LintCli)的com.android.build.gradle.internal.LintGradleClient.createLintRequest(LintGradleClient.java:193)Client.java:151)com.android.build.gradle.internal.LintGradleClient.run(LintGradleClient.java:209)at com.android.build.gradle.tasks.Lint.runLint(Lint.java:365)at com .android.build.gradle.tasks.Lint.lintSingleVariant(Lint.java:335)


这是我的目录结构:

android-db
  /db
    /build.gradle
  settings.gradle
  /android-common
    build.gradle
    /common
        build.gradle
Run Code Online (Sandbox Code Playgroud)

android-db/db/build.gradle 如下:

buildscript {
    repositories {
        google()
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:3.0.0-beta3'
    }
}

apply plugin: 'com.android.library'

android {
    compileSdkVersion 25
    buildToolsVersion '25.0.3'

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    lintOptions {
        abortOnError false
    }
}

repositories {
    jcenter()
    maven …
Run Code Online (Sandbox Code Playgroud)

android gradle build.gradle android-gradle-plugin

12
推荐指数
2
解决办法
2625
查看次数

当源文件丢失时,复制任务不会失败(或记录)

我的复制任务复制多个源:

例如:

task initConfig(type: Copy) {
    from('src/main/config') {
        include '**/*.properties'
        include '**/*.xml'
        filter(ReplaceTokens, tokens: [version: '2.3.1'])
    }
    from('src/main/config') {
        exclude '**/*.properties', '**/*.xml'
    }
    from('src/main/languages') {
        rename 'EN_US_(.*)', '$1'
    }
    into 'build/target/config'
}
Run Code Online (Sandbox Code Playgroud)

当其中一个源不存在时,任务不会失败,也不会记录错误。

  1. 使用“inputs.sourceFiles.empty”作为解决方案仅适用于单个源:

    如果源目录不存在,则 Gradle 复制任务失败

  2. 对每个源使用断言...不是一个优雅的解决方案,因为我有很多源。

    assert file("bla bla").exists()

当其中一个来源丢失时,我如何才能使任务失败?

gradle build.gradle

9
推荐指数
0
解决办法
286
查看次数

runInTransaction 块中的挂起方法

使用以下代码时出现编译错误:

暂停函数只能在协程体内调用

有人可以向我解释为什么吗?我需要做什么才能使它工作(不使用@Transaction注释)?

override suspend fun replaceAccounts(newAccounts: List<Account>) {
    database.runInTransaction {
        database.accountDao().deleteAllAccounts() // I have the error on this line
        database.accountDao().insertAccounts(newAccounts) // Here too
    }
}

@Dao
abstract class AccountDao : BaseDao<AccountEntity> {

    @Query("DELETE FROM Account")
    abstract suspend fun deleteAllAccounts()

}
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助

android coroutine kotlin kotlin-coroutines

9
推荐指数
1
解决办法
949
查看次数

Java 8 GroupingBy进入Peek

我最近在Java 8中学习了流,并开始使用它们.现在我有一个关于groupingBy收集器方法的问题:

通常我使用.NET的工作,所以我比较(因为他们知道自己是一样的)的Java Stream<T>与.NET IEnumerable<T>.在此比较之后,List<T>存储元素和特定Stream/ IEnumerable应用操作.一个例子:

C#:

elements.Where(x => x.Value == 5).ToList();
Run Code Online (Sandbox Code Playgroud)

Java的:

elements.stream().filter(x -> x.getValue() == 5).collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

在这两个示例中,我从列表开始,定义操作(在此示例中为过滤器)并收集结果以存储它(在此示例中的新列表中).

现在我得到了一个更复杂的案例:

data.stream()
    .map( ... ).filter( ... ) // Some operations
    .collect(groupingBy(Chunk::getName, summingLong(Chunk::getValue)));
Run Code Online (Sandbox Code Playgroud)

这个查询的结果是a Map<String, Long>,我可以使用它,但是让我们说,我想继续使用这些数据而不是存储它.我目前的方法很简单:

    ...
    .collect(groupingBy(Chunk::getName, summingLong(Chunk::getValue)))
    .entrySet().stream().
    .map( ... ) // Do more operations
Run Code Online (Sandbox Code Playgroud)

但是这样,我离开了流,将第一个结果存储在Map中并打开一个新流继续.有没有一种方法可以在没有收藏家的情况下进行分组,这样我就可以"留在"流中?

java java-8 java-stream

8
推荐指数
2
解决办法
458
查看次数

task.withType()的文档在哪里?

Gradle是一个文档齐全的项目,但是当我搜索docs时tasks.withType(),我只会找到API docs

这不是Gradle的官方部分吗?

gradle

8
推荐指数
1
解决办法
5813
查看次数

属性“mainClass”是最终的,不能再更改

我最近为 Spring Boot 项目将 Gradle 从 4.x 升级到 6.6。我以为我终于把它全部启动并运行了,但后来意识到我们的一个应用程序可能启动两个不同配置的类型任务BootRun(例如 A 和 B),却无法启动第二个 B 实例。

这是我尝试运行第二个实例时出现的错误:

Build file 'C:\Users\...\build.gradle' line: 17

Execution failed for task ':apps:myapp:bootRunB'.
> The value for task ':apps:myapp:bootRunB' property 'mainClass' is final and cannot be changed any further.
Run Code Online (Sandbox Code Playgroud)

build.gradle这是我的文件中配置任务的部分:

task bootRunB(type: org.springframework.boot.gradle.tasks.run.BootRun, dependsOn: 'build') {
    group = 'Application'

    doFirst() {
        main = bootJar.mainClassName
        classpath = bootRun.classpath
        systemProperty '...'
    }
}
Run Code Online (Sandbox Code Playgroud)

任何建议,将不胜感激。

gradle build.gradle

8
推荐指数
1
解决办法
9266
查看次数

为什么编译器构建在某些情况下返回无法访问的代码

如果我写

private void check(){
   if(true)
      return;

   String a = "test";
}
Run Code Online (Sandbox Code Playgroud)

上面的代码工作正常,但如果我写

private void check(){
   return;

   String a = "test";
}
Run Code Online (Sandbox Code Playgroud)

Android Studio中的编译器/ gradle虽然它是相同的,但它不会让这个通过,并且它表示在示例2中返回后的代码无法访问.

我对此没有任何问题,但我很想知道为什么?

java android javac android-studio

7
推荐指数
1
解决办法
145
查看次数