Quarkus / WSL橘子,但有额外的好处


*未完成

似乎Quarkus或GraalVM在世界上很流行,并且响应新配置和开发的趋势使我们对草率的Java感到厌倦。
因此,再次像往常一样,让我们??使用WSL。

TL; DR

它可以正常工作,但是我无法制作基本的本机版本。如果您有任何信息,请告诉我。

假设

Docker必须正在运行。由于预算原因,我使用Windows 10 Home,因此无法将Docker用于Windows。这将需要一些努力。
https://qiita.com/koinori/items/78a946fc74452af9afba上有一篇很棒的文章,并且已经确认它可以与以下组合一起使用。
--WSL Ubuntu 16.04
-Docker CE 17.03.3
*实际上,到目前为止,这样做很麻烦

我想使用一个新的版本,例如Ubuntu 18.04,但是现在似乎没有办法让Docker正常工作。您将不得不使用16.04,这将阻止apt安装包括JDK之类的新安装。您需要分别放置二进制分发等。

必须安装以下内容。括号中的版本是实际尝试的版本。
--OpenJDK 11(11.0.2):当前不适用于OpenJDK 12
-Apache Maven 3.5.3(3.6.1)
--GraalVM(ce-1.0.0-rc15)
*如上所述,它不能使用apt进行安装,但是安装过程并不困难,因此将省略

夸库斯--dev

这是官方入门。
https://quarkus.io/guides/getting-started-guide

1
2
3
4
5
mvn io.quarkus:quarkus-maven-plugin:0.14.0:create \
    -DprojectGroupId=org.acme \
    -DprojectArtifactId=getting-started \
    -DclassName="org.acme.quickstart.GreetingResource" \
    -Dpath="/hello"

这是唯一的早期故事。这将收集您所需的内容并创建一个最小的项目。使用以下命令执行它。

1
./mvnw compile quarkus:dev

现在您可以在http://本地主机:8080 / hello访问它。它只是返回"你好"。要做到这一点,需要采取很多步骤,因此您会感到有成就感。当我更改源时,它将进行热重装。很不错。 (请重新加载您的浏览器...)
您可以在阅读本指南的续篇时尝试各种尝试。

夸克斯--native

好吧,这是核心版本的原始版本。它也是官方指南的续篇。我会做的。
https://quarkus.io/guides/building-native-image-guide.html

使用以下命令构建本机版本。

1
./mvnw package -Pnative.

如果运行生成的跟踪,则将看到其运行与运行开发版本时相同。

1
./target/getting-started-1.0-SNAPSHOT-runner

查看续篇,它说以下命令构建了一些要与docker(而不是local)一起运行的东西。

1
./mvnw package -Pnative -Dnative-image.docker-build=true

这在我的环境中不起作用。将发生以下错误。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
[INFO] [io.quarkus.creator.phase.nativeimage.NativeImagePhase] docker run -v /mnt/c/Users/odistagon/Documents/projects/getting-started/target:/project:z --rm --user 1000:1000 quay.io/quarkus/centos-quarkus-native-image:graalvm-1.0.0-rc15 -J-Djava.util.logging.manager=org.jboss.logmanager.LogManager -H:InitialCollectionPolicy=com.oracle.svm.core.genscavenge.CollectionPolicy$BySpaceAndTime -jar getting-started-1.0-SNAPSHOT-runner.jar -J-Djava.util.concurrent.ForkJoinPool.common.parallelism=1 -H:FallbackThreshold=0 -H:+PrintAnalysisCallTree -H:-AddAllCharsets -H:EnableURLProtocols=http -H:-SpawnIsolates -H:-JNI --no-server -H:-UseServiceLoaderFeature -H:+StackTrace
[getting-started-1.0-SNAPSHOT-runner:6]    classlist:   8,022.44 ms
[getting-started-1.0-SNAPSHOT-runner:6]        (cap):     418.82 ms
[getting-started-1.0-SNAPSHOT-runner:6]        setup:   1,107.75 ms
Fatal error: com.oracle.svm.core.util.VMError$HostedError: java.nio.file.AccessDeniedException: /tmp/SVM-6092077881174118427/LibCHelperDirectives.c
        at com.oracle.svm.core.util.VMError.shouldNotReachHere(VMError.java:70)
        at com.oracle.svm.hosted.c.codegen.CSourceCodeWriter.writeFile(CSourceCodeWriter.java:182)
        at com.oracle.svm.hosted.c.codegen.CSourceCodeWriter.writeFile(CSourceCodeWriter.java:160)
        at com.oracle.svm.hosted.c.codegen.QueryCodeWriter.write(QueryCodeWriter.java:77)
        at com.oracle.svm.hosted.c.CAnnotationProcessor.process(CAnnotationProcessor.java:78)
        at com.oracle.svm.hosted.c.NativeLibraries.finish(NativeLibraries.java:306)
        at com.oracle.svm.hosted.NativeImageGenerator.processNativeLibraryImports(NativeImageGenerator.java:1524)
        at com.oracle.svm.hosted.NativeImageGenerator.setupNativeLibraries(NativeImageGenerator.java:998)
        at com.oracle.svm.hosted.NativeImageGenerator.setupNativeImage(NativeImageGenerator.java:830)
        at com.oracle.svm.hosted.NativeImageGenerator.doRun(NativeImageGenerator.java:522)
        at com.oracle.svm.hosted.NativeImageGenerator.lambda$run$0(NativeImageGenerator.java:442)
        at java.util.concurrent.ForkJoinTask$AdaptedRunnableAction.exec(ForkJoinTask.java:1386)
        at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
        at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1056)
        at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
        at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)
Caused by: java.nio.file.AccessDeniedException: /tmp/SVM-6092077881174118427/LibCHelperDirectives.c
        at sun.nio.fs.UnixException.translateToIOException(UnixException.java:84)
        at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:102)
        at sun.nio.fs.UnixException.rethrowAsIOException(UnixException.java:107)
        at sun.nio.fs.UnixFileSystemProvider.newByteChannel(UnixFileSystemProvider.java:214)
        at java.nio.file.spi.FileSystemProvider.newOutputStream(FileSystemProvider.java:434)
        at java.nio.file.Files.newOutputStream(Files.java:216)
        at java.nio.file.Files.newBufferedWriter(Files.java:2860)
        at com.oracle.svm.hosted.c.codegen.CSourceCodeWriter.writeFile(CSourceCodeWriter.java:174)
        ... 14 more
Error: Image build request failed with exit status 1

我觉得我无法以某种方式解决它。如果您知道解决方案,请让我知道...
我使用本地版本的Runner进行了docker构建,但是当我运行它时,它崩溃了。

当我能够做到这一点时,我在kubernetes上运行了图像……这将再次花费时间,但是从某种意义上说它已经保存了。

奖金

最近,我喜欢使用VSCode,但是在使用WSL时,由于(笨拙的)drvfs等原因,我有使用它的习惯。同时,解决了它的扩展出现了。
https://twitter.com/code/status/1124057230624665665620
https://aka.ms/vscode-remote/download/extension

如果将其放入,则可以直接在WSL中打开该文件夹。它非常简单易用。我没有尝试过,但似乎它也可以直接连接到Docker容器,这视环境而定也很方便。