task startSession << {
chant()
}
def chant() {
ant.echo(message: 'Repeat after me...')
}
3.times {
task "yayGradle$it" << {
println 'Gradle rocks'
}
}
yayGradle0.dependsOn startSession
yayGradle2.dependsOn yayGradle1, yayGradle0
task groupTherapy(dependsOn: yayGradle2)
Run Code Online (Sandbox Code Playgroud)
在我的脚本中,我有startSession任务,groupTherapy任务和三个动态生成的任务yayGradle0-3.当我执行时:
gradle tasks
Run Code Online (Sandbox Code Playgroud)
部分输出是:
Other tasks
-----------
groupTherapy
Run Code Online (Sandbox Code Playgroud)
其他任务在哪里?如果我使用参数执行上面的命令,--all
它们是可见的,但不是作为独立任务,而是依赖于groupTherapy.例如,为什么Gradle不将任务startSession显示为单独的任务?
嗨,我的buildSrc目录中有两个独立的项目,让它们分别命名为1和2。我在buildSrc目录中添加build.gradle和settings.gradle文件,并在其中写入: settings.gradle
include \
"one",
"two"
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用此项目提供的某些插件时,Gradle说找不到此导入。我搜索了类似的问题,发现我必须在buildSrc中的build.gradle文件中编写:
dependencies {
runtime subprojects.collect { owner.project(it.path) }
}
Run Code Online (Sandbox Code Playgroud)
这行是什么意思?为什么还要添加它?BuildSrc在类路径上自动添加已编译的类,否则我错了吗?
让我们有这种结构
我在subproject1中如何编写我的settings.gradle文件以包含subproject1和subproject2作为根Project的子项目.我的settings.gradle文件在主目录中?
我试过了:
include 'root:subproject1', 'root:subproject2'
Run Code Online (Sandbox Code Playgroud)
但什么都没发生.
来自Gradle doc:
如果从没有settings.gradle文件的项目中执行Gradle,Gradle将执行以下操作:
对于创建Gradle的自定义任务类,我们将使用哪种语言 - Java还是Groovy?
例如,如果我想创建GreetingTask.groovy或GreetingTask.java?如果有任何考虑更喜欢一个 - 性能或其他?
如果我有这个代码.
public class Test{
{
class People {
}
}
public static void main(String[] args) {
People person = new People();//Compile ERROR
}
}
Run Code Online (Sandbox Code Playgroud)
我无法创建People的实例.
这是否意味着Initializer Block不能用于定义类?
我遇到了这段代码:
int a = 1;
int k = ++a + a++ + + 1;
System.out.println(k);
Run Code Online (Sandbox Code Playgroud)
我认为编译器会给出错误,但结果是5?最后一个'+'(加号)符号的目的是什么?是否标志1不是负面或是?为什么Java允许这个作为有效的声明?
嗨,我有这个例子:
(1)
if(false && false ||true){
System.out.println("a");
}
Run Code Online (Sandbox Code Playgroud)
结果:
a
Run Code Online (Sandbox Code Playgroud)
和
(2)
if(false && false | true){
System.out.println("a");
}
Run Code Online (Sandbox Code Playgroud)
结果:
(empty)
Run Code Online (Sandbox Code Playgroud)
在情况(1)中我们有短路OR,但在第二种情况下我们有长电路OR.行为的差异从哪里来?我知道表达式从左到右进行评估,AND的优先级高于OR,所以我无法弄清楚为什么在情况2中会发生这种情况?
我想知道是谁/什么触发了Java中原始类型的初始化,例如:
public class A {
int primitive;
String nonPrimitive;
public static void main(String[] args) {
A newObject = new A();
}
}
Run Code Online (Sandbox Code Playgroud)
因此,当我们创建新实例时A
,A
会调用类的默认构造函数.String扩展了Object,因此调用了Object的构造函数并nonPrimitive
创建了var并且具有null值.
但原始变量的情况如何?如果它由VM直接初始化,默认值为0,如果创建新的newObject
触发它?或者它是在创建之前创建的 newObject
?
这段代码有点愚蠢,但它完全代表了问题。这两个地图不同,但始终返回 true 。为什么会这样?
class SampleTest {
private static boolean compare() {
def a = [a:'one',b:'two']
def b = [c:'three',d:'four']
if(a.size()!=b.size()) {
return false
}
a.each {
if(!a.equals(b)){
return false
}
}
return true
}
static main(args) {
println SampleTest.compare()
}
}
Run Code Online (Sandbox Code Playgroud)
如果我添加额外的变量,那么一切正常:
class SampleTest {
private static boolean compareArtifact() {
boolean areEqual = true
def a = [a:'one',b:'two']
def b = [c:'three',d:'four']
if(a.size()!=b.size()) {
return false
}
a.each {
if(!a.equals(b)){
areEqual = false
}
}
areEqual
}
static main(args) { …
Run Code Online (Sandbox Code Playgroud) 嗨,如果我想定义双重文字,我写道:
(1) double a = 12.0;
Run Code Online (Sandbox Code Playgroud)
但是当我在小数点后没有定义 double 时,例如
(2) double b=12;
Run Code Online (Sandbox Code Playgroud)
使用更容易接受吗
(3) double c=12d;
Run Code Online (Sandbox Code Playgroud)
反而?
据我所知(1)是最好的方法,如果我可以问你下一个更好的方法来声明双重文字,这将是你的选择,为什么?