これは、なにをしたくて書いたもの?
Quarkusには、Extension Codestartというコード生成システムがあります。
QuakusのExtension Codestartの配置場所について - CLOVER🍀
これはこれで便利なのですが、Javaソースコードは特に出力しなくても良いかなという時がまあまああり、その度に削除していたのですが。
そもそも出力しない方法があったので、メモしておきました。
環境
今回の環境は、こちら。
$ java --version openjdk 17.0.2 2022-01-18 OpenJDK Runtime Environment (build 17.0.2+8-Ubuntu-120.04) OpenJDK 64-Bit Server VM (build 17.0.2+8-Ubuntu-120.04, mixed mode, sharing) $ mvn --version Apache Maven 3.8.5 (3599d3414f046de2324203b78ddcf9b5e4388aa0) Maven home: $HOME/.sdkman/candidates/maven/current Java version: 17.0.2, vendor: Private Build, runtime: /usr/lib/jvm/java-17-openjdk-amd64 Default locale: ja_JP, platform encoding: UTF-8 OS name: "linux", version: "5.4.0-104-generic", arch: "amd64", family: "unix"
ふつうにプロジェクトを作成してみる
まずは、ふつうにプロジェクトを作成してみます。Extensionは、なんとなくRESTEasy Reactiveにしておきました。
$ mvn io.quarkus.platform:quarkus-maven-plugin:2.7.5.Final:create \ -DprojectGroupId=org.littlewings \ -DprojectArtifactId=quarkus-example \ -DprojectVersion=0.0.1-SNAPSHOT \ -Dextensions="resteasy-reactive"
Extensionの選択と、Extension Codestartの適用の様子。
[INFO] Looking for the newly published extensions in registry.quarkus.io [INFO] ----------- [INFO] selected extensions: - io.quarkus:quarkus-resteasy-reactive [INFO] applying codestarts... [INFO] 📚 java 🔨 maven 📦 quarkus 📝 config-properties 🔧 dockerfiles 🔧 maven-wrapper 🚀 resteasy-reactive-codestart
作成されたディレクトリおよびファイル。
$ tree quarkus-example quarkus-example ├── README.md ├── mvnw ├── mvnw.cmd ├── pom.xml └── src ├── main │ ├── docker │ │ ├── Dockerfile.jvm │ │ ├── Dockerfile.legacy-jar │ │ ├── Dockerfile.native │ │ └── Dockerfile.native-micro │ ├── java │ │ └── org │ │ └── littlewings │ │ └── ReactiveGreetingResource.java │ └── resources │ ├── META-INF │ │ └── resources │ │ └── index.html │ └── application.properties └── test └── java └── org └── littlewings ├── NativeReactiveGreetingResourceIT.java └── ReactiveGreetingResourceTest.java 13 directories, 13 files
このうち、Javaファイルは出力されなくてもいいかな、というのが今回の話です。
いったん、プロジェクトを削除。
$ rm -rf quarkus-example
Extension Codestartの内容を
QuarkusのApache Mavenに関するドキュメントには特に記載がないのですが、Extension Codestartの適用有無はnoCode
という
パラメーターで制御できるようです。
Quarkus - Building applications with Maven
試してみます。
mvn io.quarkus.platform:quarkus-maven-plugin:2.7.5.Final:create \ -DprojectGroupId=org.littlewings \ -DprojectArtifactId=quarkus-example \ -DprojectVersion=0.0.1-SNAPSHOT \ -Dextensions="resteasy-reactive" \ -DnoCode
Extension Codestartから、🚀resteasy-reactive-codestart
がなくなっています。
[INFO] selected extensions: - io.quarkus:quarkus-resteasy-reactive [INFO] applying codestarts... [INFO] 📚 java 🔨 maven 📦 quarkus 📝 config-properties 🔧 dockerfiles 🔧 maven-wrapper
結果。
$ tree quarkus-example quarkus-example ├── README.md ├── mvnw ├── mvnw.cmd ├── pom.xml └── src └── main ├── docker │ ├── Dockerfile.jvm │ ├── Dockerfile.legacy-jar │ ├── Dockerfile.native │ └── Dockerfile.native-micro ├── java └── resources └── application.properties 5 directories, 9 files
Javaファイルと、index.html
がなくなりました。まあ、index.html
はいいかなと…。
とりあえず、目的は達成できました。
中身を
もう少し中身を見てみましょう。
プロジェクト作成時に指定できるパラメーターは、ソースコードを見た方がハッキリしますね。
ところで、以下の並びから「Extension Codestart」が除外されたというのは、どうやって確認しましょうか。
[INFO] applying codestarts... [INFO] 📚 java 🔨 maven 📦 quarkus 📝 config-properties 🔧 dockerfiles 🔧 maven-wrapper 🚀 resteasy-reactive-codestart
この絵文字の意味を追ったら良さそうだなと思って、ソースコードを見たらこんな定義がありました。
LANGUAGE(true, 1, MessageIcons.toEmoji("U+1F4DA")), BUILDTOOL(true, 2, MessageIcons.toEmoji("U+1F528")), PROJECT(true, 3, MessageIcons.toEmoji("U+1F4E6")), CONFIG(true, 4, MessageIcons.toEmoji("U+1F4DD")), TOOLING(false, 5, MessageIcons.toEmoji("U+1F527")), CODE(false, 6, MessageIcons.toEmoji("U+1F680")),
というわけで、🚀がExtension Codestartですね。
他には、Dockerfile、Maven Wrapperの出力有無をコントロールできそうではありますが、Apache Mavenによるプロジェクト作成では
Extension Codestartのみが扱えるようです。
まあ、困りませんが…。
デフォルトでは、Dockerfile、Maven Wrapper、Extension Codestartが出力されるように含まれていて、こちらに定義があります。
public enum AppContent implements DataKey { BUILD_TOOL_WRAPPER, DOCKERFILES, CODE, }
private static final List<AppContent> FULL_CONTENT = Arrays.asList(AppContent.values());
今回は、こんなところで。