是否有一个工具可以让我在build.gradle文件中设置断点并在调试器中逐步执行任务?
注意:我认为我提出的问题与关于调试Gradle插件的类似stackoverflow问题不同,其中(可能)的目的是逐步执行位于单独文件中的自定义Groovy或Java插件代码.我想在一个简单的build.gradle文件中的Gradle任务中设置一个断点,比如......
task example {
println "I want to set a breakpoint here"
}
Run Code Online (Sandbox Code Playgroud)
...所以当我运行时,gradle example
我可以在调试器中检查上下文.
(对于那些指向IntelliJ的人来说......虽然JetBrains的网站宣称他们支持在IDEA UI中调试Gradle脚本,但AFAICT这是不真实的,因为IDEA13 EAP报告已经破坏了这一点,并且在IDEA14中尚未修复.在Intellij/Android Studio中调试Gradle构建文件)
是否有任何调试工具允许我在build.gradle文件中设置断点,或者是否有一些关于Gradle DSL的内容使得从根本上不可能在上面的例子中设置断点?
有没有办法创建一个.tar
文件,省略其文件/目录的atime/ctime/mtime值?
我们在构建过程中有一个步骤,它生成一个工件目录,该目录被打包到tarfile中.我们希望构建步骤是幂等的 - 给定相同的输入,它每次产生完全相同的文件/输出.
理想情况下,我们还希望在干净的构建中使用逐位幂等的步骤,以便我们可以使用连续构建的哈希来检查没有任何更改.但是因为tar文件包含每个条目的时间戳(atime/ctime/mtime),所以由该构建步骤创建的tar文件永远不会与上一次运行相同,即使存档中每个文件的内容都是按位相同的.
有没有办法生成一个省略其条目的时间戳的tarfile,以便生成存档的步骤可以是按位幂等的?(我们希望利用tar
保留的其他文件元数据,例如文件模式位和符号链接.)
我可以下载最新的Artifactory OSS版本(5.2.1),但我似乎无法找到它的源代码.
Artifactory文档链接到https://api.bintray.com/content/jfrog/artifactory/jfrog-artifactory-oss-$latest-sources.tar.gz;bt_package=jfrog-artifactory-oss-zip,但没有来源在那个地址.
有谁知道真正的URL是什么,或者是否有可以克隆的公共svn或git repo?
我有经典的"Elvis运算符"案例,我在这里调用方法,每个方法都可以返回null并将它们链接在一起:
thing?:nullableMethod1(a)?:nullableMethod2(b)?:nullableMethod3()
Run Code Online (Sandbox Code Playgroud)
在Java 8中,我发现的最忠实的实现是这样的:
return Optional.ofNullable(thing)
.flatMap(x -> Optional.ofNullable(x.nullableMethod1(a)))
.flatMap(y -> Optional.ofNullable(y.nullableMethod2(b)))
.flatMap(z -> Optional.ofNullable(z.nullableMethod3()))
Run Code Online (Sandbox Code Playgroud)
我希望Java Optional
有类似于elvis运算符的东西:
public<U> Optional<U> elvisOperator(Function<? super T, ? extends U> mapper) {
return flatMap(t -> Optional.ofNullable(mapper.apply(t));
}
Run Code Online (Sandbox Code Playgroud)
这样我就不必包装每个返回值:
return Optional.ofNullable(thing)
.elvisOperator(x -> x.nullableMethod1(a))
.elvisOperator(y -> y.nullableMethod2(b))
.elvisOperator(Z::nullableMethod3); // also nice
Run Code Online (Sandbox Code Playgroud)
在Java 8中实现Elvis运算符模式是否有更高效和惯用的方法?
背景:我正在对通过多层间接启动的Java应用程序进行一些性能测试,这样我就不能完全确定应用程序是否会使用我认为的标志启动.我希望我的应用程序包括一个健全性检查(在它开始性能测试之前)并在结果中(在测试之后)包含有关如何调整JVM的信息,例如:
-Xint
还是-Xmixed
模式?-XX:ParallelGCThreads
设置 - 如果是,如果是,如果没有,这个构建的默认值是什么?-XX:UseCompressedOops
开启或关闭?有没有办法让Java代码(在正在运行的JVM中)查询用于包含JVM的实际选项?(假设我看不到启动我的命令行,所以我无法重新解析那些标志.)
如果没有通用的方法来确定这一点,那么也欢迎特定于特定JVM实现的答案.
更新:
对于解决方案而言,重要的是能够知道命令行中未明确提供的任何值的默认值.否则,它将涉及很多(容易出错的)腿部工作,以查找给定组合JVM /平台/版本/体系结构的默认值.我正在测试各种各样的JVM,所以我不想手动找出每个jvm版本中每个参数的默认设置.
我正在为一些同事编写一个脚本,用于他们的Git存储库,我对如何可靠地找到repo工作树的根目录感到困惑:
通常,如果当前目录位于工作树内,则命令...
git rev-parse --git-dir
git rev-parse --show-toplevel
Run Code Online (Sandbox Code Playgroud)
...将分别返回.git
目录和工作树的根.然而,如果当前目录恰好是里面一个.git
目录,那么只有第一个命令的作品.该命令git rev-parse --show-toplevel
不显示工作树的顶层(至少,不适合我,在Linux上使用git 1.8.4.4).
假设git rev-parse --is-bare-repository
的回报false
,我通常会猜的父目录git rev-parse --git-dir
或者是工作目录(或地方工作目录内),但如果用户GIT_DIR
设置该.git
目录不是工作目录里面,这是行不通的.(例如,当用户使用子模块时,他们的GIT_DIR可能不在他们的工作树中.)
我发现令人困惑的是,当在a内运行时GIT_DIR
,git rev-parse --show-toplevel
不会输出任何错误消息并返回0:
$ cd $(git rev-parse --git-dir); git rev-parse --show-toplevel ; echo $?
0
Run Code Online (Sandbox Code Playgroud)
而在某个地方运行相同的命令显然不是git存储库会返回错误代码:
$ cd /; git rev-parse --show-toplevel ; echo $?
fatal: Not a git repository (or any of the parent directories): .git
128
Run Code Online (Sandbox Code Playgroud)
如果有一种方法可以找到工作树 …
维护对异常的引用以供以后使用是否合理,或者是否存在使异常引用持续时间远远超过throw/catch交互的缺陷?
例如,给定代码:
class Thing {
private MyException lastException = ...;
synchronized void doSomethingOrReportProblem() {
try {
doSomething();
} catch (MyException e) {
if (seemsLikeADifferentProblem(e, lastException)) {
reportProblem(e);
}
lastException = e;
}
}
}
Run Code Online (Sandbox Code Playgroud)
假设我的程序在JVM中创建了一个具有生命周期的东西,那么Thing是否存在与lastException保持延迟引用有关的任何正确性问题?在JDK7中,这一切都发生了变化吗?(在OpenJDK7中查看Throwable的源代码,看起来有一个新的四参数公共构造函数不在JDK6中,可以在构造时不创建一个Throwable而不调用fillInStackTrace().)
如果MyException下的任何链接异常都引用了对象,是的,这会阻止那些对象被垃圾收集,但假设我没关系,是否有任何陷阱需要注意?
根据主题,是否有一个标准的Python 2.7库调用,我可以这样使用:
(returncode, stdout, stderr) = invoke_subprocess(args, stdin)
Run Code Online (Sandbox Code Playgroud)
问题是我想要所有三种形式的输出:返回代码和stdout和stderr的整个(和单独的)内容.我希望在子进程模块中找到类似的东西,但是我能看到的最接近的是subprocess.check_output
,它给出了三分之二(returncode和stdout).
堆栈溢出还有其他一些问题,建议将stder输入stdout,但我需要将它们分开,因为我正在使用Python来驱动某些非Python应用程序的测试,我试图区分哪些输出显示在哪些流上.例如,我想验证人类可读的错误消息是否显示在stderr中,但是只有机器可解析的输出数据显示在stdout上.
我想我想要的是一个简单的四线...
def method(args, input):
from subprocess import Popen, PIPE
p = Popen(args, stdin=PIPE, stdout=PIPE, stderr=PIPE)
out, err = p.communicate(input)
return (p.poll(), out, err)
Run Code Online (Sandbox Code Playgroud)
...所以我有点惊讶的是,由于模块中大部分与此类似的其他方法的数量,还没有这样的方法subprocess
.它是否存在而我是否缺少它,或者它存在于某些其他标准Python 2.7模块中的哪个位置?或者有一个微妙的原因,为什么这样的方法是一个坏主意?
我想创建一些利用Pattern.COMMENTS标志的Scala代码使用的相当复杂的正则表达式?我想做一些模糊的事情:
val regex = """my
(complex|hideous) # either is appropriate
pattern
(might)? # optional
look like this
""".r
Run Code Online (Sandbox Code Playgroud)
(在.r
字符串的末尾给了我所有斯卡拉的Regex
善良)
不幸的是,使用.r
并没有给我任何方式告诉正则表达式使用java.util.regex.Pattern.COMMENTS
.有没有办法创建一个scala.util.matching.Regex
编译其源字符串并打开注释?
java ×3
archive ×1
artifactory ×1
build ×1
comments ×1
debugging ×1
exception ×1
git ×1
gradle ×1
java-8 ×1
jvm ×1
open-source ×1
optional ×1
python ×1
python-2.7 ×1
regex ×1
scala ×1
subprocess ×1
tar ×1
timestamp ×1