我正在寻找一种以不同名称重新标记现有图像的方法(例如,我们发布版本 xyz,我们latests
也想标记 is)。目前我会这样做:
docker pull docker/my-app:123
docker tag docker/my-app:123 docker/my-app:latest
docker push docker/my-app:latest
Run Code Online (Sandbox Code Playgroud)
它适用于常规图像,但它会破坏多架构图像,并且仅标记/推送我当前计算机的架构。我知道我可以latest
向 buildx 添加标签(它允许多个--tag
参数),但我们也有这样的情况:我们有nightly
构建,并且为了(测试)部署目的,我们用更多静态标签(大多数时候带有日期)来标记它们,并在这种情况下buildx
多标签方法会中断。
(我知道有几个类似的问题,但它们是关于标记图像并推送到不同的存储库,并且经常建议使用 github.com/regclient/regclient 作为解决方案)
我想使用exec-maven-plugin来获取git'revision',所以我使用以下配置:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<executions>
<execution>
<id>gitVersion</id>
<phase>validate</phase>
<goals>
<goal>exec</goal>
</goals>
</execution>
</executions>
<configuration>
<executable>git</executable>
<workingDirectory>./</workingDirectory>
<arguments>
<argument>rev-list</argument>
<argument>master</argument>
<argument>--count</argument>
</arguments>
</configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)
但我遇到了一个问题 - 如何将输出分配给其他插件/ livecycles中的任何变量?
(我能够使用gmaven-plugin和执行groovy脚本完成它,但我发现它有点矫枉过正/不那么优雅)
编辑:供参考,groovy工作解决方案:
<plugin>
<groupId>org.codehaus.gmaven</groupId>
<artifactId>gmaven-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<phase>validate</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<providerSelection>2.0</providerSelection>
<properties>
<script>git rev-list master --count</script>
</properties>
<source>
def command = project.properties.script
def process = command.execute()
process.waitFor()
def describe = process.in.text.trim()
println "setting revision to: " + describe
project.properties.setProperty('gitVersion',describe)
</source>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud) (tl,dr 最后) 我们有一个生成自签名 SSL 证书的小方法,它显然依赖于sun.security.x509
. 目前我们仍在使用 JDK8 构建它,因此,即使代码库的其余部分(它只是一个小的、单一的库)是使用 JDK11 构建并使用 JVM11 运行的。
不幸的是,主 JDK 中没有替换,按照(并且CertificateFactory
几乎没有生成证书,与 javadoc 声明的相反......):
一种选择是使用 BouncyCastle,但这是我们真正不需要的额外 4MB,特别是对于这么小的任务,所以我正在考虑访问它的方法
从我所看到的,包和所需的类仍然是包,相关的类仍然存在(参见sun.security.x509
github但在构建它时(使用 maven)我得到错误:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project: Compilation failure: Compilation failure:
[ERROR] OldSelfSignedCertificateGenerator.java:[20,25] package sun.security.x509 does not exist
[ERROR] OldSelfSignedCertificateGenerator.java:[71,45] cannot find symbol
[ERROR] symbol: class X509CertInfo
[ERROR] location: class OldSelfSignedCertificateGenerator
Run Code Online (Sandbox Code Playgroud)
我正在搜索并添加:
<arg>--add-exports</arg><arg>java.base/sun.security.x509=ALL-UNNAMED</arg>
Run Code Online (Sandbox Code Playgroud)
到maven-compiler-plugin
它有点工作 - 我只是WARNING
不知道sun.security.x509
包:
[WARNING] OldSelfSignedCertificateGenerator.java:[20,25] sun.security.x509.AlgorithmId is internal …
Run Code Online (Sandbox Code Playgroud) 好的,我们有一个包含 3 个子模块的存储库。现在我们想将此子模块合并回主存储库,保留所有历史记录(好吧,使用子模块比有用更令人头疼)。我们该如何进行?
TL,博士;是否有本地 Java17 解决方案来生成自签名证书,无论是通过标准库(不太可能)还是通过一些轻量级库?
还有一个类似的问题(我问过Access `sun.security.x509` in JDK 11 without module?),因为从 JDK11 开始,对内部 JDK 包的访问受到限制,因此无法使用sun.security.x509
. 直到 JDK17 为止,都可以通过某些编译器配置来标记打开这些包来规避它。JDK17 改变了这一点,删除了该选项。
从我能够收集到的当前解决方案是:
keytool
java工具,但这有两个缺点:调用外部工具速度较慢,并且需要创建密钥库文件。目前(2)在我的用例中似乎更方便,但我很想找到第三个选项 - 本机、轻量级解决方案。
编辑:有 OpenJDK 问题:JDK-8058778:用于创建证书和证书请求的新 API,我希望有一天它会被实现......
背景:我们将当前项目版本设置为系统环境:
\n\n<plugin>\n <groupId>org.apache.maven.plugins</groupId>\n <artifactId>maven-surefire-plugin</artifactId>\n <version>2.19.1</version>\n <configuration>\n <forkMode>always</forkMode>\n <environmentVariables>\n <project.target>${project.build.outputDirectory}</project.target>\n <project.version>${project.version}</project.version>\n </environmentVariables>\n </configuration>\n</plugin>\n
Run Code Online (Sandbox Code Playgroud)\n\n然后我们在测试中使用该值System.getenv("project.version");
,这在除一台机器之外的所有机器\xe2\x80\xa6 上都运行良好。
有问题的机器是带有 Ubuntu 16.04 LTS 的新 AWS EC2 实例。设置和配置看起来没问题。我检查了 OpenJDK 和 OracleJDK 的最新版本,我还检查了包含的 java 和 maven 版本:
\n\n$ java -version\nopenjdk version "1.8.0_151"\nOpenJDK Runtime Environment (build 1.8.0_151-8u151-b12-0ubuntu0.16.04.2-b12)\nOpenJDK 64-Bit Server VM (build 25.151-b12, mixed mode)\n
Run Code Online (Sandbox Code Playgroud)\n\n行家
\n\n$ mvn -version\nApache Maven 3.3.9\nMaven home: /usr/share/maven\nJava version: 1.8.0_151, vendor: Oracle Corporation\nJava home: /usr/lib/jvm/java-8-openjdk-amd64/jre\nDefault locale: en_US, platform encoding: UTF-8\nOS name: "linux", version: "4.4.0-1049-aws", arch: "amd64", …
Run Code Online (Sandbox Code Playgroud) 在 XMPP(即 gtalk)中,我们可以将资源设置为我们想要的(指定机器/位置/等),这适用于所有/大多数服务器和客户端。但是在 google 的情况下,它并不完全按预期工作,因为每次用户连接 google 时,都会将随机字符串附加到用户设置的资源中。这尤其令人讨厌,因为许多客户端通过 jid 和资源部分来区分用户聊天,这会导致在重新连接(并生成新资源)后打开多个窗口/选项卡。
tl; dr - 有没有办法阻止谷歌将随机字符串附加到用户设置的资源中?
我有一些无法解释的行为java.util.logging
。让我们来看看这两个样本:
第一的:
boolean var = false;
log.log( Level.WARNING, "Cant {0}", new Object[] { var } );
Run Code Online (Sandbox Code Playgroud)
输出:
Cant false
Run Code Online (Sandbox Code Playgroud)
第二:
boolean var = false;
log.log( Level.WARNING, "Can't {0}", new Object[] { var } );
Run Code Online (Sandbox Code Playgroud)
输出:
不能{0}
为什么包含撇号 ( ' ) 会导致记录器不扩展令牌?
我有 java.util.logging 的问题。从一开始一切都很好,但过了一会儿,记录器只是停止将任何数据写入文件,我不知道为什么(没有例外,没有错误)也不知道如何找到这个问题的原因。
我试过谷歌,但没有发现任何类似的问题。
tl,博士; java.util.logging 停止工作,想知道为什么。
有没有办法以类似于NetBeans中的方式使Eclipse自动完成工作?我缺乏完成下一个公共部分(即键入"我",我得到建议消息,MessageArchive,MessageRouter所以'标签'将完成"消息")并自动建议"." (或"进入")当有后续可能性时.
微小的东西,但缺乏它们是非常令人沮丧的......