[JAVA] Hello World avec Micronaut

Micronaut?

Micronaut

Framework full stack basé sur Road to Micronaut 1.0-JVM

Récemment, j'ai l'impression d'entendre les noms ici et là, alors essayons-le.

environnement

L'environnement d'utilisation cette fois-ci est ici.

$ java -version
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-2ubuntu0.18.04.1-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

Installation de la CLI

La création d'une application semble commencer par la commande mn (CLI).

Téléchargez depuis la page de téléchargement ou installez avec SDKMAN.

Cette fois, installons à l'aide de SDKMAN.

Build/Install the CLI

$ sdk install micronaut

Cette fois, Micronaut 1.0.4 a été installé.

$ mn -V
| Micronaut Version: 1.0.4
| JVM Version: 1.8.0_191

Créer un modèle d'application

Maintenant, créons un modèle d'application en utilisant la commande mn.

Creating a Server Application

Gradle semble être utilisé pour le projet créé par mn create-app, mais je préfère personnellement Apache Maven, alors spécifiez --build maven pour utiliser Maven.

$ mn create-app hello-world --build maven

Cela créera le répertoire hello-world.

$ cd hello-world

Listons les fichiers générés.

$ tree
.
├── Dockerfile
├── micronaut-cli.yml
├── mvnw
├── mvnw.cmd
├── pom.xml
└── src
    ├── main
    │   ├── java
    │   │   └── hello
    │   │       └── world
    │   │           └── Application.java
    │   └── resources
    │       ├── application.yml
    │       └── logback.xml
    └── test
        └── java
            └── hello
                └── world

10 directories, 8 files

J'ai un projet utilisant Maven Wrapper.

Vous pouvez même créer un Dockerfile.

En regardant le pom.xml généré, la classe principale, maven-shade-plugin et ʻexec-maven-plugin` sont définies, et il semble qu'elles peuvent être utilisées telles quelles.

Cliquez ici pour une classe qui a une méthode principale.

src/main/java/hello/world/Application.java

package hello.world;

import io.micronaut.runtime.Micronaut;

public class Application {

    public static void main(String[] args) {
        Micronaut.run(Application.class);
    }
}

Construire, emballer.

$ ./mvnw package

Maintenant que le fichier JAR a été créé, commençons-le.

$ java -jar target/hello-world-0.1.jar 
12:56:59.043 [main] INFO  io.micronaut.runtime.Micronaut - Startup completed in 1108ms. Server Running: http://localhost:8080

Démarrez en 1 seconde!

Essayez d'accéder avec curl.

$ curl localhost:8080
{"_links":{"self":{"href":"/","templated":false}},"message":"Page Not Found"}

Non trouvé, mais une réponse a été renvoyée.

Maintenant, apprenons du document et créons un contrôleur.

src/main/java/hello/world/HelloController.java

package hello.world;

import io.micronaut.http.MediaType;
import io.micronaut.http.annotation.*;

@Controller("/hello") 
public class HelloController {
    @Get(produces = MediaType.TEXT_PLAIN) 
    public String index() {
        return "Hello World"; 
    }
}

Construisez et démarrez.

$ ./mvnw package
$ java -jar target/hello-world-0.1.jar

Vérification.

$ curl localhost:8080/hello
Hello World

Ça a marché.

Lors du développement avec IDE

Lors du développement avec IntelliJ IDEA, il semble que les processeurs d'annotation doivent être activés.

Setting up an IDE

L'ambiance est comme ça.

Lors du développement avec Groovy ou Kotlin

Au moment de mvn create-app, il semble être ajusté avec --features.

$ mn create-app hello-world-groovy --build maven --features=groovy

$ mn create-app hello-world-kotlin --build maven --features=kotlin

À propos des autres fichiers générés

Je vais le mettre.

pom.xml

<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>hello.world</groupId>
  <artifactId>hello-world</artifactId>
  <version>0.1</version>
  <properties>
    <micronaut.version>1.0.4</micronaut.version>
    <jdk.version>1.8</jdk.version>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <exec.mainClass>hello.world.Application</exec.mainClass>
  </properties>
  <repositories>
    <repository>
      <id>jcenter.bintray.com</id>
      <url>https://jcenter.bintray.com</url>
    </repository>
  </repositories>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>io.micronaut</groupId>
        <artifactId>micronaut-bom</artifactId>
        <version>${micronaut.version}</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>io.micronaut</groupId>
      <artifactId>micronaut-inject</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>io.micronaut</groupId>
      <artifactId>micronaut-validation</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>io.micronaut</groupId>
      <artifactId>micronaut-runtime</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>io.micronaut</groupId>
      <artifactId>micronaut-http-client</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>io.micronaut</groupId>
      <artifactId>micronaut-http-server-netty</artifactId>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>io.micronaut</groupId>
      <artifactId>micronaut-inject-java</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.3</version>
      <scope>runtime</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.hamcrest</groupId>
      <artifactId>hamcrest-all</artifactId>
      <version>1.3</version>
      <scope>test</scope>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>3.1.0</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <transformers>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <mainClass>${exec.mainClass}</mainClass>
                </transformer>
                <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
              </transformers>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.6.0</version>
        <configuration>
          <executable>java</executable>
          <arguments>
            <argument>-noverify</argument>
            <argument>-XX:TieredStopAtLevel=1</argument>
            <argument>-classpath</argument>
            <classpath/>
            <argument>${exec.mainClass}</argument>
          </arguments>
        </configuration>
      </plugin>
    </plugins>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>3.7.0</version>
          <configuration>
            <source>${jdk.version}</source>
            <target>${jdk.version}</target>
            <encoding>UTF-8</encoding>
            <compilerArgs>
              <arg>-parameters</arg>
            </compilerArgs>
            <annotationProcessorPaths>
                  <path>
                    <groupId>io.micronaut</groupId>
                    <artifactId>micronaut-inject-java</artifactId>
                    <version>${micronaut.version}</version>
                  </path>
                  <path>
                    <groupId>io.micronaut</groupId>
                    <artifactId>micronaut-validation</artifactId>
                    <version>${micronaut.version}</version>
                  </path>
            </annotationProcessorPaths>
          </configuration>
          <executions>
            <execution>
              <id>test-compile</id>
              <goals>
                <goal>testCompile</goal>
              </goals>
              <configuration>
                <compilerArgs>
                  <arg>-parameters</arg>
                </compilerArgs>
                <annotationProcessorPaths>
                  <path>
                    <groupId>io.micronaut</groupId>
                    <artifactId>micronaut-inject-java</artifactId>
                    <version>${micronaut.version}</version>
                  </path>
                  <path>
                    <groupId>io.micronaut</groupId>
                    <artifactId>micronaut-validation</artifactId>
                    <version>${micronaut.version}</version>
                  </path>
                </annotationProcessorPaths>
              </configuration>
            </execution>
          </executions>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

Dockerfile

FROM openjdk:8u171-alpine3.7
RUN apk --no-cache add curl
COPY target/hello-world*.jar hello-world.jar
CMD java ${JAVA_OPTS} -jar hello-world.jar

micronaut-cli.yml

profile: service
defaultPackage: hello.world
---
testFramework: junit
sourceLanguage: java

src/main/resources/application.yml

micronaut:
    application:
        name: hello-world

src/main/resources/logback.xml

<configuration>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <!-- encoders are assigned the type
             ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

Recommended Posts

Hello World avec Micronaut
Hello World avec Spring Boot
Bonjour tout le monde avec Spring Boot!
Bonjour tout le monde avec VS Code!
Hello World avec Spring Boot
Hello World avec SpringBoot / Gradle
Bonjour tout le monde! Avec Asakusa Framework!
Bonjour tout le monde avec Kotlin et JavaFX
(Intellij) Hello World avec Spring Boot
Créez un PDF avec itext7 ~ HelloWorld ~
"Hello world" pour ImageJ avec Eclipse
Lire "Hello world"
Java, bonjour le monde!
Java Hello World
Hello World avec Eclipse + Spring Boot + Maven
Bonjour tout le monde avec le moteur de modèle Java Thymeleaf
Développement Java avec Codenvy: Hello World! Run
"Hello, World!" Avec Kotlin + CLI en 5 minutes
Comment Spring Security fonctionne avec Hello World
(IntelliJ + gradle) Hello World avec Spring Boot
Essayez DI avec Micronaut
"Hello World" en Java
Hello World avec JavaFX 11 (OpenJFX) de Liberica JDK 11
Apprendre Java (1) - Hello World
Bonjour tout le monde! Avec Spring Boot (Marven + éditeur de texte)
Lire System.out.println ("bonjour, monde")
Écrivons Hello World
Exécutez JSP Hello World avec Tomcat sur Docker
Hello World en Java
Étudier Java-Partie 1-Hello World
[Java] Hello World avec Java 14 x Spring Boot 2.3 x JUnit 5 ~
Afficher un simple Hello World avec SpringBoot + IntelliJ
Essayez d'afficher Hello World avec Spring + Gradle
Hello World avec Web Assembly
Fonction sans serveur avec Micronaut
Facile à afficher Hello World avec Rails + Docker
Hello World (API REST) avec Apache Camel + Spring Boot 2
Hello World (application console) avec Apache Camel + Spring Boot 2
[Vue Rails] "Hello Vue!" Affiché avec Vue + Rails
Accédez à Apache Kafka avec Micronaut
java bonjour le monde, compilez, exécutez
Les débutants en Java lisent Hello World
[Java] Un type d'alphabet interdit Avec reliure Bonjour tout le monde! [Reliure]
Hello World avec la bibliothèque d'extension Ruby pour le moment
Créez une application Web Hello World avec Spring Framework + Jetty
Spring Boot Hello World dans Eclipse
Ecrire un serveur réactif avec Micronaut
[Swift] Créez un projet avec Xcode (ver 12.1) et affichez "Hello, World!"
Hello World pour le plugin Java ImageJ
Jusqu'à ce que vous exécutiez Hello World of JavaFX avec VSCode + Gradle
Essayez HelloWorld avec la configuration minimale de Heroku Java spring-boot
Hello World avec AWS Lambda + Java
Ajouter une validation de bean avec Micronaut (Java)
Bonjour le monde de Java dans Eclipse maintenant
Comparez Hello, world! Avec Spring Boot avec Java, Kotlin et Groovy
bonjour, monde dans Vanilla Java-EHW2018 "MVP"
Version du système d'exploitation Android (7.1.2) et Hello World
Bonjour tout le monde en Java et Gradle
Développement d'applications Web Spring5 MVC avec Visual Studio Code Hello World Creation
Développement d'applications Web Spring Boot2 avec création de Visual Studio Code Hello World