小编Mic*_*lot的帖子

如何调试Gradle build.gradle文件(在调试器中,带断点)?

是否有一个工具可以让我在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的内容使得从根本上不可能在上面的例子中设置断点?

debugging gradle

53
推荐指数
4
解决办法
4万
查看次数

如何创建一个省略其内容时间戳的tar文件?

有没有办法创建一个.tar文件,省略其文件/目录的atime/ctime/mtime值?

我们为什么要这样做?

我们在构建过程中有一个步骤,它生成一个工件目录,该目录被打包到tarfile中.我们希望构建步骤是幂等的 - 给定相同的输入,它每次产生完全相同的文件/输出.

理想情况下,我们还希望在干净的构建中使用逐位幂等的步骤,以便我们可以使用连续构建的哈希来检查没有任何更改.但是因为tar文件包含每个条目的时间戳(atime/ctime/mtime),所以由该构建步骤创建的tar文件永远不会与上一次运行相同,即使存档每个文件的内容都是按位相同的.

有没有办法生成一个省略其条目的时间戳的tarfile,以便生成存档的步骤可以是按位幂等的?(我们希望利用tar保留的其他文件元数据,例如文件模式位和符号链接.)

timestamp build tar archive

13
推荐指数
2
解决办法
6063
查看次数

Artifactory OSS源代码位于何处?

我可以下载最新的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?

open-source artifactory

11
推荐指数
1
解决办法
2903
查看次数

如何在Java 8中实现Elvis运算符?

我有经典的"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 functional-programming optional java-8

11
推荐指数
2
解决办法
3734
查看次数

在正在运行的JVM中,如何以编程方式确定启动时使用的jvm选项?

背景:我正在对通过多层间接启动的Java应用程序进行一些性能测试,这样我就不能完全确定应用程序是否会使用我认为的标志启动.我希望我的应用程序包括一个健全性检查(在它开始性能测试之前)并在结果中(在测试之后)包含有关如何调整JVM的信息,例如:

  • 使用了哪个垃圾收集器?
  • 是/它是否正在积极进行cpu性能分析?
  • 是/是否记录了gc活动?
  • 是/是它-Xint还是-Xmixed模式?
  • 是/已-XX:ParallelGCThreads设置 - 如果是,如果是,如果没有,这个构建的默认值是什么?
  • 是/正在-XX:UseCompressedOops开启或关闭?
  • 等等

有没有办法让Java代码(在正在运行的JVM中)查询用于包含JVM的实际选项?(假设我看不到启动我的命令行,所以我无法重新解析那些标志.)

如果没有通用的方法来确定这一点,那么也欢迎特定于特定JVM实现的答案.

更新:

对于解决方案而言,重要的是能够知道命令行中未明确提供的任何值的默认值.否则,它将涉及很多(容易出错的)腿部工作,以查找给定组合JVM /平台/版本/体系结构的默认值.我正在测试各种各样的JVM,所以我不想手动找出每个jvm版本中每个参数的默认设置.

java jvm jvm-arguments

9
推荐指数
3
解决办法
2786
查看次数

有没有办法找到Git仓库的工作树,给出它的.git目录?

我正在为一些同事编写一个脚本,用于他们的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)

如果有一种方法可以找到工作树 …

git

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

期望java异常的合理寿命是多少?

维护对异常的引用以供以后使用是否合理,或者是否存在使异常引用持续时间远远超过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下的任何链接异常都引用了对象,是的,这会阻止那些对象被垃圾收集,但假设我没关系,是否有任何陷阱需要注意?

java exception

6
推荐指数
1
解决办法
118
查看次数

是否有类似Python子流程的调用,它接受stdin输入字符串并返回stderr,stdout和返回代码?

根据主题,是否有一个标准的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模块中的哪个位置?或者有一个微妙的原因,为什么这样的方法是一个坏主意?

python subprocess python-2.7

5
推荐指数
1
解决办法
169
查看次数

如何创建使用Java Pattern.COMMENTS编译的Scala Regex?

我想创建一些利用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编译其源字符串并打开注释?

regex comments scala

3
推荐指数
1
解决办法
645
查看次数