当我gradle build
从终端运行或任何其他gradle命令时,我无法看到最近执行的任务及其状态(例如:testClasses UP-TO-DATE
),但仅限于BUILD SUCCESSFUL
:
但是当我使用gradle插件从eclipse IDE运行build命令时,一切都很好:
我正在使用Gradle 4.0.任何建议如何解决?
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.
为什么我会收到此错误以及如何解决?
我试图理解为什么下面的 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)
我有两个问题:
这个程序的预期输出是什么?
没有.parallel()
它似乎只是输出sum(1+2+3+...)
,这意味着它只是“卡在” flatMap 中的第一个流,这是有道理的。
使用并行我不知道是否有预期的行为,但我的猜测是它以某种方式交错了第一个n
左右的流,n
并行工作人员的数量在哪里。根据分块/缓冲行为,它也可能略有不同。
是什么导致它耗尽内存?我特别想了解这些流是如何在幕后实现的。
我猜有什么东西阻塞了流,所以它永远不会完成并且能够摆脱生成的值,但我不太清楚事物的评估顺序以及缓冲发生的位置。
编辑:如果相关,我使用的是 Java 11。
编辑 2:显然即使对于简单的程序也会发生同样的事情IntStream.iterate(1,i->i+1).limit(1000_000_000).parallel().sum()
,所以它可能与limit
而不是的懒惰有关flatMap
。
当我迁移到com.android.tools.build:gradle:3.0.0-beta3
Gradle 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) 我的复制任务复制多个源:
例如:
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)
当其中一个源不存在时,任务不会失败,也不会记录错误。
使用“inputs.sourceFiles.empty”作为解决方案仅适用于单个源:
对每个源使用断言...不是一个优雅的解决方案,因为我有很多源。
assert file("bla bla").exists()
当其中一个来源丢失时,我如何才能使任务失败?
使用以下代码时出现编译错误:
暂停函数只能在协程体内调用
有人可以向我解释为什么吗?我需要做什么才能使它工作(不使用@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)
在此先感谢您的帮助
我最近在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中并打开一个新流继续.有没有一种方法可以在没有收藏家的情况下进行分组,这样我就可以"留在"流中?
Gradle是一个文档齐全的项目,但是当我搜索docs时tasks.withType()
,我只会找到API docs。
这不是Gradle的官方部分吗?
我最近为 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)
任何建议,将不胜感激。
如果我写
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中返回后的代码无法访问.
我对此没有任何问题,但我很想知道为什么?