如何移除 gradle 远程依赖中多余的 package

原文链接

The exclude method of the configuration closure for a dependency excludes transitive dependencies. So, if your module dependency depends on other modules, you can exclude them from your build. You can check out the transitive dependencies of the 'com.facebook.android:facebook-android-sdk:4.14.0' module on its Maven repository info page.

If the BundleJSONConverter class exists in a transitive dependency, you can exclude the specific module in the same way you are trying now. Just specify the group, the module and the version, like you do for dependencies.

If you just want to exclude one class for a dependency jar, take a look at the jar jar links tool and its Gradle plugin. It allows you to alter included jars, e.g. to change packages or remove classes.

The following (shortened) example shows the usage of the plugin and some methods to alter the dependency jar:


apply plugin: 'org.anarres.jarjar'

compile jarjar.repackage {
    from 'org.apache.hive:hive-exec:0.13.0.2.1.5.0-695'

    archiveBypass "commons*.jar"
    archiveExclude "slf4j*.jar"

    classDelete "org.apache.thrift.**"
    classRename 'org.json.**', 'org.anarres.hive.json.@1'
}

Gitlab Ci 的 CI_DEBUG_TRACE

这个东西的作用是在 GitlabCi 的日志输出界面输出更多用于方便调试的日志。

官方建议是写在 .gitlab.yml 上, 如下

variable:
    CI_DEBUG_TRACE: true

这样就会导致一个问题,每次当你想要调试的时候,你都要提交一个代码把这个东西打开,这样有点蛋疼。
后面我发现https://gitlab.com/{namespace}/{project}/-/settings/ci_cd 这个地方的也是可以设置Variable的。实验了以下,这个地方也是有效的,只要在这里

填上这个 CI_DEBUG_TRACE就能直接显示所有调试内容了,这样做就不需要每次都提交代码才能显示调试的内容。

这货有个小缺点,就是所有的 ci/cd 都会生效

Homebrew 安装软件后路径配置

所有 Homebrew 安装的软件其实都会在 /usr/local/opt/ 这个地方创建一个软应用,指向的都是当前命令使用的软件版本,比如我虽然安装了两个 git,一个24版本,一个26版本,命令行可以使用的是26版本 ,所以这个路径 /usr/local/opt/git/bin/git的版本就是 26 版本。
这种目录最常见用于配置 IDE 各种环境的路径,比如说 git

相较于以前直接配置到具体版本的路径上,每次升级都要改,这个要方便不少。

Docker Swarm Volume 问题记录

Docker Swarm 或者 Docker Compose 部署的容器有个问题,如果你使用的是 Docker 自动创建的 Volume ,也就是这种方式

version: '3'

services:
  caddy:
    image: jayfong/caddy-dnspod
    environment:
    volumes:
      # Caddy 自动生成的 SSL 证书
      - certs:/caddy/certs
    ports:
      - 2015:2015
    restart: unless-stopped
volumes:
  certs:

这个 Volume 最终的名字是 caddy-home_cert ,因为我指定的 docker stack 名字为 caddy-home, 如果你下次更新,就必须要指定一样的名字,不然是不能到达一样的文件目录的。如果确实不能弄成一样的名字,又不想挪动文件,其实还是有办法的,可以尝试这样写

volumes:
  certs:
    external: true

这样 docker 就不会尝试创建 certs 了 ,但是注意的是,这个东西需要提前创建好,不然是会服务部署失败的