如何正确设置阿里云 Maven 代理

之前我是这样设置的

initscript {
    repositories {
        maven{ url "https://maven.aliyun.com/repository/public"}
    }

}



allprojects {
    repositories {
        maven{ url  "https://maven.aliyun.com/repository/public"}
    }
}

后来看了官网描述,public 只是包含 centraljcenter, google 是不包含的,所以 Google 相关的我总是下载失败,我改为了下面这样

initscript {
    repositories {
        maven{ url "https://maven.aliyun.com/repository/public"}
        maven{ url  "https://maven.aliyun.com/repository/google"}
        maven{ url  "https://maven.aliyun.com/repository/gradle-plugin"}
    }

}



allprojects {
    repositories {
        maven{ url  "https://maven.aliyun.com/repository/public"}
        maven{ url  "https://maven.aliyun.com/repository/google"}
    }
}


这个文件为 init.gradle 需要放在 用户/.gradle 目录下,linux 就是 ~/.gradle

如何移除 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'
}

升级到 AngularCli9 后 ngx/cache 不能运行问题

关键字

"Can't resolve all parameters for MemoryCacheService"
"Can't resolve all parameters for LocalStorageService"

问题描述

升级到 AngularCli 9 之后 ngx-cache 模块加入后,运行会出现上述问题

解决方案

注入方式由

{ provide: CACHE, useClass: (MemoryCacheService) }

改为

{ provide: CACHE, useClass: (MemoryCacheService), deps: [PLATFORM_ID] }

其实就是增加了 PLATFORM_ID 作为参数

详情在 Angular 9 + Ivy #128

Portainer 添加 endPoint

portainer 添加 endpoint 有两种方式

  • 直接连接到对应的 portainer agent
  • 使用 edge agent 代理连接

直连模式

使用这个模式,需要机器有公开的 9000 端口(非9000也可以,自己改),然后 portainer 会直接尝试连接机器上的 portainer agent
这个模式下,可以获得 portainer 所有功能

代理模式


这个模式下,是在机器上部署一个 edge 代理,然后这个代理自己连接到 portainer 上。这个模式就不需要机器公开任何接口,会方便不少。
但是目前发现一个功能不能使用,就是下图中的 ServiceHook

这个功能对于 ci/cd 继承自动化发布来说很好用,要是用不到可以无视。

注意点

建议都使用 swarm 模式,不然 stack 只能支持到 version 2 版本,conf 和 serect 功能也不能使用。

小结

优先使用 agent 模式,如果不能暴露端口,比如家里网络,就要使用 edge agent 模式

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 了 ,但是注意的是,这个东西需要提前创建好,不然是会服务部署失败的