在Ruby中,您可以rescue在分配结束时编写一个代码来捕获可能出现的任何错误.我有一个函数(下面a_function_that_may_fail:),如果不满足某些条件,它会让它抛出一个错误.以下代码运行良好
post = {}
# Other Hash stuff
post['Caption'] = a_function_that_may_fail rescue nil
Run Code Online (Sandbox Code Playgroud)
但是如果函数失败,我想发帖['Caption']甚至没有设置.
我知道我能做到:
begin
post['Caption'] = a_function_that_may_fail
rescue
end
Run Code Online (Sandbox Code Playgroud)
但感觉有点过分 - 是否有更简单的解决方案?
这基本上将这个问题扩展到 Kotlin DSL 而不是 Groovy DSL:
如何在Groovy的DSL解决方案的
if (hasProperty('buildScan')) {
buildScan {
termsOfServiceUrl = 'https://gradle.com/terms-of-service'
termsOfServiceAgree = 'yes'
}
}
Run Code Online (Sandbox Code Playgroud)
转换为 Kotlin DSL?
我正在运行的问题是“buildScan”扩展或com.gradle.scan.plugin.BuildScanExtension类不能静态使用,因为它们存在或不存在取决于--scan命令行参数是否提供给 Gradle。
我试过了
if (hasProperty("buildScan")) {
extensions.configure("buildScan") {
termsOfServiceUrl = "https://gradle.com/terms-of-service"
termsOfServiceAgree = "yes"
}
}
Run Code Online (Sandbox Code Playgroud)
但正如预期的那样termsOfServiceUrl并termsOfServiceAgree没有解决,但是我不知道在这里使用什么语法。
我想在树对象上附上一个注释.但是,为了做到这一点,我首先需要知道树对象的哈希值.对于作为我的存储库一部分的给定目录名,如何获取其所属的树对象的哈希以便为其附加注释?
从阅读这个答案我知道我可以使用
git cat-file -p master^{tree}
Run Code Online (Sandbox Code Playgroud)
列出根树的内容,但我仍然需要grep目录名的输出,并递归地遵循嵌套的树对象来获取树对象的层次结构中较深层目录的哈希值.
基本上,我正在寻找虚构get-tree-hash.sh脚本的实现.如果被称为
get-tree-hash.sh path/to/directory/in/my/git/repo
Run Code Online (Sandbox Code Playgroud)
它应该输出
The hash for the "repo" tree inside "path/to/directory/in/my/git" is:
92a68a2f5560fa7080393b633e2afd1d5271deef
Run Code Online (Sandbox Code Playgroud) 人们经常需要安装预先构建的常见Python库二进制文件.尽管PIP很棒,但它通常无法构建二进制文件,因为许多这些二进制文件依赖于其他库存在.
是否有PIP等效项可以从非官方的Python存储库下载和安装预构建的二进制文件,用于库的Windows二进制文件.
使用Ant编译我的应用程序时,我可以看到详细的Proguard输出,并且我已经设置了删除日志语句(见下文),但是当我运行发行版apk时,我试图删除的所有日志语句都在那里.
我有2个项目,每个项目都包含一个共同的项目.2个主项目和公共项目都有一个proguard.cfg文件,所有这些文件都包含删除日志语句的代码段.
有什么东西我错过了吗?
**我的所有日志语句都是Log.d(...)
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-dontobfuscate
-forceprocessing
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * { …Run Code Online (Sandbox Code Playgroud) 我的应用程序中有多个类提供public static void main(String[] args)方法.这些方法仅在开发/测试期间需要,我希望ProGuard删除它们(但只有这些方法,而不是整个周围的类).我试过使用-assumenosideeffects,但这似乎只影响对方法的调用,而不是方法本身.我怎样才能强迫Proguard移除整个main()方法,尽管它们public和static?
我有一个 Jenkins 管道,用于 Docker 容器中的 PHP 项目。这是我的 Jenkinsfile:
pipeline {
agent any
stages {
stage('Build') {
agent any
steps {
sh 'docker-compose up -d'
sh 'docker exec symfony composer install'
}
}
stage('Test') {
steps {
sh 'docker exec symfony php ./bin/phpunit --coverage-clover=\'reports/coverage/coverage.xml\' --coverage-html=\'reports/coverage\' --coverage-crap4j=\'reports/crap4j.xml\''
}
}
stage('Coverage') {
steps {
step([$class: 'CloverPublisher', cloverReportDir: '/reports/coverage', cloverReportFileName: 'coverage.xml'])
}
}
}
post {
cleanup {
sh 'docker-compose down -v'
cleanWs()
}
}
}
Run Code Online (Sandbox Code Playgroud)
运行管道后,该var/lib/jenkins/workspace文件夹包含 4 个文件夹(假设我的项目名称是Foo):
使用 Windows 10 Pro 64 位,我发现了一个很好的命令来列出 Git 历史记录,将HEAD、分支和标签显示为醒目的颜色。好的!
git log --oneline --decorate --graph --all
Run Code Online (Sandbox Code Playgroud)
但我没有看到任何日期或作者!所以我找到了另一个不错的命令:
git log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short
Run Code Online (Sandbox Code Playgroud)
也非常好——现在我可以看到日期和作者。但所有漂亮的颜色都消失了(除了图表)。HEAD、分支和标签的颜色都与日志的其余部分相同,因此很难将它们挑选出来。
如何在保留日期和作者的同时获取提交指针的颜色?
我正在每晚在服务器上从Gradle签出存储库并建立它们的服务器上构建gradle,但是,有一个代理,gradle无法下载任何存储库。我尝试运行gradlew离线模式,然后收到一条错误消息,告诉我
“没有缓存版本的”,然后是依赖项的名称。
显然,这是因为我从未下载过依赖项,而是在考虑手动下载依赖项对它们进行缓存,并在构建可以访问它的服务器上使用gradle缓存。我的问题如下:
有任何想法吗?
在build.gradle文件内部,获取所有包列表的最简洁方法是SourceSet什么?
我可以通过解析每个源文件来获得它,如下所示 -
def sourceSet = project.sourceSets.findByName('test')
def pattern = Pattern.compile('package (\\S+);')
def packages = []
sourceSet.allSource.each {
for (def scan = new Scanner(it); scan.hasNext();) {
def matcher = scan.nextLine() =~ pattern
if (matcher.matches()) {
packages << matcher[0][1]
break
}
}
}
packages.unique(true)
// allows, e.g.
packages.each { println it }
Run Code Online (Sandbox Code Playgroud)
- 但似乎应该有更好的方法.
编辑添加:我需要这些信息,以便在编译时将其他参数传递给JVM,因此我需要在编译之前从源代码中获取它.