平台和流:发现Quarkus扩展的新方法

815 阅读2分钟

入门 指南 社区 支持 博客 开始编码

返回到所有帖子

2021年7月30日#发布

平台和流:发现Quarkus扩展的新方法

作者:Alexey Loubyansky

合著者:Erin Schnabel

平台和流:发现Quarkus扩展的新方式

正如你可能已经从最近的Quarkus Insights节目中看到的(特别是#48、#55和#57),我们在2.x流中对我们的工具进行了一些改变,以改善开发者的体验。当2.0发布时,一些眼尖的Quarkus客户端用户发现了一些新的选项,我们很高兴能在Quarkus 2.1的发布中解释这些选项是怎么回事。

**TL;DR:**我们有一套全新的更细化的BOM,你可以用它来代替大quarkus-universe-bom 。我们部署了一个注册表服务,在这些更细化的BOM中统一管理平台兼容性,我们的工具(maven、gradle和CLI)知道如何与这个注册表合作,以简化发现适用于你的项目的扩展。

从2.1.0.Final版本开始,Quarkus CLI使用这个注册表来解决项目使用的Quarkus平台。

# The client will create a project with the latest/recommended quarkus release
$ quarkus create
# You can use the --stream parameter to narrow to a specific release
$ quarkus create -S 2.0
$ quarkus create -S 2.1

平台模型的演变

Quarkus 1.x平台是基于一个单一的BOM -io.quarkus:quarkus-universe-bom ,它将被Quarkus应用程序导入。宇宙BOM将包括所有Quarkus平台的扩展以及它们的依赖关系。BOMs的目的是使其容易调整共同的依赖关系,使其适用于应用程序中使用的所有库和框架的版本。然而,糟糕的BOM构成可能实际上使其很难或实际上无法实现。一般来说,BOM管理的依赖范围越广,当用户在他们的应用程序中加入不受BOM管理的库时,遇到不兼容问题的风险就越大。

io.quarkus:quarkus-universe-bom ,正如它的artifactId所暗示的那样,肯定是一个庞大而多样的BOM,包括对Camel、Google Cloud Services、Kogito、OptaPlanner和其他Quarkus平台成员的依赖。导入io.quarkus:quarkus-universe-bom ,将对一个应用程序强制执行~3600个依赖版本约束。

除了它实际上总是远远超过需要的事实之外,它实际上可能导致严重的兼容性问题,如果Quarkus平台的BOM不试图管理 "宇宙 "的话,这些问题本来是可以避免的。例如,在一个实际上不包含任何Camel Quarkus扩展的应用程序中包含一个依赖于不同版本的commons-beanutils:commons-beanutils 的库可能会成为问题,因为io.quarkus:quarkus-universe-bom 会强制执行Camel Quarkus所要求的版本。

从Quarkus 2.0.0.Final开始,除了单一的io.quarkus:quarkus-universe-bom ,我们还定义了一些针对平台成员的BOM,比如说

  • io.quarkus.platform:quarkus-bom:2.1.0.Final - 相当于io.quarkus:quarkus-bom

  • io.quarkus.platform:quarkus-camel-bom:2.1.0.Final - 只管理Camel Quarkus相关的扩展和它们所需的依赖关系。

  • io.quarkus.platform:quarkus-kogito-bom:2.1.0.Final - 只管理Kogito Quarkus相关的扩展和它们所需的依赖关系。

  • 等等

现在,应用程序只需要导入相关的BOM,这就避免了从 "宇宙 "的其他部分强制执行依赖性约束。

鉴于每个成员的BOM实际上是io.quarkus:quarkus-universe-bom 的一个片段,成员BOM可以以任何顺序导入,而不会产生冲突。

开发工具支持

开发工具,如Quarkus CLI、Maven或Gradle插件,可以用来创建和管理使用新平台模型的Quarkus应用项目。

在Quarkus 2.0.0.Final中,io.quarkus:quarkus-universe-bom 仍然是默认的BOM。从Quarkus 2.1.0.Final开始,我们建议使用更细化的、针对成员的BOM来代替。

探索这个新的平台解析能力的最简单的方法是使用新的Quarkus CLI,它可以通过以下方式安装,例如:1.

curl -Ls https://sh.jbang.dev | bash -s - app install --fresh --force quarkus@quarkusio

一旦安装完毕,你可以通过执行以下命令创建一个项目

quarkus create app
对于CLI的早期版本(2.1.0.Final之前),你需要指定--registry-client 选项,否则创建的项目将使用与客户端版本相关的io.quarkus:quarkus-universe-bom

生成的pom.xml ,将导入以下BOM。

    <quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
    <quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
    <quarkus.platform.version>2.1.0.Final</quarkus.platform.version>
    <surefire-plugin.version>3.0.0-M5</surefire-plugin.version>
  </properties>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>${quarkus.platform.group-id}</groupId>
        <artifactId>${quarkus.platform.artifact-id}</artifactId>
        <version>${quarkus.platform.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>

这是一个等同于io.quarkus:quarkus-bom ,不包括任何其他平台成员,如Camel、Kogito、OptaPlanner等。

让我们创建另一个项目,其中确实包括Kogito扩展。

quarkus create -x kogito-quarkus-rules kogito-app

新项目导入了两个BOM(即与该项目相关的io.quarkus:quarkus-universe-bom 的两个片段)。

    <quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
    <quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
    <quarkus.platform.version>2.1.0.Final</quarkus.platform.version>
    <surefire-plugin.version>3.0.0-M5</surefire-plugin.version>
  </properties>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>${quarkus.platform.group-id}</groupId>
        <artifactId>quarkus-kogito-bom</artifactId>
        <version>${quarkus.platform.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
      <dependency>
        <groupId>${quarkus.platform.group-id}</groupId>
        <artifactId>${quarkus.platform.artifact-id}</artifactId>
        <version>${quarkus.platform.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.kie.kogito</groupId>
      <artifactId>kogito-quarkus-rules</artifactId>
    </dependency>

开发工具中更广泛的Quarkus生态系统支持

Quarkus平台并不代表整个Quarkus扩展生态系统,又称Quarkiverse,而是一组针对Quarkus作为开发堆栈的主要使用场景的扩展。这意味着仍有大量的Quarkus扩展没有出现在Quarkus平台(BOM)中,例如,大部分托管在Quarkiverse Hub上的扩展。这些非平台的扩展仍然可以像通常的应用程序依赖性一样被添加到Quarkus应用程序中。Quarkus 2.1.0.Final开发工具使之非常容易,例如

quarkus create -x prettytime test-time-app

将创建一个带有非平台Quarkus Pretty Time扩展的新Quarkus项目。

    <quarkus.platform.artifact-id>quarkus-bom</quarkus.platform.artifact-id>
    <quarkus.platform.group-id>io.quarkus.platform</quarkus.platform.group-id>
    <quarkus.platform.version>2.1.0.Final</quarkus.platform.version>
    <surefire-plugin.version>3.0.0-M5</surefire-plugin.version>
  </properties>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>${quarkus.platform.group-id}</groupId>
        <artifactId>${quarkus.platform.artifact-id}</artifactId>
        <version>${quarkus.platform.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>io.quarkiverse.prettytime</groupId>
      <artifactId>quarkus-prettytime</artifactId>
      <version>0.1.0</version>
    </dependency>

Maven和Gradle插件中的注册表客户端支持

Quarkus的Maven和Gradle插件仍然可以用来管理Quarkus项目。

mvn io.quarkus:quarkus-maven-plugin:2.1.0.Final:create \
    -Dextensions=kogito-quarkus-rules,prettytime \
    -DprojectGroupId=org.acme -DprojectArtifactId=quarkus-app -DprojectVersion=1.0 \

Quarkus是开放的。本项目的所有依赖项都在Apache软件许可2.0或兼容许可下提供。

这个网站是用Jekyll建立的,托管在Github Pages上,是完全开源的。如果你想让它变得更好,请分叉该网站并向我们展示你的成果。

导航

贡献

获取帮助

Quarkus是由社区项目组成的

CC by 3.0|隐私政策 赞助者