Skip to content
Snippets Groups Projects
Commit e9357c10 authored by Sören Henning's avatar Sören Henning
Browse files

Merge branch '97-rewritte-theodolite' into 'theodolite-kotlin'

Base Template for Theodolite Kotlin Implementation

See merge request !75
parents 8e0b696d b4580707
No related branches found
No related tags found
4 merge requests!159Re-implementation of Theodolite with Kotlin/Quarkus,!157Update Graal Image in CI pipeline,!83WIP: Re-implementation of Theodolite with Kotlin/Quarkus,!75Base Template for Theodolite Kotlin Implementation
Pipeline #1467 passed
Pipeline: theodolite

#1469

    Pipeline: theodolite

    #1468

      Showing
      with 904 additions and 0 deletions
      *
      !build/*-runner
      !build/*-runner.jar
      !build/lib/*
      !build/quarkus-app/*
      \ No newline at end of file
      # Gradle
      .gradle/
      build/
      # Eclipse
      .project
      .classpath
      .settings/
      bin/
      # IntelliJ
      .idea
      *.ipr
      *.iml
      *.iws
      # NetBeans
      nb-configuration.xml
      # Visual Studio Code
      .vscode
      .factorypath
      # OSX
      .DS_Store
      # Vim
      *.swp
      *.swo
      # patch
      *.orig
      *.rej
      # theodolite-quarkus project
      This project uses Quarkus, the Supersonic Subatomic Java Framework.
      If you want to learn more about Quarkus, please visit its website: https://quarkus.io/ .
      ## Running the application in dev mode
      You can run your application in dev mode that enables live coding using:
      ```shell script
      ./gradlew quarkusDev
      ```
      ## Packaging and running the application
      The application can be packaged using:
      ```shell script
      ./gradlew build
      ```
      It produces the `theodolite-quarkus-1.0.0-SNAPSHOT-runner.jar` file in the `/build` directory.
      Be aware that it’s not an _über-jar_ as the dependencies are copied into the `build/lib` directory.
      If you want to build an _über-jar_, execute the following command:
      ```shell script
      ./gradlew build -Dquarkus.package.type=uber-jar
      ```
      The application is now runnable using `java -jar build/theodolite-quarkus-1.0.0-SNAPSHOT-runner.jar`.
      ## Creating a native executable
      You can create a native executable using:
      ```shell script
      ./gradlew build -Dquarkus.package.type=native
      ```
      Or, if you don't have GraalVM installed, you can run the native executable build in a container using:
      ```shell script
      ./gradlew build -Dquarkus.package.type=native -Dquarkus.native.container-build=true
      ```
      You can then execute your native executable with:
      ```./build/theodolite-quarkus-1.0.0-SNAPSHOT-runner```
      If you want to learn more about building native executables, please consult https://quarkus.io/guides/gradle-tooling.
      # RESTEasy JAX-RS
      <p>A Hello World RESTEasy resource</p>
      Guide: https://quarkus.io/guides/rest-json
      ## Build and afterwards run the application in Docker container
      ```build_jvm.sh``` to build the jvm version
      ```build_native.sh``` to build the native image graal version
      ## Install Detekt Code analysis Plugin
      Install https://plugins.jetbrains.com/plugin/10761-detekt
      - Install the plugin
      - Navigate to Settings/Preferences -> Tools -> Detekt
      - Check Enable Detekt
      - Specify your detekt configuration and baseline file (optional)
      -> detekt issues will be annotated on-the-fly while coding
      **ingore Failures in build:** add
      ```ignoreFailures = true```
      to build.gradle detekt task
      plugins {
      id 'org.jetbrains.kotlin.jvm' version "1.3.72"
      id "org.jetbrains.kotlin.plugin.allopen" version "1.3.72"
      id 'io.quarkus'
      id "io.gitlab.arturbosch.detekt" version "1.15.0"
      }
      repositories {
      mavenLocal()
      mavenCentral()
      jcenter()
      }
      dependencies {
      implementation enforcedPlatform("${quarkusPlatformGroupId}:${quarkusPlatformArtifactId}:${quarkusPlatformVersion}")
      implementation 'io.quarkus:quarkus-kotlin'
      implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
      implementation 'io.quarkus:quarkus-arc'
      implementation 'io.quarkus:quarkus-resteasy'
      testImplementation 'io.quarkus:quarkus-junit5'
      testImplementation 'io.rest-assured:rest-assured'
      implementation 'io.fabric8:kubernetes-client:5.0.0-alpha-2'
      //implementation 'com.fkorotkov:kubernetes-dsl:2.8.1'
      }
      group 'theodolite'
      version '1.0.0-SNAPSHOT'
      java {
      sourceCompatibility = JavaVersion.VERSION_11
      targetCompatibility = JavaVersion.VERSION_11
      }
      allOpen {
      annotation("javax.ws.rs.Path")
      annotation("javax.enterprise.context.ApplicationScoped")
      annotation("io.quarkus.test.junit.QuarkusTest")
      }
      compileKotlin {
      kotlinOptions.jvmTarget = JavaVersion.VERSION_11
      kotlinOptions.javaParameters = true
      }
      compileTestKotlin {
      kotlinOptions.jvmTarget = JavaVersion.VERSION_11
      }
      detekt {
      failFast = true // fail build on any finding
      buildUponDefaultConfig = true
      ignoreFailures = true
      }
      ./gradlew build
      docker build -f src/main/docker/Dockerfile.jvm -t quarkus/theodolite-quarkus-jvm .
      docker run -i --rm -p 8080:8080 quarkus/theodolite-quarkus-jvm
      ./gradlew build -Dquarkus.package.type=native
      docker build -f src/main/docker/Dockerfile.native -t quarkus/theodolite-quarkus .
      docker run -i --rm -p 8080:8080 quarkus/theodolite-quarkus
      #Gradle properties
      quarkusPluginId=io.quarkus
      quarkusPluginVersion=1.10.3.Final
      quarkusPlatformGroupId=io.quarkus
      quarkusPlatformArtifactId=quarkus-universe-bom
      quarkusPlatformVersion=1.10.3.Final
      org.gradle.logging.level=INFO
      \ No newline at end of file
      File added
      distributionBase=GRADLE_USER_HOME
      distributionPath=wrapper/dists
      distributionUrl=https\://services.gradle.org/distributions/gradle-6.5.1-bin.zip
      zipStoreBase=GRADLE_USER_HOME
      zipStorePath=wrapper/dists
      #!/usr/bin/env sh
      #
      # Copyright 2015 the original author or authors.
      #
      # Licensed under the Apache License, Version 2.0 (the "License");
      # you may not use this file except in compliance with the License.
      # You may obtain a copy of the License at
      #
      # https://www.apache.org/licenses/LICENSE-2.0
      #
      # Unless required by applicable law or agreed to in writing, software
      # distributed under the License is distributed on an "AS IS" BASIS,
      # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      # See the License for the specific language governing permissions and
      # limitations under the License.
      #
      ##############################################################################
      ##
      ## Gradle start up script for UN*X
      ##
      ##############################################################################
      # Attempt to set APP_HOME
      # Resolve links: $0 may be a link
      PRG="$0"
      # Need this for relative symlinks.
      while [ -h "$PRG" ] ; do
      ls=`ls -ld "$PRG"`
      link=`expr "$ls" : '.*-> \(.*\)$'`
      if expr "$link" : '/.*' > /dev/null; then
      PRG="$link"
      else
      PRG=`dirname "$PRG"`"/$link"
      fi
      done
      SAVED="`pwd`"
      cd "`dirname \"$PRG\"`/" >/dev/null
      APP_HOME="`pwd -P`"
      cd "$SAVED" >/dev/null
      APP_NAME="Gradle"
      APP_BASE_NAME=`basename "$0"`
      # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
      DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
      # Use the maximum available, or set MAX_FD != -1 to use that value.
      MAX_FD="maximum"
      warn () {
      echo "$*"
      }
      die () {
      echo
      echo "$*"
      echo
      exit 1
      }
      # OS specific support (must be 'true' or 'false').
      cygwin=false
      msys=false
      darwin=false
      nonstop=false
      case "`uname`" in
      CYGWIN* )
      cygwin=true
      ;;
      Darwin* )
      darwin=true
      ;;
      MINGW* )
      msys=true
      ;;
      NONSTOP* )
      nonstop=true
      ;;
      esac
      CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
      # Determine the Java command to use to start the JVM.
      if [ -n "$JAVA_HOME" ] ; then
      if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
      # IBM's JDK on AIX uses strange locations for the executables
      JAVACMD="$JAVA_HOME/jre/sh/java"
      else
      JAVACMD="$JAVA_HOME/bin/java"
      fi
      if [ ! -x "$JAVACMD" ] ; then
      die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
      Please set the JAVA_HOME variable in your environment to match the
      location of your Java installation."
      fi
      else
      JAVACMD="java"
      which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
      Please set the JAVA_HOME variable in your environment to match the
      location of your Java installation."
      fi
      # Increase the maximum file descriptors if we can.
      if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
      MAX_FD_LIMIT=`ulimit -H -n`
      if [ $? -eq 0 ] ; then
      if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
      MAX_FD="$MAX_FD_LIMIT"
      fi
      ulimit -n $MAX_FD
      if [ $? -ne 0 ] ; then
      warn "Could not set maximum file descriptor limit: $MAX_FD"
      fi
      else
      warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
      fi
      fi
      # For Darwin, add options to specify how the application appears in the dock
      if $darwin; then
      GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
      fi
      # For Cygwin or MSYS, switch paths to Windows format before running java
      if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
      APP_HOME=`cygpath --path --mixed "$APP_HOME"`
      CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
      JAVACMD=`cygpath --unix "$JAVACMD"`
      # We build the pattern for arguments to be converted via cygpath
      ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
      SEP=""
      for dir in $ROOTDIRSRAW ; do
      ROOTDIRS="$ROOTDIRS$SEP$dir"
      SEP="|"
      done
      OURCYGPATTERN="(^($ROOTDIRS))"
      # Add a user-defined pattern to the cygpath arguments
      if [ "$GRADLE_CYGPATTERN" != "" ] ; then
      OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
      fi
      # Now convert the arguments - kludge to limit ourselves to /bin/sh
      i=0
      for arg in "$@" ; do
      CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
      CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
      if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
      eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
      else
      eval `echo args$i`="\"$arg\""
      fi
      i=`expr $i + 1`
      done
      case $i in
      0) set -- ;;
      1) set -- "$args0" ;;
      2) set -- "$args0" "$args1" ;;
      3) set -- "$args0" "$args1" "$args2" ;;
      4) set -- "$args0" "$args1" "$args2" "$args3" ;;
      5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
      6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
      7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
      8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
      9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
      esac
      fi
      # Escape application args
      save () {
      for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
      echo " "
      }
      APP_ARGS=`save "$@"`
      # Collect all arguments for the java command, following the shell quoting and substitution rules
      eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
      exec "$JAVACMD" "$@"
      @rem
      @rem Copyright 2015 the original author or authors.
      @rem
      @rem Licensed under the Apache License, Version 2.0 (the "License");
      @rem you may not use this file except in compliance with the License.
      @rem You may obtain a copy of the License at
      @rem
      @rem https://www.apache.org/licenses/LICENSE-2.0
      @rem
      @rem Unless required by applicable law or agreed to in writing, software
      @rem distributed under the License is distributed on an "AS IS" BASIS,
      @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      @rem See the License for the specific language governing permissions and
      @rem limitations under the License.
      @rem
      @if "%DEBUG%" == "" @echo off
      @rem ##########################################################################
      @rem
      @rem Gradle startup script for Windows
      @rem
      @rem ##########################################################################
      @rem Set local scope for the variables with windows NT shell
      if "%OS%"=="Windows_NT" setlocal
      set DIRNAME=%~dp0
      if "%DIRNAME%" == "" set DIRNAME=.
      set APP_BASE_NAME=%~n0
      set APP_HOME=%DIRNAME%
      @rem Resolve any "." and ".." in APP_HOME to make it shorter.
      for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
      @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
      set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
      @rem Find java.exe
      if defined JAVA_HOME goto findJavaFromJavaHome
      set JAVA_EXE=java.exe
      %JAVA_EXE% -version >NUL 2>&1
      if "%ERRORLEVEL%" == "0" goto init
      echo.
      echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
      echo.
      echo Please set the JAVA_HOME variable in your environment to match the
      echo location of your Java installation.
      goto fail
      :findJavaFromJavaHome
      set JAVA_HOME=%JAVA_HOME:"=%
      set JAVA_EXE=%JAVA_HOME%/bin/java.exe
      if exist "%JAVA_EXE%" goto init
      echo.
      echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
      echo.
      echo Please set the JAVA_HOME variable in your environment to match the
      echo location of your Java installation.
      goto fail
      :init
      @rem Get command-line arguments, handling Windows variants
      if not "%OS%" == "Windows_NT" goto win9xME_args
      :win9xME_args
      @rem Slurp the command line arguments.
      set CMD_LINE_ARGS=
      set _SKIP=2
      :win9xME_args_slurp
      if "x%~1" == "x" goto execute
      set CMD_LINE_ARGS=%*
      :execute
      @rem Setup the command line
      set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
      @rem Execute Gradle
      "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
      :end
      @rem End local scope for the variables with windows NT shell
      if "%ERRORLEVEL%"=="0" goto mainEnd
      :fail
      rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
      rem the _cmd.exe /c_ return code!
      if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
      exit /b 1
      :mainEnd
      if "%OS%"=="Windows_NT" endlocal
      :omega
      pluginManagement {
      repositories {
      mavenLocal()
      mavenCentral()
      gradlePluginPortal()
      }
      plugins {
      id "${quarkusPluginId}" version "${quarkusPluginVersion}"
      }
      }
      rootProject.name='theodolite-quarkus'
      ####
      # This Dockerfile is used in order to build a container that runs the Quarkus application in JVM mode
      #
      # Before building the container image run:
      #
      # ./gradlew build -Dquarkus.package.type=fast-jar
      #
      # Then, build the image with:
      #
      # docker build -f src/main/docker/Dockerfile.fast-jar -t quarkus/theodolite-quarkus-fast-jar .
      #
      # Then run the container using:
      #
      # docker run -i --rm -p 8080:8080 quarkus/theodolite-quarkus-fast-jar
      #
      # If you want to include the debug port into your docker image
      # you will have to expose the debug port (default 5005) like this : EXPOSE 8080 5050
      #
      # Then run the container using :
      #
      # docker run -i --rm -p 8080:8080 -p 5005:5005 -e JAVA_ENABLE_DEBUG="true" quarkus/theodolite-quarkus-fast-jar
      #
      ###
      FROM registry.access.redhat.com/ubi8/ubi-minimal:8.3
      ARG JAVA_PACKAGE=java-11-openjdk-headless
      ARG RUN_JAVA_VERSION=1.3.8
      ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en'
      # Install java and the run-java script
      # Also set up permissions for user `1001`
      RUN microdnf install curl ca-certificates ${JAVA_PACKAGE} \
      && microdnf update \
      && microdnf clean all \
      && mkdir /deployments \
      && chown 1001 /deployments \
      && chmod "g+rwX" /deployments \
      && chown 1001:root /deployments \
      && curl https://repo1.maven.org/maven2/io/fabric8/run-java-sh/${RUN_JAVA_VERSION}/run-java-sh-${RUN_JAVA_VERSION}-sh.sh -o /deployments/run-java.sh \
      && chown 1001 /deployments/run-java.sh \
      && chmod 540 /deployments/run-java.sh \
      && echo "securerandom.source=file:/dev/urandom" >> /etc/alternatives/jre/lib/security/java.security
      # Configure the JAVA_OPTIONS, you can add -XshowSettings:vm to also display the heap size.
      ENV JAVA_OPTIONS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
      # We make four distinct layers so if there are application changes the library layers can be re-used
      COPY --chown=1001 build/quarkus-app/lib/ /deployments/lib/
      COPY --chown=1001 build/quarkus-app/*.jar /deployments/
      COPY --chown=1001 build/quarkus-app/app/ /deployments/app/
      COPY --chown=1001 build/quarkus-app/quarkus/ /deployments/quarkus/
      EXPOSE 8080
      USER 1001
      ENTRYPOINT [ "/deployments/run-java.sh" ]
      ####
      # This Dockerfile is used in order to build a container that runs the Quarkus application in JVM mode
      #
      # Before building the container image run:
      #
      # ./gradlew build
      #
      # Then, build the image with:
      #
      # docker build -f src/main/docker/Dockerfile.jvm -t quarkus/theodolite-quarkus-jvm .
      #
      # Then run the container using:
      #
      # docker run -i --rm -p 8080:8080 quarkus/theodolite-quarkus-jvm
      #
      # If you want to include the debug port into your docker image
      # you will have to expose the debug port (default 5005) like this : EXPOSE 8080 5050
      #
      # Then run the container using :
      #
      # docker run -i --rm -p 8080:8080 -p 5005:5005 -e JAVA_ENABLE_DEBUG="true" quarkus/theodolite-quarkus-jvm
      #
      ###
      FROM registry.access.redhat.com/ubi8/ubi-minimal:8.3
      ARG JAVA_PACKAGE=java-11-openjdk-headless
      ARG RUN_JAVA_VERSION=1.3.8
      ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en'
      # Install java and the run-java script
      # Also set up permissions for user `1001`
      RUN microdnf install curl ca-certificates ${JAVA_PACKAGE} \
      && microdnf update \
      && microdnf clean all \
      && mkdir /deployments \
      && chown 1001 /deployments \
      && chmod "g+rwX" /deployments \
      && chown 1001:root /deployments \
      && curl https://repo1.maven.org/maven2/io/fabric8/run-java-sh/${RUN_JAVA_VERSION}/run-java-sh-${RUN_JAVA_VERSION}-sh.sh -o /deployments/run-java.sh \
      && chown 1001 /deployments/run-java.sh \
      && chmod 540 /deployments/run-java.sh \
      && echo "securerandom.source=file:/dev/urandom" >> /etc/alternatives/jre/lib/security/java.security
      # Configure the JAVA_OPTIONS, you can add -XshowSettings:vm to also display the heap size.
      ENV JAVA_OPTIONS="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
      COPY build/lib/* /deployments/lib/
      COPY build/*-runner.jar /deployments/app.jar
      EXPOSE 8080
      USER 1001
      ENTRYPOINT [ "/deployments/run-java.sh" ]
      ####
      # This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode
      #
      # Before building the container image run:
      #
      # ./gradlew build -Dquarkus.package.type=native
      #
      # Then, build the image with:
      #
      # docker build -f src/main/docker/Dockerfile.native -t quarkus/theodolite-quarkus .
      #
      # Then run the container using:
      #
      # docker run -i --rm -p 8080:8080 quarkus/theodolite-quarkus
      #
      ###
      FROM registry.access.redhat.com/ubi8/ubi-minimal:8.3
      WORKDIR /work/
      RUN chown 1001 /work \
      && chmod "g+rwX" /work \
      && chown 1001:root /work
      COPY --chown=1001:root build/*-runner /work/application
      EXPOSE 8080
      USER 1001
      CMD ["./application", "-Dquarkus.http.host=0.0.0.0"]
      package theodolite
      import javax.ws.rs.GET
      import javax.ws.rs.Path
      import javax.ws.rs.Produces
      import javax.ws.rs.core.MediaType
      @Path("/hello-resteasy")
      class GreetingResource {
      @GET
      @Produces(MediaType.TEXT_PLAIN)
      fun hello() = "Hello RESTEasy"
      }
      \ No newline at end of file
      package theodolite
      import io.quarkus.runtime.annotations.QuarkusMain
      @QuarkusMain
      object Main {
      @JvmStatic
      fun main(args: Array<String>) {
      println("Running main method")
      //Quarkus.run()
      }
      }
      <!DOCTYPE html>
      <html lang="en">
      <head>
      <meta charset="UTF-8">
      <title>theodolite-quarkus - 1.0.0-SNAPSHOT</title>
      <style>
      h1, h2, h3, h4, h5, h6 {
      margin-bottom: 0.5rem;
      font-weight: 400;
      line-height: 1.5;
      }
      h1 {
      font-size: 2.5rem;
      }
      h2 {
      font-size: 2rem
      }
      h3 {
      font-size: 1.75rem
      }
      h4 {
      font-size: 1.5rem
      }
      h5 {
      font-size: 1.25rem
      }
      h6 {
      font-size: 1rem
      }
      .lead {
      font-weight: 300;
      font-size: 2rem;
      }
      .banner {
      font-size: 2.7rem;
      margin: 0;
      padding: 2rem 1rem;
      background-color: #0d1c2c;
      color: white;
      }
      body {
      margin: 0;
      font-family: -apple-system, system-ui, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
      }
      code {
      font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
      font-size: 87.5%;
      color: #e83e8c;
      word-break: break-word;
      }
      .left-column {
      padding: .75rem;
      max-width: 75%;
      min-width: 55%;
      }
      .right-column {
      padding: .75rem;
      max-width: 25%;
      }
      .container {
      display: flex;
      width: 100%;
      }
      li {
      margin: 0.75rem;
      }
      .right-section {
      margin-left: 1rem;
      padding-left: 0.5rem;
      }
      .right-section h3 {
      padding-top: 0;
      font-weight: 200;
      }
      .right-section ul {
      border-left: 0.3rem solid #71aeef;
      list-style-type: none;
      padding-left: 0;
      }
      .examples {
      display: flex;
      flex-wrap: wrap;
      margin: 20px 0 20px -40px;
      }
      .example {
      display: flex;
      margin-left: 20px;
      margin-bottom: 20px;
      flex-direction: column;
      width: 350px;
      background-color: #205894;
      color: white;
      }
      .example code {
      color: lightgrey;
      }
      .example-header {
      padding: 20px;
      display: flex;
      position: relative;
      }
      .example-header h4 {
      margin: 0;
      font-size: 1.4rem;
      flex-grow: 1;
      line-height: 1.5;
      }
      .example-description {
      padding: 0 20px;
      flex-grow: 1;
      }
      .example-paths {
      display: flex;
      flex-direction: column;
      }
      .example-paths a {
      display: block;
      background-color: transparent;
      font-family: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
      color: white;
      padding: 10px;
      text-decoration: none;
      }
      .example-paths a:before {
      content: '⇨';
      font-weight: bold;
      font-size: 1.5rem;
      margin: 20px;
      }
      .example-paths a:hover {
      background-color: #0d1c2c;
      }
      .guide-link {
      background-color: #71aeef;
      position: absolute;
      color: white;
      text-decoration: none;
      top: 0;
      right: 0;
      padding: 7px;
      font-weight: bold;
      }
      .guide-link:hover {
      background-color: #0d1c2c;
      }
      </style>
      </head>
      <body>
      <div class="banner lead">
      Your new Cloud-Native application is ready!
      </div>
      <div class="container">
      <div class="left-column">
      <p class="lead"> Congratulations, you have created a new Quarkus cloud application.</p>
      <h2>Why do you see this?</h2>
      <p>This page is served by Quarkus. The source is in
      <code>src/main/resources/META-INF/resources/index.html</code>.</p>
      <h2>What can I do from here?</h2>
      <p>If not already done, run the application in <em>dev mode</em> using: <code>./gradlew quarkusDev</code>.
      </p>
      <ul>
      <li>Play with your example code in <code>src/main/kotlin</code>:
      <div class="examples">
      <div class="example">
      <div class="example-header">
      <h4>RESTEasy JAX-RS</h4>
      <a href="https://quarkus.io/guides/rest-json" target="_blank" class="guide-link">Guide</a>
      </div>
      <div class="example-description">
      <p>A Hello World RESTEasy resource</p>
      </div>
      <div class="example-paths">
      <a href="/hello-resteasy" class="path-link" target="_blank">GET /hello-resteasy</a>
      </div>
      </div>
      </div>
      </li>
      <li>Your static assets are located in <code>src/main/resources/META-INF/resources</code>.</li>
      <li>Configure your application in <code>src/main/resources/application.properties</code>.</li>
      </ul>
      <h2>Do you like Quarkus?</h2>
      <p>Go give it a star on <a href="https://github.com/quarkusio/quarkus">GitHub</a>.</p>
      </div>
      <div class="right-column">
      <div class="right-section">
      <h3>Application</h3>
      <ul>
      <li>GroupId: theodolite</li>
      <li>ArtifactId: theodolite-quarkus</li>
      <li>Version: 1.0.0-SNAPSHOT</li>
      <li>Quarkus Version: 1.10.3.Final</li>
      </ul>
      </div>
      <div class="right-section">
      <h3>Next steps</h3>
      <ul>
      <li><a href="https://quarkus.io/guides/gradle-tooling" target="_blank">Setup your IDE</a></li>
      <li><a href="https://quarkus.io/guides/getting-started.html" target="_blank">Getting started</a></li>
      <li><a href="https://quarkus.io" target="_blank">Quarkus Web Site</a></li>
      </ul>
      </div>
      </div>
      </div>
      </body>
      </html>
      \ No newline at end of file
      package theodolite
      import io.quarkus.test.junit.NativeImageTest
      @NativeImageTest
      class NativeGreetingResourceIT : GreetingResourceTest()
      \ No newline at end of file
      0% Loading or .
      You are about to add 0 people to the discussion. Proceed with caution.
      Finish editing this message first!
      Please register or to comment