From 348263ea35e21e11899fea8065e66bab1e1a6527 Mon Sep 17 00:00:00 2001 From: Haocheng Zhang Date: Fri, 18 Dec 2020 12:14:58 +0800 Subject: [PATCH] First commit --- .dockerignore | 5 + .gitignore | 36 +++ README.md | 50 +++++ build.gradle | 34 +++ gradle.properties | 8 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 58910 bytes gradle/wrapper/gradle-wrapper.properties | 5 + gradlew | 185 ++++++++++++++++ gradlew.bat | 104 +++++++++ settings.gradle | 11 + src/main/docker/Dockerfile.fast-jar | 54 +++++ src/main/docker/Dockerfile.jvm | 51 +++++ src/main/docker/Dockerfile.native | 27 +++ .../stevenhaocheng/java/beige/BeigeResource.java | 16 ++ src/main/resources/META-INF/resources/index.html | 242 +++++++++++++++++++++ src/main/resources/application.properties | 0 .../java/beige/NativeBeigeResourceIT.java | 9 + .../java/beige/BeigeResourceTest.java | 21 ++ 18 files changed, 858 insertions(+) create mode 100644 .dockerignore create mode 100644 .gitignore create mode 100644 README.md create mode 100644 build.gradle create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle create mode 100644 src/main/docker/Dockerfile.fast-jar create mode 100644 src/main/docker/Dockerfile.jvm create mode 100644 src/main/docker/Dockerfile.native create mode 100644 src/main/java/ga/stevenhaocheng/java/beige/BeigeResource.java create mode 100644 src/main/resources/META-INF/resources/index.html create mode 100644 src/main/resources/application.properties create mode 100644 src/native-test/java/ga/stevenhaocheng/java/beige/NativeBeigeResourceIT.java create mode 100644 src/test/java/ga/stevenhaocheng/java/beige/BeigeResourceTest.java diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..4361d2f --- /dev/null +++ b/.dockerignore @@ -0,0 +1,5 @@ +* +!build/*-runner +!build/*-runner.jar +!build/lib/* +!build/quarkus-app/* \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..285b6ba --- /dev/null +++ b/.gitignore @@ -0,0 +1,36 @@ +# 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 + +# Local environment +.env diff --git a/README.md b/README.md new file mode 100644 index 0000000..41ed9cc --- /dev/null +++ b/README.md @@ -0,0 +1,50 @@ +# beige0 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 `beige0-0.1-alpha1-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/beige0-0.1-alpha1-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/beige0-0.1-alpha1-runner` + +If you want to learn more about building native executables, please consult https://quarkus.io/guides/gradle-tooling. + +# RESTEasy JAX-RS + +

A Hello World RESTEasy resource

+ +Guide: https://quarkus.io/guides/rest-json diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..2703ee9 --- /dev/null +++ b/build.gradle @@ -0,0 +1,34 @@ +plugins { + id 'java' + id 'io.quarkus' +} + +repositories { + mavenLocal() + mavenCentral() +} + +dependencies { + implementation enforcedPlatform("${quarkusPlatformGroupId}:${quarkusPlatformArtifactId}:${quarkusPlatformVersion}") + implementation 'io.quarkus:quarkus-resteasy' + implementation 'io.quarkus:quarkus-arc' + testImplementation 'io.quarkus:quarkus-junit5' + testImplementation 'io.rest-assured:rest-assured' +} + +group 'ga.stevenhaocheng.java.beige' +version '0.1-alpha1' + +java { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 +} + +compileJava { + options.encoding = 'UTF-8' + options.compilerArgs << '-parameters' +} + +compileTestJava { + options.encoding = 'UTF-8' +} diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..9e733b7 --- /dev/null +++ b/gradle.properties @@ -0,0 +1,8 @@ +#Gradle properties +quarkusPluginId=io.quarkus +quarkusPluginVersion=1.10.5.Final +quarkusPlatformGroupId=io.quarkus +quarkusPlatformArtifactId=quarkus-universe-bom +quarkusPlatformVersion=1.10.5.Final + +org.gradle.logging.level=INFO \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..62d4c053550b91381bbd28b1afc82d634bf73a8a GIT binary patch literal 58910 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 literal 0 HcwPel00001 diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..bb8b2fc --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +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 diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..fbd7c51 --- /dev/null +++ b/gradlew @@ -0,0 +1,185 @@ +#!/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" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..5093609 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,104 @@ +@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 diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..b02d8cb --- /dev/null +++ b/settings.gradle @@ -0,0 +1,11 @@ +pluginManagement { + repositories { + mavenLocal() + mavenCentral() + gradlePluginPortal() + } + plugins { + id "${quarkusPluginId}" version "${quarkusPluginVersion}" + } +} +rootProject.name='beige0' diff --git a/src/main/docker/Dockerfile.fast-jar b/src/main/docker/Dockerfile.fast-jar new file mode 100644 index 0000000..72a7db7 --- /dev/null +++ b/src/main/docker/Dockerfile.fast-jar @@ -0,0 +1,54 @@ +#### +# 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/beige0-fast-jar . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/beige0-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/beige0-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" ] diff --git a/src/main/docker/Dockerfile.jvm b/src/main/docker/Dockerfile.jvm new file mode 100644 index 0000000..c1c2635 --- /dev/null +++ b/src/main/docker/Dockerfile.jvm @@ -0,0 +1,51 @@ +#### +# 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/beige0-jvm . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/beige0-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/beige0-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" ] diff --git a/src/main/docker/Dockerfile.native b/src/main/docker/Dockerfile.native new file mode 100644 index 0000000..51b7efb --- /dev/null +++ b/src/main/docker/Dockerfile.native @@ -0,0 +1,27 @@ +#### +# 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/beige0 . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/beige0 +# +### +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"] diff --git a/src/main/java/ga/stevenhaocheng/java/beige/BeigeResource.java b/src/main/java/ga/stevenhaocheng/java/beige/BeigeResource.java new file mode 100644 index 0000000..c39b048 --- /dev/null +++ b/src/main/java/ga/stevenhaocheng/java/beige/BeigeResource.java @@ -0,0 +1,16 @@ +package ga.stevenhaocheng.java.beige; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +@Path("/hello-resteasy") +public class BeigeResource { + + @GET + @Produces(MediaType.TEXT_PLAIN) + public String hello() { + return "Hello RESTEasy"; + } +} \ No newline at end of file diff --git a/src/main/resources/META-INF/resources/index.html b/src/main/resources/META-INF/resources/index.html new file mode 100644 index 0000000..75bca07 --- /dev/null +++ b/src/main/resources/META-INF/resources/index.html @@ -0,0 +1,242 @@ + + + + + beige0 - 0.1-alpha1 + + + + + + +
+
+

Congratulations, you have created a new Quarkus cloud application.

+ +

Why do you see this?

+ +

This page is served by Quarkus. The source is in + src/main/resources/META-INF/resources/index.html.

+ +

What can I do from here?

+ +

If not already done, run the application in dev mode using: ./gradlew quarkusDev. +

+
    +
  • Play with your example code in src/main/java: +
    +
    +
    +

    RESTEasy JAX-RS

    + Guide +
    +
    +

    A Hello World RESTEasy resource

    + +
    + +
    + +
    +
  • +
  • Your static assets are located in src/main/resources/META-INF/resources.
  • +
  • Configure your application in src/main/resources/application.properties.
  • +
+

Do you like Quarkus?

+

Go give it a star on GitHub.

+
+
+
+

Application

+
    +
  • GroupId: ga.stevenhaocheng.java.beige
  • +
  • ArtifactId: beige0
  • +
  • Version: 0.1-alpha1
  • +
  • Quarkus Version: 1.10.5.Final
  • +
+
+ +
+
+ + \ No newline at end of file diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties new file mode 100644 index 0000000..e69de29 diff --git a/src/native-test/java/ga/stevenhaocheng/java/beige/NativeBeigeResourceIT.java b/src/native-test/java/ga/stevenhaocheng/java/beige/NativeBeigeResourceIT.java new file mode 100644 index 0000000..5690683 --- /dev/null +++ b/src/native-test/java/ga/stevenhaocheng/java/beige/NativeBeigeResourceIT.java @@ -0,0 +1,9 @@ +package ga.stevenhaocheng.java.beige; + +import io.quarkus.test.junit.NativeImageTest; + +@NativeImageTest +public class NativeBeigeResourceIT extends BeigeResourceTest { + + // Execute the same tests but in native mode. +} \ No newline at end of file diff --git a/src/test/java/ga/stevenhaocheng/java/beige/BeigeResourceTest.java b/src/test/java/ga/stevenhaocheng/java/beige/BeigeResourceTest.java new file mode 100644 index 0000000..35164af --- /dev/null +++ b/src/test/java/ga/stevenhaocheng/java/beige/BeigeResourceTest.java @@ -0,0 +1,21 @@ +package ga.stevenhaocheng.java.beige; + +import io.quarkus.test.junit.QuarkusTest; +import org.junit.jupiter.api.Test; + +import static io.restassured.RestAssured.given; +import static org.hamcrest.CoreMatchers.is; + +@QuarkusTest +public class BeigeResourceTest { + + @Test + public void testHelloEndpoint() { + given() + .when().get("/hello-resteasy") + .then() + .statusCode(200) + .body(is("Hello RESTEasy")); + } + +} \ No newline at end of file -- 2.11.4.GIT