小编Dra*_*gas的帖子

为 SonarCloud 构建多模块 maven 项目

我第一次为 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 插件不应该处理吗?

java maven sonarcloud

5
推荐指数
1
解决办法
1821
查看次数

转储部分 Java 飞行记录

假设我使用以下标志为我的 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。

java java-mission-control jfr

4
推荐指数
1
解决办法
3122
查看次数

JLink 不生成可再发行的映像

一段时间以来,我一直在从事模块化项目,但由于受到文件名和自动模块的限制,我从未有机会使用 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)

java jlink

2
推荐指数
1
解决办法
1129
查看次数

标签 统计

java ×3

java-mission-control ×1

jfr ×1

jlink ×1

maven ×1

sonarcloud ×1