Quarkus – 创建您的第一个应用程序,试试看

我想用Java编写适用于AWS Lambda等Function-as-a-Service (FaaS)的函数,并在调查中发现了一个名为Quarkus(クォーカス)的适合创建微服务的Java框架,所以我尝试了一下。

虽然我已经成功地启动了服务器,但本文更像是记录尝试新技术时常见的试错过程,而不仅仅是为那些想要使用Quarkus的人提供有用的信息。一般来说,只有成功的案例才会留在文章中,对于在尝试新技术时如何解决问题,或者何时放弃尝试,这方面的文章较少。本文将作为一个案例与大家分享。

如果您只对构建Quarkus Creating Your First Application中展示的应用程序感兴趣,那么您可能只需要参考GraalVM的部分来再次尝试。请注意,由于时间已经过去并可能与最新版本不一致,请注意。

尝试在Zulu OpenJDK ARMv8上试用

需要的东西

查看Quarkus-创建您的第一个应用程序时,找到所需的东西。

不到15分钟
一个集成开发环境

因为上面写着这句话,所以看起来不会超过15分钟。

Maven 等似乎需要新版本,但我剛剛購買的 M1 Mac 已經設定好環境,並且沒有任何問題。我使用我最喜歡的 IntelliJ 作為集成開發環境。JDK 是透過 IntelliJ 下載的 Zulu OpenJDK ARMv81。

克隆存储库

克隆 https://github.com/quarkusio/quarkus-quickstarts.git 的代码库.

我在指南中看到了,但是作为IntelliJ的用户,我会通过GUI进行执行。要等待很长时间才能显示项目的目录结构。

最开始我很快就在这里失去了注意力并开始玩耍,但重新尝试在另一个目录进行相同的操作并截取了屏幕,结果发现后台任务需要花费6分26秒才能完成。再不到8分34秒就可以完成教程了!

启动项目

对于Linux和MacOS用户

mvn io.quarkus:quarkus-maven-plugin:1.11.3.Final:create \
-DprojectGroupId=org.acme \
-DprojectArtifactId=getting-started \
-DclassName=”org.acme.getting.started.GreetingResource” \
-Dpath=”/hello”
cd getting-started

因为在向导中显示了,所以我将尝试执行。

% mvn io.quarkus:quarkus-maven-plugin:1.11.3.Final:create \
    -DprojectGroupId=org.acme \
    -DprojectArtifactId=getting-started \
    -DclassName="org.acme.getting.started.GreetingResource" \
    -Dpath="/hello"
[INFO] Scanning for projects...
[ERROR] [ERROR] Some problems were encountered while processing the POMs:
[ERROR] Non-resolvable import POM: Could not find artifact io.quarkus:quarkus-bom:pom:999-SNAPSHOT @ line 21, column 19
[ERROR] 'dependencies.dependency.version' for io.quarkus:quarkus-resteasy:jar is missing. @ line 31, column 17
[ERROR] 'dependencies.dependency.version' for io.quarkus:quarkus-smallrye-reactive-messaging-kafka:jar is missing. @ line 35, column 17
[ERROR] 'dependencies.dependency.version' for io.quarkus:quarkus-hibernate-orm-panache:jar is missing. @ line 39, column 17
[ERROR] 'dependencies.dependency.version' for io.quarkus:quarkus-resteasy-jackson:jar is missing. @ line 43, column 17
[ERROR] 'dependencies.dependency.version' for io.quarkus:quarkus-jdbc-postgresql:jar is missing. @ line 47, column 17
[ERROR] 'dependencies.dependency.version' for io.quarkus:quarkus-junit5:jar is missing. @ line 51, column 17
[ERROR] 'dependencies.dependency.version' for org.jboss.resteasy:resteasy-client:jar is missing. @ line 56, column 17
[ERROR] 'dependencies.dependency.version' for io.rest-assured:rest-assured:jar is missing. @ line 61, column 17
[ERROR] 'dependencies.dependency.version' for org.awaitility:awaitility:jar is missing. @ line 66, column 17
 @ 
[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]   
[ERROR]   The project org.acme:kafka-panache-quickstart:1.0.0-SNAPSHOT (/Users/hanohrs/git_repos/quarkus-quickstarts/kafka-panache-quickstart/pom.xml) has 10 errors
[ERROR]     Non-resolvable import POM: Could not find artifact io.quarkus:quarkus-bom:pom:999-SNAPSHOT @ line 21, column 19 -> [Help 2]
[ERROR]     'dependencies.dependency.version' for io.quarkus:quarkus-resteasy:jar is missing. @ line 31, column 17
[ERROR]     'dependencies.dependency.version' for io.quarkus:quarkus-smallrye-reactive-messaging-kafka:jar is missing. @ line 35, column 17
[ERROR]     'dependencies.dependency.version' for io.quarkus:quarkus-hibernate-orm-panache:jar is missing. @ line 39, column 17
[ERROR]     'dependencies.dependency.version' for io.quarkus:quarkus-resteasy-jackson:jar is missing. @ line 43, column 17
[ERROR]     'dependencies.dependency.version' for io.quarkus:quarkus-jdbc-postgresql:jar is missing. @ line 47, column 17
[ERROR]     'dependencies.dependency.version' for io.quarkus:quarkus-junit5:jar is missing. @ line 51, column 17
[ERROR]     'dependencies.dependency.version' for org.jboss.resteasy:resteasy-client:jar is missing. @ line 56, column 17
[ERROR]     'dependencies.dependency.version' for io.rest-assured:rest-assured:jar is missing. @ line 61, column 17
[ERROR]     'dependencies.dependency.version' for org.awaitility:awaitility:jar is missing. @ line 66, column 17
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException
[ERROR] [Help 2] http://cwiki.apache.org/confluence/display/MAVEN/UnresolvableModelException

几秒后出现错误。在大约8分30秒后能完成教程吗?

在IntelliJ中看到,所有的模块都有红线,显然是个异常的状态。

我访问了acme.org,但感觉它像个域名转售商的网站,似乎没有什么参考价值。

我觉得最终版本访问 SNAPSHOT 版本是有些奇怪的。这意味着什么呢?

查看 README.md 文件,

使用替代平台
当前默认情况下,这些快速入门使用Quarkus核心BOM。

我看到了类似的内容,有点好奇。虽然 BOM 不是指字节顺序标记,但它到底是什么呢?(恳请了解的人指示一下,将不胜感激。)

到目前为止,在这里没有写出的故障排除已经进行了许多,并且确实已经过了15分钟。仔细思考一下,虽然写着不需要超过15分钟,但没有写过15分钟以下就足够的。说起来,以前老师教过我,必要条件和充分条件是不一样的。

指定一个发布版本的标签来执行。

突然想起,版本库的更新时间还没有经过一天。难道最新版出问题了吗?

看看 Releases,最新版本是1.11.3.Final,发布于两天前。我将检出它并重新执行。

% git checkout 1.11.3.Final
% git clean -df
% mvn clean io.quarkus:quarkus-maven-plugin:1.11.3.Final:create \ 
    -DprojectGroupId=org.acme \
    -DprojectArtifactId=getting-started \
    -DclassName="org.acme.getting.started.GreetingResource" \
    -Dpath="/hello"
[INFO] Scanning for projects...
省略
[INFO] --------------------------------[ pom ]---------------------------------
[INFO] 
[INFO] --- quarkus-maven-plugin:1.11.3.Final:create (default-cli) @ quickstart-projects ---
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for quickstart-projects 1.0.0-SNAPSHOT:
[INFO] 
[INFO] amazon-dynamodb-quickstart ......................... SUCCESS [  0.024 s]
省略
[INFO] quickstart-projects ................................ FAILURE [  0.317 s]
省略
[INFO] mailer-quickstart .................................. SUCCESS [  0.001 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.082 s
[INFO] Finished at: 2021-02-13T14:42:38+09:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal io.quarkus:quarkus-maven-plugin:1.11.3.Final:create (default-cli) on project quickstart-projects: Unable to create the project, the directory /Users/hanohrs/git_repos/quarkus-quickstarts/getting-started already exists -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
[ERROR] 
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <args> -rf :quickstart-projects

我们已经比之前进步了很多。毕竟这是最终版。但是构建未通过。

删除导致错误的目录后再执行。

似乎不允许存在名为 “getting-started” 的目录。我一开始就将”clean”包含在mvn的目标中以避免这种情况,但并未确认”clean”目标是否正确实现。我将通过使用”rm -r”命令删除并重新执行。

% mvn clean
省略
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.817 s
[INFO] Finished at: 2021-02-13T14:46:45+09:00
[INFO] ------------------------------------------------------------------------
% rm -r getting-started
% mvn io.quarkus:quarkus-maven-plugin:1.11.3.Final:create \ 
    -DprojectGroupId=org.acme \
    -DprojectArtifactId=getting-started \
    -DclassName="org.acme.getting.started.GreetingResource" \
    -Dpath="/hello"
[INFO] quartz-quickstart .................................. SUCCESS [  0.000 s]
[INFO] qute-quickstart .................................... SUCCESS [  0.000 s]
[INFO] reactive-routes-quickstart ......................... SUCCESS [  0.001 s]
[INFO] quickstart-projects ................................ FAILURE [  0.317 s]
省略
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.082 s
[INFO] Finished at: 2021-02-13T14:42:38+09:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal io.quarkus:quarkus-maven-plugin:1.11.3.Final:create (default-cli) on project quickstart-projects: Unable to create the project, the directory /Users/hanohrs/git_repos/quarkus-quickstarts/getting-started already exists -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <args> -rf :quickstart-projects

又失败了,不是吗?在错误信息中提示要使用 mvn -rf :quickstart-projects,结果却错误地使用了简单的 rm -r,可能不太好。但是, 是具体指什么呢?是像 -e 选项一样的东西吗?还是指阶段或目标呢?我不太清楚,所以尝试了空的执行。

按照消息执行 mvn -rf :quickstart-projects

% mvn -rf :quickstart-projects
[INFO] Scanning for projects...
[ERROR] [ERROR] Some problems were encountered while processing the POMs:
[ERROR] Child module /Users/hanohrs/git_repos/quarkus-quickstarts/getting-started of /Users/hanohrs/git_repos/quarkus-quickstarts/pom.xml does not exist @ 
 @ 
[ERROR] The build could not read 1 project -> [Help 1]
[ERROR]   
[ERROR]   The project io.quarkus.quickstarts:quickstart-projects:1.0.0-SNAPSHOT (/Users/hanohrs/git_repos/quarkus-quickstarts/pom.xml) has 1 error
[ERROR]     Child module /Users/hanohrs/git_repos/quarkus-quickstarts/getting-started of /Users/hanohrs/git_repos/quarkus-quickstarts/pom.xml does not exist
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/ProjectBuildingException

我现在已经完全搞不清楚了。

重新开始从最初开始

我们从头开始吧。完全没想到为了计时,在另一个目录克隆的那个会有用。

由于我认为在几分钟内无法达到 IntelliJ 发挥作用的阶段,我决定轻轻地关闭它。

% rm -rf quarkus-quickstarts
% git clone quarkus-quickstarts-2 quarkus-quickstarts
Cloning into 'quarkus-quickstarts'...
done.
% cd quarkus-quickstarts
% git checkout 1.11.3.Final
Note: switching to '1.11.3.Final'.

You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by switching back to a branch.

If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -c with the switch command. Example:

  git switch -c <new-branch-name>

Or undo this operation with:

  git switch -

Turn off this advice by setting config variable advice.detachedHead to false

HEAD is now at 8a474ec2 [RELEASE] - Bump version to 1.11.3.Final

% mvn io.quarkus:quarkus-maven-plugin:1.11.3.Final:create -DprojectGroupId=org.acme -DprojectArtifactId=getting-started -DclassName="org.acme.getting.started.GreetingResource" -Dpath="/hello"
[INFO] Scanning for projects...
省略
[INFO] -------------< io.quarkus.quickstarts:quickstart-projects >-------------
[INFO] Building quickstart-projects 1.0.0-SNAPSHOT                       [1/87]
[INFO] --------------------------------[ pom ]---------------------------------
[INFO] 
[INFO] --- quarkus-maven-plugin:1.11.3.Final:create (default-cli) @ quickstart-projects ---
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for quickstart-projects 1.0.0-SNAPSHOT:
[INFO] 
[INFO] amazon-dynamodb-quickstart ......................... SKIPPED
省略
[INFO] quickstart-projects ................................ FAILURE [  0.324 s]
省略
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.044 s
[INFO] Finished at: 2021-02-13T15:04:03+09:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal io.quarkus:quarkus-maven-plugin:1.11.3.Final:create (default-cli) on project quickstart-projects: Unable to create the project, the directory /Users/hanohrs/git_repos/quarkus-quickstarts/getting-started already exists -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
[ERROR] 
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <args> -rf :quickstart-projects

看起来出现了相同的错误。

我现在才意识到,那个叫做org.acme的神秘组织ID是我在命令行中指定的。虽然它的值就像指南中介绍的一样,但为什么示例不是com.example呢?

按照子目录的README尝试在GraalVM上使用。

当我再次查看 https://github.com/quarkusio/quarkus-quickstarts/tree/1.11.3.Final/getting-started 时,我发现这个目录最初并不是空的。而且,对于这个模块来说,它的要求与父目录不同。

要编译和运行此演示,您需要:

JDK 1.8+
GraalVM

配置GraalVM和JDK 1.8+:

确保已设置GRAALVM_HOME和JAVA_HOME环境变量,并且JDK 1.8+的java命令已添加到路径中。

请参阅构建本机可执行文件指南,了解如何设置您的环境。

GraalVM对Apple Silicon可靠吗?

考虑到未更新适应JDK 11的部分,不确定选择1.8还是11更为稳妥。如果选择1.8,可能会有经验,但是在M1 Mac上使用JDK 1.8并没有什么经验。

安装基于Java 11的GraalVM。

在我不太了解的时候,我愿意尝试新的事物。

从GraalVM Community Edition 21.0.0.2上下载Java 11基础的MacOS版本,并将其添加到在IntelliJ中已下载的JDK列表中。

% cd ~/Library/Java/JavaVirtualMachines
% tar -xf ~/Downloads/graalvm-ce-java11-darwin-amd64-21.0.0.2.tar.gz

我还会修复 ~/.zshrc 文件。

export JAVA_HOME="$HOME/Library/Java/JavaVirtualMachines/graalvm-ce-java11-21.0.0.2/Contents/Home"
export PATH="$JAVA_HOME/bin:$PATH:$HOME/maven/bin"

打开终端并输入 mvn -version 命令进行确认。

% mvn -version
Apache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)
Maven home: /Users/hanohrs/maven
Java version: 11.0.10, vendor: GraalVM Community, runtime: /Users/hanohrs/Library/Java/JavaVirtualMachines/graalvm-ce-java11-21.0.0.2/Contents/Home
Default locale: ja_JP, platform encoding: UTF-8
OS name: "mac os x", version: "10.16", arch: "x86_64", family: "mac"

听起来不错。为了确认一下,我会试着运行一下”Hello, world!”。

% cd ~/scratches
% cat > Hello.java
public class Hello {
    public static void main(String[] args) {
        System.out.println("hello, world!"); 
    }
} // ここで control + D
% javac Hello.java 
% java Hello 
hello, world!

太棒了!

在写作时没有再次出现的问题的讨论

实际上,这段描述在使用基于Java 8的GraalVM进行执行并陷入无法解决的困境后,通过下述方法得以解决,因此才将其记录在本文中,并且为了重新记录这一过程,我们使用了基于Java 11的执行方式。然而,我记得在使用基于Java 8时没有执行过下载页面中以下命令,否则会因为链接器或其他原因而报错。

如果您正在使用macOS Catalina及更高版本,则可能需要在使用之前从这些位上移除隔离属性。
要执行此操作,请运行以下命令:

$ sudo xattr -r -d com.apple.quarantine 路径/到/graalvm/文件夹/

尽管我将文件解压缩到主目录下,但似乎仍然需要使用sudo,这是否是macOS的惯例呢?我不太了解为什么重新使用基于Java 11的方式时就不需要了。是因为与基于Java 8的方式有所不同,或者是因为我在mvn中执行了某些不同的操作导致了生成原生映像的问题吗?

尝试使用GraalVM进行构建。

既然GraalVM已经成功安装好了,那么我们再次尝试构建getting-started。

% mvn io.quarkus:quarkus-maven-plugin:1.11.3.Final:create -DprojectGroupId=org.acme -DprojectArtifactId=getting-started -DclassName="org.acme.getting.started.GreetingResource" -Dpath="/hello"
[INFO] Scanning for projects...
省略
[INFO] -------------< io.quarkus.quickstarts:quickstart-projects >-------------
[INFO] Building quickstart-projects 1.0.0-SNAPSHOT                       [1/87]
[INFO] --------------------------------[ pom ]---------------------------------
[INFO] 
[INFO] --- quarkus-maven-plugin:1.11.3.Final:create (default-cli) @ quickstart-projects ---
Downloading from central: https://repo.maven.apache.org/maven2/io/quarkus/quarkus-universe-bom/maven-metadata.xml
Downloaded from central: https://repo.maven.apache.org/maven2/io/quarkus/quarkus-universe-bom/maven-metadata.xml (2.1 kB at 1.8 kB/s)
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary for quickstart-projects 1.0.0-SNAPSHOT:
[INFO] 
[INFO] amazon-dynamodb-quickstart ......................... SKIPPED
省略
[INFO] quickstart-projects ................................ FAILURE [  2.970 s]
省略
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  6.374 s
[INFO] Finished at: 2021-02-14T09:19:05+09:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal io.quarkus:quarkus-maven-plugin:1.11.3.Final:create (default-cli) on project quickstart-projects: Unable to create the project, the directory /Users/hanohrs/git_repos/quarkus-quickstarts/getting-started already exists -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException
[ERROR] 
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <args> -rf :quickstart-projects

又是一样的呀ー ?

使用Eclipse Che (che.openshift.io) 进行尝试。

由于陷入僵局,我决定放弃。在使用某种JVM语言的FaaS创建应用程序时,我一直考虑采用Quarkus能否提高便利性。但是,到目前为止我遇到了这么多问题,我认为在积累经验或改善指南文档质量之前,应该将其使用优先级降低。

顺便说一下,我在考虑将Eclipse Che作为构建FaaS函数的环境。在云IDE市场上,以Microsoft的Visual Studio Code为基础的产品似乎是主流,所以我尝试了微软的GitHub Codespaces,但是他们告诉我“等我们准备好测试了会给你发邮件,请稍等”,结果变成了这样。所以我寻找其他选项,发现了一个叫Codenvy的东西,我很快就开始使用了,所以我决定使用它。虽然它似乎会被Red Hat收购,但确实在IBM和Red Hat产品被使用的领域中,GitHub Codespaces可能因为过于开放的形象而无法被接受。它有可能成为GitHub Codespaces的强大竞争对手。

由于我第一次个人使用 Red Hat 的服务,所以我创建了一个帐户。由于我看到可以通过与 GitHub 的 SSO 进行连接登录,所以我选择了这种方式,但实际上它只是一个省去了复制粘贴邮件地址的麻烦的功能,不需要告诉 GitHub 帐户的信息。设置密码需要重新进行,以后登录时需要使用 Red Hat 帐号的ID和密码。我建议以后创建帐号的人不要指望SSO连接,而是手动创建帐号。

顺便提问一下,在 che.openshift.io 这个平台上提供的这项服务的正式名称已经不再是 Codenvy 了吧,那么我们应该如何称呼这项服务呢?总之,请先不必在意,我们继续前进吧。

quarkus_workspaces.png

当你登录之后,你会发现可以选择Quarkus的工作空间!虽然这是去年的文章,但在”Quarkus支持IDE”的部分写着”即将推出”,所以我已经放弃了。真是感谢Red Hat的帮助,我只是对他们的实力感到敬畏。

让我们轻易地点击一下,创建一个Quarkus REST API的工作空间吧。

スクリーンショット 2021-02-13 20.48.08.png

嗯,进度条出现了,但是没有进展的迹象。

由于拒绝第三方Cookie,导致了这个问题。在允许除了名为Eloqua的用于追踪目的之外的其他内容后,处理开始正常进行。不过,由于OpenShift实例的Cookie问题,每次重新打开工作空间时子域名都会变化。我们无法仅限于使用https来支持WebSocket,因此不得不允许一个相当广泛的范围,即[*.]8a09.starter-us-east-2.openshiftapps.com。

考虑到有很多苹果产品用户会使用拒绝第三方cookie的设置,因此希望能够显示清晰易懂的错误信息。例如,当尝试从Google Drive下载PDF文件时,可以显示以下类似的消息。

cannot_download.png

稍等片刻,工作区已打开。

readme.png

这、这是!不是刚刚我陷入困境时读的 README 吗!也就是说,这个环境可能已经通过了构建测试。

虽然如此,Visual Studio Code只是一个功能强大的(尤其是即使自动重新启动也不会丢失内容的)记事本,所以我完全不知道该如何操作才能构建项目。

在进行盲目尝试的过程中,选择“终端 > 运行构建任务…”,会出现“没有找到可运行的构建任务。配置构建任务…”菜单。

No_build_task_to_run_found.png

哇!好像闻到宝藏的香味了!

看到按钮,我在漫画中学到,应该按下去。所以我会点击。

Start_Development_mode.png

出现了下一个菜单。因为不太清楚,所以我会点击上面的选项。

tasks.json.png

出现了一个名为”tasks.json”的非常典型的文件。

换句话说,运行Java编译器需要Maven,执行Maven的xml定义的配置需要Visual Studio Code,而构建Visual Studio Code则需要json定义的配置,这是我觉得可能是如此。

我再次尝试执行 “Terminal > Run Build Task…”。

maven_running.png

咕噜咕噜咕噜咕噜!

由于存储库位于同一数据中心,所以速度非常快!

QUARKUS.png
__  ____  __  _____   ___  __ ____  ______ 
 --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ 
 -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \   
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/   

ASCII藝術啊!!

点击右下角的“在预览中打开”。

Hello che-user.png
hello che-user

嗯,虽然回应冷淡,但是我已经动了!

太开心了!?

在GraalVM上再次尝试

看之前成功的构建,我觉得似乎在 Maven 上执行的目标并不是create。

暂时忘记README中的描述,以我自己的方式,尝试用可以构建的参数来运行。

% cd ~/git_repos/quarkus-quickstarts/getting-started
% mvn -DprojectGroupId=org.acme \
  -DprojectArtifactId=getting-started \
  -DclassName="org.acme.getting.started.GreetingResource" \
  -Dpath="/hello" \
  package
[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< org.acme:getting-started >----------------------
[INFO] Building getting-started 1.0.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ getting-started ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 2 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ getting-started ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ getting-started ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Users/hanohrs/git_repos/quarkus-quickstarts/getting-started/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ getting-started ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-surefire-plugin:3.0.0-M5:test (default-test) @ getting-started ---
[INFO] 
[INFO] -------------------------------------------------------
[INFO]  T E S T S
[INFO] -------------------------------------------------------
[INFO] Running org.acme.getting.started.GreetingResourceTest
2021-02-14 10:41:04,319 INFO  [io.quarkus] (main) Quarkus 1.11.3.Final on JVM started in 3.300s. Listening on: http://localhost:8081
2021-02-14 10:41:04,333 INFO  [io.quarkus] (main) Profile test activated. 
2021-02-14 10:41:04,334 INFO  [io.quarkus] (main) Installed features: [cdi, resteasy]
[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 10.213 s - in org.acme.getting.started.GreetingResourceTest
2021-02-14 10:41:07,909 INFO  [io.quarkus] (main) Quarkus stopped in 0.109s
[INFO] 
[INFO] Results:
[INFO] 
[INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
[INFO] 
[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ getting-started ---
[INFO] 
[INFO] --- quarkus-maven-plugin:1.11.3.Final:build (default) @ getting-started ---
[INFO] [org.jboss.threads] JBoss Threads version 3.2.0.Final
[INFO] [io.quarkus.deployment.pkg.steps.JarResultBuildStep] Building thin jar: /Users/hanohrs/git_repos/quarkus-quickstarts/getting-started/target/getting-started-1.0.0-SNAPSHOT-runner.jar
[INFO] [io.quarkus.deployment.QuarkusAugmentor] Quarkus augmentation completed in 2390ms
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  20.599 s
[INFO] Finished at: 2021-02-14T10:41:11+09:00
[INFO] ------------------------------------------------------------------------

成就了!我一直在等你的到来!

我会试一试……!

% java -jar target/getting-started-1.0.0-SNAPSHOT-runner.jar
__  ____  __  _____   ___  __ ____  ______ 
 --/ __ \/ / / / _ | / _ \/ //_/ / / / __/ 
 -/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \   
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/   
2021-02-14 10:42:59,837 INFO  [io.quarkus] (main) getting-started 1.0.0-SNAPSHOT on JVM (powered by Quarkus 1.11.3.Final) started in 1.578s. Listening on: http://0.0.0.0:8080
2021-02-14 10:42:59,868 INFO  [io.quarkus] (main) Profile prod activated. 
2021-02-14 10:42:59,868 INFO  [io.quarkus] (main) Installed features: [cdi, resteasy]

ASCII艺术老师来了ー! ?

当你在浏览器中打开 http://localhost:8080/hello时

Hello.png

我成功了!虽然不是原生的体验,但我发现可以在搭载Apple silicon的Mac上使用GraalVM运行。与Spring Boot相比,感觉要快得多。

最后,由于陷入困境,我们尝试了不同的方法或者休息,所以花了15个小时以上呢… ?

我已经没有重新使用Zulu OpenJDK的动力了,但我觉得它应该在那边也能运行。

因此,我对Quarkus和Che都不太了解,但是即使是像我这样的人也可以在Java中创建轻量级的REST服务而不需要编写任何代码。

总结

    • Quarkus の公式ドキュメントやサンプルの質はまだまだです

 

    • 学校で習った必要条件と十分条件の違いは、社会人になっても重要です

 

    • 新技術を採用しようとして行き詰まったら、諦めることも大事です

他の新技術に触れたときに、思いがけず行き詰まりを打開できることもあります

Eclipse Che を使うときは、Eclipse IDE の使用経験が役に立ちません

むしろ、Visual Studio Code での Java 開発経験があると良さそうです

クラウド IDE は、特定の環境でビルドできないという現場あるある問題を、本当に解決してくれます
Quarkus がネイティブ ビルドでなくても速いというのは、体感では事実です
Quarkus も Eclipse Che もわからないことだらけです

どちらも今後が楽しみな、伸びてほしい製品です
わかる方からのコメントや記事の投稿をお待ちしております ?

在 IntelliJ 的下载页面上可以看到 Azul Zulu community™ 15.0.2 aarch64 的选项。

看到了关于「Red Hat发布基于云的IDE CodeReady Workspaces」的新闻,似乎是以 CodeReady Workspaces 为名称。

尝试使用 1.12.0.Final + Zulu OpenJDK 进行测试时,使用了之前提到的方法无法运行,但之后执行了 ./mvnw compile quarkus:dev,这次是可以运行的。

广告
将在 10 秒后关闭
bannerAds