我第一次为 SonarCloud 构建了一个包含 X 个模块的 maven 项目。该sonar.projectKey
值需要是唯一的,因此我将其设置为${project.groupId}:{$project.artifactId}
,以便每个模块生成它。之后,运行 CI,这是响应消息:
[ERROR] Failed to execute goal org.sonarsource.scanner.maven:sonar-maven-plugin:3.7.0.1746:sonar (default-cli) on project ${project.groupId}:${project.artifactId}: Could not find a default branch to fall back on. -> [Help 1]
Run Code Online (Sandbox Code Playgroud)
我怀疑这是因为我没有在我的“组织”上用那个键创建一个项目,但问题是我有多个模块。事实上,我有X个。我还应该为每个要扫描的模块创建一个项目吗?sonarqube 插件不应该处理吗?
假设我使用以下标志为我的 JVM 配置了连续飞行记录
java
-XX:StartFlightRecording=disk=false,dumponexit=true
-XX:FlightRecorderOptions=memorysize=200m
-jar
....
Run Code Online (Sandbox Code Playgroud)
据我了解,此配置在内存中存储最多 200mb 的热点事件,当达到限制时会丢弃最旧的事件。
为了转储记录,我正在使用JFR.dump
命令 via jcmd
。还有一种通过任务控制提取记录的替代方法,但由于其中存在错误,我无法成功提取在任务控制的 JVM 外部运行的记录。令人惊讶的是,MBean 服务器管理运行良好。
无论如何,我发现可以通过任务控制的“转储”功能指定从连续记录转储的时间间隔范围,例如从 2021-01-01 13:00:00 到 2021-01-01 14:00: 00. 假设当前时间为 2021-01-02 17:00:00。如何通过 指定相同的间隔JFR.dump
?查看JFR.dump参考,没有任何标志可以执行此操作。那么任务控制中心是如何做到这一点的呢?
注意:我使用的是 JMC 8 和 Oracle JDK 11 0 10u8。
一段时间以来,我一直在从事模块化项目,但由于受到文件名和自动模块的限制,我从未有机会使用 jlink 工具来生成可重新分发的应用程序映像。今天,我选择启动一个独立的项目,该项目不导入任何外部依赖项,以防止使用兼容模式。该项目由 3 个模块组成,并且位于 Maven 中,因此我只会发布我正在使用的 jlink 命令片段。
参考项目:https://gitlab.com/Dragas/edu-day-demo,查看modules-full
标签。项目是用package
目标是防止污染您的本地 .m2 存储库。项目已经配置为拉取依赖项,因此打包和部署会更容易。
我用来生成jlinked图像的命令如下:
jlink \
--module-path edu-day-runtime/target/dependency/:edu-day-runtime/target/ \
--add-modules ALL-MODULE-PATH \
--output edu-day-jlinked \
--launcher edurun=edu.day.runtime
Run Code Online (Sandbox Code Playgroud)
调用该命令确实会生成一个 jlinked 映像,其中包含运行该项目所需的最低模块、java 库和 JVM 二进制文件。调用构建镜像的机器
edu-day-jlinked/bin/edurun 1 1
Run Code Online (Sandbox Code Playgroud)
运行项目并输出以下内容
Result of sum is 2
Run Code Online (Sandbox Code Playgroud)
同时,尝试在容器化环境中运行相同的内容(这里我使用bash:5
非java映像来模拟未安装java的环境)不会产生类似的结果。相反,shell 似乎没有找到名为的二进制文件java
docker run -it -v "$(pwd)/edu-day-jlinked:/app" bash:5
...(in container)
bash-5.0# /app/bin/edurun 1 1
/app/bin/edurun: line 4: /app/bin/java: not found
Run Code Online (Sandbox Code Playgroud)
经检查,该文件夹确实包含名为 java 的二进制文件
bash-5.0# ls -la
total 52
drwxr-xr-x 2 …
Run Code Online (Sandbox Code Playgroud)