diff --git a/CHANGELOG.md b/CHANGELOG.md index bb3e224ca..53b96b1c0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- Add quarkus-3-gradle (groovy) flavour + ### Changed - [fj-doc-playground-quarkus] quarkus-info extension diff --git a/fj-doc-guide/src/main/docs/asciidoc/chapters/02_2_maven_plugin_init.adoc b/fj-doc-guide/src/main/docs/asciidoc/chapters/02_2_maven_plugin_init.adoc index ea43e5518..8926f8057 100644 --- a/fj-doc-guide/src/main/docs/asciidoc/chapters/02_2_maven_plugin_init.adoc +++ b/fj-doc-guide/src/main/docs/asciidoc/chapters/02_2_maven_plugin_init.adoc @@ -33,6 +33,7 @@ NOTE: it is possible to set any property from 'add' goal, except 'projectFolder' |==================================================================================================================================== | flavour | model | description | quarkus-3 | maven | Based on link:https://quarkus.io/[Quarkus 3], with maven packaging +| quarkus-3-gradle | gradle | Based on link:https://quarkus.io/[Quarkus 3], with gradle packaging | quarkus-3-gradle-kts | gradle-kts | Based on link:https://quarkus.io/[Quarkus 3], with gradle kotlin packaging | quarkus-2 | maven | Based on link:https://quarkus.io/[Quarkus 2], with maven packaging | micronaut-4 | maven | Based on link:https://micronaut.io/[Micronatut], with maven packaging diff --git a/fj-doc-maven-plugin/src/main/java/org/fugerit/java/doc/project/facade/AddVenusFacade.java b/fj-doc-maven-plugin/src/main/java/org/fugerit/java/doc/project/facade/AddVenusFacade.java index 7ac74e515..77cb5c281 100644 --- a/fj-doc-maven-plugin/src/main/java/org/fugerit/java/doc/project/facade/AddVenusFacade.java +++ b/fj-doc-maven-plugin/src/main/java/org/fugerit/java/doc/project/facade/AddVenusFacade.java @@ -127,12 +127,17 @@ public static boolean addToProject( VenusContext context ) { if ( pomFile.exists() ) { return addVenusToMavenProject( pomFile, context ); } else { - File gradleFile = new File( context.getProjectDir(), "build.gradle.kts" ); - if ( gradleFile.exists() ) { - return addVenusToGradleKtsProject( gradleFile, context ); + File gradleFileKts = new File( context.getProjectDir(), "build.gradle.kts" ); + if ( gradleFileKts.exists() ) { + return addVenusToGradleProject( gradleFileKts, context, true ); } else { - addErrorAndLog( String.format( "No pom or gradle file in project dir : %s", pomFile.getCanonicalPath() ), context ); - return false; + File gradleFile = new File( context.getProjectDir(), "build.gradle" ); + if ( gradleFile.exists() ) { + return addVenusToGradleProject( gradleFile, context, false ); + } else { + addErrorAndLog(String.format("No pom or gradle file in project dir : %s", pomFile.getCanonicalPath()), context); + return false; + } } } } ); @@ -155,10 +160,10 @@ public static boolean addVenusToMavenProject( File pomFile, VenusContext context } ); } - public static boolean addVenusToGradleKtsProject( File gradleFile, VenusContext context ) { + public static boolean addVenusToGradleProject( File gradleFile, VenusContext context, boolean kts ) { return SafeFunction.get( () -> { log.info( "gradle project dir : {}", context.getProjectDir().getCanonicalPath() ); - addExtensionGradleKtsList( gradleFile, context ); + addExtensionGradleList( gradleFile, context, kts ); if ( context.isAddDocFacace() ) { if ( context.getMavenModel() == null ) { Model model = new Model(); diff --git a/fj-doc-maven-plugin/src/main/java/org/fugerit/java/doc/project/facade/BasicVenusFacade.java b/fj-doc-maven-plugin/src/main/java/org/fugerit/java/doc/project/facade/BasicVenusFacade.java index 0dff61dc9..636044d35 100644 --- a/fj-doc-maven-plugin/src/main/java/org/fugerit/java/doc/project/facade/BasicVenusFacade.java +++ b/fj-doc-maven-plugin/src/main/java/org/fugerit/java/doc/project/facade/BasicVenusFacade.java @@ -153,27 +153,40 @@ protected static void addExtensionList( File pomFile, VenusContext context ) thr private static final String CONST_IMPLEMENTATION = "implementation"; - protected static void addExtensionGradleKtsList( File gradleFile, VenusContext context ) throws IOException { + private static String formatGroovy( String dependency, String version, boolean kts ) { + if ( kts ) { + return String.format( "\\(\"%s:%s\"\\)", dependency, version ); + } else { + return String.format( " '%s:%s'", dependency, version ); + } + } + + protected static void addExtensionGradleList( File gradleFile, VenusContext context, boolean kts ) throws IOException { // note, this will currently only work for very simple build.gradle.kts files String gradleFileContent = FileIO.readString( gradleFile ); - String valVersion = String.format( "val fjDocVersion = \"%s\"\n\ndependencies", context.getVersion() ); - gradleFileContent = gradleFileContent.replaceFirst( "dependencies", valVersion ); + String fjDocVersion = context.getVersion(); + if ( kts ) { + String valVersion = String.format( "def fjDocVersion = '%s'\n\ndependencies", context.getVersion() ); + valVersion = String.format( "val fjDocVersion = \"%s\"\n\ndependencies", context.getVersion() ); + gradleFileContent = gradleFileContent.replaceFirst( "dependencies", valVersion ); + fjDocVersion = "\\$fjDocVersion"; + } List moduleListGradle = ModuleFacade.toModuleListOptimizedOrder( context.getExtensions() ); Collections.reverse( moduleListGradle ); log.info( "moduleListGradle : {}", moduleListGradle ); for ( String currentModule : moduleListGradle ) { String moduleNameGradle = ModuleFacade.toModuleName( currentModule ); - String currentImplementation = String.format( "implementation\\(\"org.fugerit.java:%s:\\$fjDocVersion\"\\)%n implementation", moduleNameGradle ); + String currentImplementation = String.format( "implementation %s%n implementation", formatGroovy( "org.fugerit.java:"+moduleNameGradle, fjDocVersion, kts ), moduleNameGradle ); log.info( "Adding module to gradle file : {}, substitution : {}", moduleNameGradle, currentImplementation ); gradleFileContent = gradleFileContent.replaceFirst( CONST_IMPLEMENTATION, currentImplementation ); context.getModules().add( moduleNameGradle ); } if (context.isAddLombok() ) { String lombokVersion = "1.18.36"; - gradleFileContent = gradleFileContent.replaceFirst( CONST_IMPLEMENTATION, String.format( "compileOnly\\(\"org.projectlombok:lombok:%s\"\\)%n %s", lombokVersion, CONST_IMPLEMENTATION ) ); - gradleFileContent = gradleFileContent.replaceFirst( CONST_IMPLEMENTATION, String.format( "annotationProcessor\\(\"org.projectlombok:lombok:%s\"\\)%n %s", lombokVersion, CONST_IMPLEMENTATION ) ); - gradleFileContent = gradleFileContent.replaceFirst( CONST_IMPLEMENTATION, String.format( "testCompileOnly\\(\"org.projectlombok:lombok:%s\"\\)%n %s", lombokVersion, CONST_IMPLEMENTATION ) ); - gradleFileContent = gradleFileContent.replaceFirst( CONST_IMPLEMENTATION, String.format( "testAnnotationProcessor\\(\"org.projectlombok:lombok:%s\"\\)%n %s", lombokVersion, CONST_IMPLEMENTATION ) ); + gradleFileContent = gradleFileContent.replaceFirst( CONST_IMPLEMENTATION, String.format( "compileOnly%s%n %s", formatGroovy( "org.projectlombok:lombok", lombokVersion, kts ), CONST_IMPLEMENTATION ) ); + gradleFileContent = gradleFileContent.replaceFirst( CONST_IMPLEMENTATION, String.format( "annotationProcessor%s%n %s", formatGroovy( "org.projectlombok:lombok", lombokVersion, kts ), CONST_IMPLEMENTATION ) ); + gradleFileContent = gradleFileContent.replaceFirst( CONST_IMPLEMENTATION, String.format( "testCompileOnly%s%n %s", formatGroovy( "org.projectlombok:lombok", lombokVersion, kts ), CONST_IMPLEMENTATION ) ); + gradleFileContent = gradleFileContent.replaceFirst( CONST_IMPLEMENTATION, String.format( "testAnnotationProcessor%s%n %s", formatGroovy( "org.projectlombok:lombok", lombokVersion, kts ), CONST_IMPLEMENTATION ) ); } FileIO.writeString( gradleFileContent, gradleFile ); } diff --git a/fj-doc-maven-plugin/src/main/java/org/fugerit/java/doc/project/facade/FlavourFacade.java b/fj-doc-maven-plugin/src/main/java/org/fugerit/java/doc/project/facade/FlavourFacade.java index 0711130f1..e76d739a9 100644 --- a/fj-doc-maven-plugin/src/main/java/org/fugerit/java/doc/project/facade/FlavourFacade.java +++ b/fj-doc-maven-plugin/src/main/java/org/fugerit/java/doc/project/facade/FlavourFacade.java @@ -25,6 +25,8 @@ private FlavourFacade() {} public static final String FLAVOUR_QUARKUS_3 = "quarkus-3"; + public static final String FLAVOUR_QUARKUS_3_GRADLE = "quarkus-3-gradle"; + public static final String FLAVOUR_QUARKUS_3_GRADLE_KTS = "quarkus-3-gradle-kts"; public static final String FLAVOUR_QUARKUS_2 = "quarkus-2"; @@ -40,11 +42,11 @@ private FlavourFacade() {} private static final Properties FLAVOURS_DEFAULT_VERSION = PropsIO.loadFromClassLoaderSafe( "config/flavour/flavour_versions_default.properties" ); public static final Set SUPPORTED_FLAVOURS = Collections.unmodifiableSet( - new HashSet<>( Arrays.asList( FLAVOUR_VANILLA, FLAVOUR_QUARKUS_3, FLAVOUR_QUARKUS_3_GRADLE_KTS, FLAVOUR_QUARKUS_2, - FLAVOUR_MICRONAUT_4, FLAVOUR_SPRINGBOOT_3, FLAVOUR_OPENLIBERTY ) ) ); + new HashSet<>( Arrays.asList( FLAVOUR_VANILLA, FLAVOUR_QUARKUS_3, FLAVOUR_QUARKUS_3_GRADLE, FLAVOUR_QUARKUS_3_GRADLE_KTS, + FLAVOUR_QUARKUS_2, FLAVOUR_MICRONAUT_4, FLAVOUR_SPRINGBOOT_3, FLAVOUR_OPENLIBERTY ) ) ); public static boolean isGradleKtsFlavour(String flavour ) { - return FLAVOUR_QUARKUS_3_GRADLE_KTS.equals( flavour ); + return FLAVOUR_QUARKUS_3_GRADLE_KTS.equals( flavour ) || FLAVOUR_QUARKUS_3_GRADLE.equals( flavour ); } private static final Properties MAP_FLAVOURS = SafeFunction.get( () -> { diff --git a/fj-doc-maven-plugin/src/main/resources/config/flavour/flavour_versions_default.properties b/fj-doc-maven-plugin/src/main/resources/config/flavour/flavour_versions_default.properties index 03d6dcac2..0678b332e 100644 --- a/fj-doc-maven-plugin/src/main/resources/config/flavour/flavour_versions_default.properties +++ b/fj-doc-maven-plugin/src/main/resources/config/flavour/flavour_versions_default.properties @@ -1,5 +1,6 @@ # default flavour versions quarkus-3=3.18.3 +quarkus-3-gradle=3.18.3 quarkus-3-gradle-kts=3.18.3 quarkus-2=2.16.12.Final micronaut-4=4.7.4 diff --git a/fj-doc-maven-plugin/src/main/resources/config/flavour/quarkus-3-gradle-copy.txt b/fj-doc-maven-plugin/src/main/resources/config/flavour/quarkus-3-gradle-copy.txt new file mode 100644 index 000000000..7cf5d175e --- /dev/null +++ b/fj-doc-maven-plugin/src/main/resources/config/flavour/quarkus-3-gradle-copy.txt @@ -0,0 +1,5 @@ +.dockerignore +src/main/docker/Dockerfile.native +src/main/docker/Dockerfile.native-micro +src/main/docker/Dockerfile.legacy-jar +src/main/docker/Dockerfile.jvm diff --git a/fj-doc-maven-plugin/src/main/resources/config/flavour/quarkus-3-gradle/.dockerignore b/fj-doc-maven-plugin/src/main/resources/config/flavour/quarkus-3-gradle/.dockerignore new file mode 100644 index 000000000..4361d2fb3 --- /dev/null +++ b/fj-doc-maven-plugin/src/main/resources/config/flavour/quarkus-3-gradle/.dockerignore @@ -0,0 +1,5 @@ +* +!build/*-runner +!build/*-runner.jar +!build/lib/* +!build/quarkus-app/* \ No newline at end of file diff --git a/fj-doc-maven-plugin/src/main/resources/config/flavour/quarkus-3-gradle/src/main/docker/Dockerfile.jvm b/fj-doc-maven-plugin/src/main/resources/config/flavour/quarkus-3-gradle/src/main/docker/Dockerfile.jvm new file mode 100644 index 000000000..731162bae --- /dev/null +++ b/fj-doc-maven-plugin/src/main/resources/config/flavour/quarkus-3-gradle/src/main/docker/Dockerfile.jvm @@ -0,0 +1,97 @@ +#### +# 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/fj-doc-quarkus-tutorial-jvm . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/fj-doc-quarkus-tutorial-jvm +# +# If you want to include the debug port into your docker image +# you will have to expose the debug port (default 5005 being the default) like this : EXPOSE 8080 5005. +# Additionally you will have to set -e JAVA_DEBUG=true and -e JAVA_DEBUG_PORT=*:5005 +# when running the container +# +# Then run the container using : +# +# docker run -i --rm -p 8080:8080 quarkus/fj-doc-quarkus-tutorial-jvm +# +# This image uses the `run-java.sh` script to run the application. +# This scripts computes the command line to execute your Java application, and +# includes memory/GC tuning. +# You can configure the behavior using the following environment properties: +# - JAVA_OPTS: JVM options passed to the `java` command (example: "-verbose:class") +# - JAVA_OPTS_APPEND: User specified Java options to be appended to generated options +# in JAVA_OPTS (example: "-Dsome.property=foo") +# - JAVA_MAX_MEM_RATIO: Is used when no `-Xmx` option is given in JAVA_OPTS. This is +# used to calculate a default maximal heap memory based on a containers restriction. +# If used in a container without any memory constraints for the container then this +# option has no effect. If there is a memory constraint then `-Xmx` is set to a ratio +# of the container available memory as set here. The default is `50` which means 50% +# of the available memory is used as an upper boundary. You can skip this mechanism by +# setting this value to `0` in which case no `-Xmx` option is added. +# - JAVA_INITIAL_MEM_RATIO: Is used when no `-Xms` option is given in JAVA_OPTS. This +# is used to calculate a default initial heap memory based on the maximum heap memory. +# If used in a container without any memory constraints for the container then this +# option has no effect. If there is a memory constraint then `-Xms` is set to a ratio +# of the `-Xmx` memory as set here. The default is `25` which means 25% of the `-Xmx` +# is used as the initial heap size. You can skip this mechanism by setting this value +# to `0` in which case no `-Xms` option is added (example: "25") +# - JAVA_MAX_INITIAL_MEM: Is used when no `-Xms` option is given in JAVA_OPTS. +# This is used to calculate the maximum value of the initial heap memory. If used in +# a container without any memory constraints for the container then this option has +# no effect. If there is a memory constraint then `-Xms` is limited to the value set +# here. The default is 4096MB which means the calculated value of `-Xms` never will +# be greater than 4096MB. The value of this variable is expressed in MB (example: "4096") +# - JAVA_DIAGNOSTICS: Set this to get some diagnostics information to standard output +# when things are happening. This option, if set to true, will set +# `-XX:+UnlockDiagnosticVMOptions`. Disabled by default (example: "true"). +# - JAVA_DEBUG: If set remote debugging will be switched on. Disabled by default (example: +# true"). +# - JAVA_DEBUG_PORT: Port used for remote debugging. Defaults to 5005 (example: "8787"). +# - CONTAINER_CORE_LIMIT: A calculated core limit as described in +# https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt. (example: "2") +# - CONTAINER_MAX_MEMORY: Memory limit given to the container (example: "1024"). +# - GC_MIN_HEAP_FREE_RATIO: Minimum percentage of heap free after GC to avoid expansion. +# (example: "20") +# - GC_MAX_HEAP_FREE_RATIO: Maximum percentage of heap free after GC to avoid shrinking. +# (example: "40") +# - GC_TIME_RATIO: Specifies the ratio of the time spent outside the garbage collection. +# (example: "4") +# - GC_ADAPTIVE_SIZE_POLICY_WEIGHT: The weighting given to the current GC time versus +# previous GC times. (example: "90") +# - GC_METASPACE_SIZE: The initial metaspace size. (example: "20") +# - GC_MAX_METASPACE_SIZE: The maximum metaspace size. (example: "100") +# - GC_CONTAINER_OPTIONS: Specify Java GC to use. The value of this variable should +# contain the necessary JRE command-line options to specify the required GC, which +# will override the default of `-XX:+UseParallelGC` (example: -XX:+UseG1GC). +# - HTTPS_PROXY: The location of the https proxy. (example: "myuser@127.0.0.1:8080") +# - HTTP_PROXY: The location of the http proxy. (example: "myuser@127.0.0.1:8080") +# - NO_PROXY: A comma separated lists of hosts, IP addresses or domains that can be +# accessed directly. (example: "foo.example.com,bar.example.com") +# +### +FROM registry.access.redhat.com/ubi8/openjdk-21:1.20 + +ENV LANGUAGE='en_US:en' + + +# We make four distinct layers so if there are application changes the library layers can be re-used +COPY --chown=185 build/quarkus-app/lib/ /deployments/lib/ +COPY --chown=185 build/quarkus-app/*.jar /deployments/ +COPY --chown=185 build/quarkus-app/app/ /deployments/app/ +COPY --chown=185 build/quarkus-app/quarkus/ /deployments/quarkus/ + +EXPOSE 8080 +USER 185 +ENV JAVA_OPTS_APPEND="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager" +ENV JAVA_APP_JAR="/deployments/quarkus-run.jar" + +ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ] + diff --git a/fj-doc-maven-plugin/src/main/resources/config/flavour/quarkus-3-gradle/src/main/docker/Dockerfile.legacy-jar b/fj-doc-maven-plugin/src/main/resources/config/flavour/quarkus-3-gradle/src/main/docker/Dockerfile.legacy-jar new file mode 100644 index 000000000..2202bba51 --- /dev/null +++ b/fj-doc-maven-plugin/src/main/resources/config/flavour/quarkus-3-gradle/src/main/docker/Dockerfile.legacy-jar @@ -0,0 +1,93 @@ +#### +# 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.jar.type=legacy-jar +# +# Then, build the image with: +# +# docker build -f src/main/docker/Dockerfile.legacy-jar -t quarkus/fj-doc-quarkus-tutorial-legacy-jar . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/fj-doc-quarkus-tutorial-legacy-jar +# +# If you want to include the debug port into your docker image +# you will have to expose the debug port (default 5005 being the default) like this : EXPOSE 8080 5005. +# Additionally you will have to set -e JAVA_DEBUG=true and -e JAVA_DEBUG_PORT=*:5005 +# when running the container +# +# Then run the container using : +# +# docker run -i --rm -p 8080:8080 quarkus/fj-doc-quarkus-tutorial-legacy-jar +# +# This image uses the `run-java.sh` script to run the application. +# This scripts computes the command line to execute your Java application, and +# includes memory/GC tuning. +# You can configure the behavior using the following environment properties: +# - JAVA_OPTS: JVM options passed to the `java` command (example: "-verbose:class") +# - JAVA_OPTS_APPEND: User specified Java options to be appended to generated options +# in JAVA_OPTS (example: "-Dsome.property=foo") +# - JAVA_MAX_MEM_RATIO: Is used when no `-Xmx` option is given in JAVA_OPTS. This is +# used to calculate a default maximal heap memory based on a containers restriction. +# If used in a container without any memory constraints for the container then this +# option has no effect. If there is a memory constraint then `-Xmx` is set to a ratio +# of the container available memory as set here. The default is `50` which means 50% +# of the available memory is used as an upper boundary. You can skip this mechanism by +# setting this value to `0` in which case no `-Xmx` option is added. +# - JAVA_INITIAL_MEM_RATIO: Is used when no `-Xms` option is given in JAVA_OPTS. This +# is used to calculate a default initial heap memory based on the maximum heap memory. +# If used in a container without any memory constraints for the container then this +# option has no effect. If there is a memory constraint then `-Xms` is set to a ratio +# of the `-Xmx` memory as set here. The default is `25` which means 25% of the `-Xmx` +# is used as the initial heap size. You can skip this mechanism by setting this value +# to `0` in which case no `-Xms` option is added (example: "25") +# - JAVA_MAX_INITIAL_MEM: Is used when no `-Xms` option is given in JAVA_OPTS. +# This is used to calculate the maximum value of the initial heap memory. If used in +# a container without any memory constraints for the container then this option has +# no effect. If there is a memory constraint then `-Xms` is limited to the value set +# here. The default is 4096MB which means the calculated value of `-Xms` never will +# be greater than 4096MB. The value of this variable is expressed in MB (example: "4096") +# - JAVA_DIAGNOSTICS: Set this to get some diagnostics information to standard output +# when things are happening. This option, if set to true, will set +# `-XX:+UnlockDiagnosticVMOptions`. Disabled by default (example: "true"). +# - JAVA_DEBUG: If set remote debugging will be switched on. Disabled by default (example: +# true"). +# - JAVA_DEBUG_PORT: Port used for remote debugging. Defaults to 5005 (example: "8787"). +# - CONTAINER_CORE_LIMIT: A calculated core limit as described in +# https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt. (example: "2") +# - CONTAINER_MAX_MEMORY: Memory limit given to the container (example: "1024"). +# - GC_MIN_HEAP_FREE_RATIO: Minimum percentage of heap free after GC to avoid expansion. +# (example: "20") +# - GC_MAX_HEAP_FREE_RATIO: Maximum percentage of heap free after GC to avoid shrinking. +# (example: "40") +# - GC_TIME_RATIO: Specifies the ratio of the time spent outside the garbage collection. +# (example: "4") +# - GC_ADAPTIVE_SIZE_POLICY_WEIGHT: The weighting given to the current GC time versus +# previous GC times. (example: "90") +# - GC_METASPACE_SIZE: The initial metaspace size. (example: "20") +# - GC_MAX_METASPACE_SIZE: The maximum metaspace size. (example: "100") +# - GC_CONTAINER_OPTIONS: Specify Java GC to use. The value of this variable should +# contain the necessary JRE command-line options to specify the required GC, which +# will override the default of `-XX:+UseParallelGC` (example: -XX:+UseG1GC). +# - HTTPS_PROXY: The location of the https proxy. (example: "myuser@127.0.0.1:8080") +# - HTTP_PROXY: The location of the http proxy. (example: "myuser@127.0.0.1:8080") +# - NO_PROXY: A comma separated lists of hosts, IP addresses or domains that can be +# accessed directly. (example: "foo.example.com,bar.example.com") +# +### +FROM registry.access.redhat.com/ubi8/openjdk-21:1.20 + +ENV LANGUAGE='en_US:en' + + +COPY build/lib/* /deployments/lib/ +COPY build/*-runner.jar /deployments/quarkus-run.jar + +EXPOSE 8080 +USER 185 +ENV JAVA_OPTS_APPEND="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager" +ENV JAVA_APP_JAR="/deployments/quarkus-run.jar" + +ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ] diff --git a/fj-doc-maven-plugin/src/main/resources/config/flavour/quarkus-3-gradle/src/main/docker/Dockerfile.native b/fj-doc-maven-plugin/src/main/resources/config/flavour/quarkus-3-gradle/src/main/docker/Dockerfile.native new file mode 100644 index 000000000..608711fd2 --- /dev/null +++ b/fj-doc-maven-plugin/src/main/resources/config/flavour/quarkus-3-gradle/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.native.enabled=true +# +# Then, build the image with: +# +# docker build -f src/main/docker/Dockerfile.native -t quarkus/fj-doc-quarkus-tutorial . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/fj-doc-quarkus-tutorial +# +### +FROM registry.access.redhat.com/ubi8/ubi-minimal:8.10 +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 + +ENTRYPOINT ["./application", "-Dquarkus.http.host=0.0.0.0"] diff --git a/fj-doc-maven-plugin/src/main/resources/config/flavour/quarkus-3-gradle/src/main/docker/Dockerfile.native-micro b/fj-doc-maven-plugin/src/main/resources/config/flavour/quarkus-3-gradle/src/main/docker/Dockerfile.native-micro new file mode 100644 index 000000000..a1d6795b3 --- /dev/null +++ b/fj-doc-maven-plugin/src/main/resources/config/flavour/quarkus-3-gradle/src/main/docker/Dockerfile.native-micro @@ -0,0 +1,30 @@ +#### +# This Dockerfile is used in order to build a container that runs the Quarkus application in native (no JVM) mode. +# It uses a micro base image, tuned for Quarkus native executables. +# It reduces the size of the resulting container image. +# Check https://quarkus.io/guides/quarkus-runtime-base-image for further information about this image. +# +# Before building the container image run: +# +# ./gradlew build -Dquarkus.native.enabled=true +# +# Then, build the image with: +# +# docker build -f src/main/docker/Dockerfile.native-micro -t quarkus/fj-doc-quarkus-tutorial . +# +# Then run the container using: +# +# docker run -i --rm -p 8080:8080 quarkus/fj-doc-quarkus-tutorial +# +### +FROM quay.io/quarkus/quarkus-micro-image:2.0 +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 + +ENTRYPOINT ["./application", "-Dquarkus.http.host=0.0.0.0"] diff --git a/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle-fm-yml.ftl b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle-fm-yml.ftl new file mode 100644 index 000000000..2086c6c22 --- /dev/null +++ b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle-fm-yml.ftl @@ -0,0 +1,34 @@ +<#import 'flavour-macro.ftl' as fhm> +--- +flavour: ${context.flavour} +process: + - from: flavour/${context.flavour}/settings.gradle.ftl + to: ${context.projectFolder}/settings.gradle + - from: flavour/${context.flavour}/gradle.ftl + to: ${context.projectFolder}/gradle.properties + - from: flavour/${context.flavour}/build.gradle.ftl + to: ${context.projectFolder}/build.gradle + - from: flavour/${context.flavour}/README.ftl + to: ${context.projectFolder}/README.md + - from: flavour/${context.flavour}/gitignore.ftl + to: ${context.projectFolder}/.gitignore + - from: flavour/${context.flavour}/GreetingConfig.ftl + to: ${context.projectFolder}/src/main/java/<@fhm.toProjectPackageFolder context=context/>/GreetingConfig.java + - from: flavour/${context.flavour}/GreetingResource.ftl + to: ${context.projectFolder}/src/main/java/<@fhm.toProjectPackageFolder context=context/>/GreetingResource.java + - from: flavour/${context.flavour}/GreetingResourceTest.ftl + to: ${context.projectFolder}/src/test/java/test/<@fhm.toProjectPackageFolder context=context/>/GreetingResourceTest.java + - from: flavour/${context.flavour}/GreetingResourceIT.ftl + to: ${context.projectFolder}/src/test/java/test/<@fhm.toProjectPackageFolder context=context/>/GreetingResourceIT.java + - from: flavour/${context.flavour}/DocResourceIT.ftl + to: ${context.projectFolder}/src/test/java/test/<@fhm.toProjectPackageFolder context=context/>/DocResourceIT.java + - from: flavour/${context.flavour}/DocResource.ftl + to: ${context.projectFolder}/src/main/java/<@fhm.toProjectPackageFolder context=context/>/DocResource.java + - from: flavour/${context.flavour}/application.ftl + to: ${context.projectFolder}/src/main/resources/application.yml + - from: flavour/${context.flavour}/AppInit.ftl + to: ${context.projectFolder}/src/main/java/<@fhm.toProjectPackageFolder context=context/>/AppInit.java + - from: flavour/${context.flavour}/DocResourceTest.ftl + to: ${context.projectFolder}/src/test/java/test/<@fhm.toProjectPackageFolder context=context/>/DocResourceTest.java + - from: flavour/${context.flavour}/DocHelper.ftl + to: ${context.projectFolder}/src/main/java/<@fhm.toProjectPackageFolder context=context/>/DocHelper.java \ No newline at end of file diff --git a/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/AppInit.ftl b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/AppInit.ftl new file mode 100644 index 000000000..6a834b1ee --- /dev/null +++ b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/AppInit.ftl @@ -0,0 +1,30 @@ +<#import '../flavour-macro.ftl' as fhm> +package <@fhm.toProjectPackage context=context/>; + +import io.quarkus.runtime.StartupEvent; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.enterprise.event.Observes; +import lombok.extern.slf4j.Slf4j; +import io.quarkus.runtime.annotations.RegisterForReflection; +import jakarta.inject.Inject; +import org.fugerit.java.doc.base.config.InitHandler; + +@Slf4j +@ApplicationScoped +@RegisterForReflection( targets = { DocHelper.class, People.class } ) +public class AppInit { + + @Inject + DocHelper docHelper; + + void onStart(@Observes StartupEvent ev) { + log.info("The application is starting..."); + /* + * This will initialize all the doc handlers using async mode. + * (use method InitHandler.initDocAll() for synced startup) + */ + InitHandler.initDocAllAsync( + docHelper.getDocProcessConfig().getFacade().handlers() ); + } + +} diff --git a/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/DocHelper.ftl b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/DocHelper.ftl new file mode 100644 index 000000000..e42b0a65b --- /dev/null +++ b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/DocHelper.ftl @@ -0,0 +1,15 @@ +<#import '../flavour-macro.ftl' as fhm> +package <@fhm.toProjectPackage context=context/>; + +import org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfig; +import org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade; +import jakarta.enterprise.context.ApplicationScoped; + +@ApplicationScoped +public class DocHelper { + + private FreemarkerDocProcessConfig docProcessConfig = FreemarkerDocProcessConfigFacade.loadConfigSafe( "cl://${context.resourcePathFmConfigXml}" ); + + public FreemarkerDocProcessConfig getDocProcessConfig() { return this.docProcessConfig; } + +} diff --git a/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/DocResource.ftl b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/DocResource.ftl new file mode 100644 index 000000000..3b2248eba --- /dev/null +++ b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/DocResource.ftl @@ -0,0 +1,61 @@ +<#import '../flavour-macro.ftl' as fhm> +package <@fhm.toProjectPackage context=context/>; + +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.enterprise.context.ApplicationScoped; +import jakarta.inject.Inject; +import lombok.extern.slf4j.Slf4j; +import org.fugerit.java.doc.base.config.DocConfig; +import org.fugerit.java.doc.base.process.DocProcessContext; + +import java.io.ByteArrayOutputStream; +import java.util.Arrays; +import java.util.List; + +import org.eclipse.microprofile.openapi.annotations.Operation; +import org.eclipse.microprofile.openapi.annotations.responses.APIResponse; +import org.eclipse.microprofile.openapi.annotations.tags.Tag; +import org.eclipse.microprofile.openapi.annotations.tags.Tags; + +@Slf4j +@ApplicationScoped +@Path("/doc") +public class DocResource { + + @Inject + DocHelper docHelper; + <@fhm.createDocumentProcessNoHelper context=context exceptionType='WebApplicationException'/> + + <@fhm.createQuarkusPath context=context outputMime="text/markdown" outputExtension="md" outputDescription="Markdown"/> + + <@fhm.createQuarkusPath context=context outputMime="text/html" outputExtension="html" outputDescription="HTML"/> + + <#if context.asciidocFreemarkerHandlerAvailable> + <@fhm.createQuarkusPath context=context outputMime="text/asciidoc" outputExtension="adoc" outputDescription="AsciiDoc"/> + + + <#if context.modules?seq_contains("fj-doc-mod-fop")> + <@fhm.createQuarkusPath context=context outputMime="application/pdf" outputExtension="pdf" outputDescription="PDF"/> + + + <#if context.modules?seq_contains("fj-doc-mod-poi")> + <@fhm.createQuarkusPath context=context outputMime="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" outputExtension="xlsx" outputDescription="Excel"/> + + + <#if context.modules?seq_contains("fj-doc-mod-opencsv")> + <@fhm.createQuarkusPath context=context outputMime="text/csv" outputExtension="csv" outputDescription="CSV"/> + + + <#if context.modules?seq_contains("fj-doc-mod-openpdf-ext")> + <@fhm.createQuarkusPathPrefix context=context outputMime="application/pdf" outputExtension="pdf" outputDescription="OpenPDF" pathPrefix='/openpdf'/> + <@fhm.createQuarkusPathPrefix context=context outputMime="text/html" outputExtension="html" outputDescription="OpenPDFHTML" pathPrefix='/openpdf'/> + + <#if context.modules?seq_contains("fj-doc-mod-openrtf-ext")> + <@fhm.createQuarkusPath context=context outputMime="application/rtf" outputExtension="rtf" outputDescription="RTF"/> + + +} diff --git a/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/DocResourceIT.ftl b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/DocResourceIT.ftl new file mode 100644 index 000000000..46d21b7c9 --- /dev/null +++ b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/DocResourceIT.ftl @@ -0,0 +1,9 @@ +<#import '../flavour-macro.ftl' as fhm> +package test.<@fhm.toProjectPackage context=context/>; + +import io.quarkus.test.junit.QuarkusIntegrationTest; + +@QuarkusIntegrationTest +class DocResourceIT extends DocResourceTest { + // Execute the same tests but in packaged mode. +} diff --git a/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/DocResourceTest.ftl b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/DocResourceTest.ftl new file mode 100644 index 000000000..df8a48f21 --- /dev/null +++ b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/DocResourceTest.ftl @@ -0,0 +1,63 @@ +<#import '../flavour-macro.ftl' as fhm> +package test.<@fhm.toProjectPackage context=context/>; + +import io.quarkus.test.junit.QuarkusTest; +import org.junit.jupiter.api.Test; + +import static io.restassured.RestAssured.given; + +@QuarkusTest +class DocResourceTest { + + @Test + void testMarkdown() { + given().when().get("/doc/example.md").then().statusCode(200); + } + + @Test + void testHtml() { + given().when().get("/doc/example.html").then().statusCode(200); + } + + <#if context.asciidocFreemarkerHandlerAvailable> + @Test + void testAsciiDoc() { + given().when().get("/doc/example.adoc").then().statusCode(200); + } + + <#if context.modules?seq_contains("fj-doc-mod-fop")> + @Test + void testPdf() { + given().when().get("/doc/example.pdf").then().statusCode(200); + } + + <#if context.modules?seq_contains("fj-doc-mod-poi")> + @Test + void testXlsx() { + given().when().get("/doc/example.xlsx").then().statusCode(200); + } + + <#if context.modules?seq_contains("fj-doc-mod-opencsv")> + @Test + void testCsv() { + given().when().get("/doc/example.csv").then().statusCode(200); + } + + <#if context.modules?seq_contains("fj-doc-mod-openpdf-ext")> + @Test + void testOpenPDF() { + given().when().get("/doc/openpdf/example.pdf").then().statusCode(200); + } + @Test + void testOpenPDFHTML() { + given().when().get("/doc/openpdf/example.html").then().statusCode(200); + } + + <#if context.modules?seq_contains("fj-doc-mod-openrtf-ext")> + @Test + void testOpenRTF() { + given().when().get("/doc/example.rtf").then().statusCode(200); + } + + +} \ No newline at end of file diff --git a/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/GreetingConfig.ftl b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/GreetingConfig.ftl new file mode 100644 index 000000000..6bdd13ede --- /dev/null +++ b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/GreetingConfig.ftl @@ -0,0 +1,13 @@ +<#import '../flavour-macro.ftl' as fhm> +package <@fhm.toProjectPackage context=context/>; + +import io.smallrye.config.ConfigMapping; +import io.smallrye.config.WithName; + +@ConfigMapping(prefix = "greeting") +public interface GreetingConfig { + + @WithName("message") + String message(); + +} \ No newline at end of file diff --git a/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/GreetingResource.ftl b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/GreetingResource.ftl new file mode 100644 index 000000000..371b1247b --- /dev/null +++ b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/GreetingResource.ftl @@ -0,0 +1,17 @@ +<#import '../flavour-macro.ftl' as fhm> +package <@fhm.toProjectPackage context=context/>; + +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.core.MediaType; + +@Path("/hello") +public class GreetingResource { + + @GET + @Produces(MediaType.TEXT_PLAIN) + public String hello() { + return "Hello from Quarkus REST"; + } +} diff --git a/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/GreetingResourceIT.ftl b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/GreetingResourceIT.ftl new file mode 100644 index 000000000..b52750b67 --- /dev/null +++ b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/GreetingResourceIT.ftl @@ -0,0 +1,9 @@ +<#import '../flavour-macro.ftl' as fhm> +package test.<@fhm.toProjectPackage context=context/>; + +import io.quarkus.test.junit.QuarkusIntegrationTest; + +@QuarkusIntegrationTest +class GreetingResourceIT extends GreetingResourceTest { + // Execute the same tests but in packaged mode. +} diff --git a/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/GreetingResourceTest.ftl b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/GreetingResourceTest.ftl new file mode 100644 index 000000000..882b7a20b --- /dev/null +++ b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/GreetingResourceTest.ftl @@ -0,0 +1,21 @@ +<#import '../flavour-macro.ftl' as fhm> +package test.<@fhm.toProjectPackage context=context/>; + +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 +class GreetingResourceTest { + @Test + void testHelloEndpoint() { + given() + .when().get("/hello") + .then() + .statusCode(200) + .body(is("Hello from Quarkus REST")); + } + +} \ No newline at end of file diff --git a/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/README.ftl b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/README.ftl new file mode 100644 index 000000000..e0e680a12 --- /dev/null +++ b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/README.ftl @@ -0,0 +1,132 @@ +# ${context.artifactId} + +## Quickstart + +Requirement : + +* Gradle 8+ +* java ${context.javaRelease}+ (GraalVM for native version) + +1. Verify the app + +```shell +gradle build +``` + +2. Start the app + +```shell +gradle quarkusDev +``` + +3. Try the app + +Open the [swagger-ui](http://localhost:8080/q/swagger-ui/) + +Test available paths (for instance : [/doc/example.md](http://localhost:8080/doc/example.md)) + +NOTE: + +* Powered by Quarkus ${context.flavourVersion} +* Using Fugerit Venus Doc ${context.version} (extensions : ${context.extensions}) + +## Native version + +If you picked only native modules, you should be able to build and run the AOT version (GraalVM 21+ needed). + +Further documentation : + +* [List of modules and native support](https://venusdocs.fugerit.org/guide/#available-extensions) +* [Fugerit Venus Doc native support introduction](https://venusdocs.fugerit.org/guide/#doc-native-support) + +1. Build and verify + +```shell +gradle -Dquarkus.native.enabled=true -Dquarkus.package.jar.enabled=false +``` + +2. Start + +```shell +./build/${context.artifactId}-${context.projectVersion}-runner +``` + +## Overview + +This project has been initialized using [fj-doc-maven-plugin init goal](https://venusdocs.fugerit.org/guide/#maven-plugin-goal-init). + +The quarkus 3 structure is similar to running the quarkus create goal : + +```shell +mvn io.quarkus.platform:quarkus-maven-plugin:${context.flavourVersion}:create \ +-DprojectGroupId=${context.groupId} \ +-DprojectArtifactId=${context.artifactId} \ +-Dextensions='rest,rest-jackson,config-yaml,smallrye-openapi' +``` + +## Quarkus readme + +This project uses Quarkus, the Supersonic Subatomic Java Framework. + +If you want to learn more about Quarkus, please visit its website: . + +## Running the application in dev mode + +You can run your application in dev mode that enables live coding using: + +```shell script +./gradlew quarkusDev +``` + +> **_NOTE:_** Quarkus now ships with a Dev UI, which is available in dev mode only at . + +## Packaging and running the application + +The application can be packaged using: + +```shell script +./gradlew build +``` + +It produces the `quarkus-run.jar` file in the `build/quarkus-app/` directory. +Be aware that it’s not an _über-jar_ as the dependencies are copied into the `build/quarkus-app/lib/` directory. + +The application is now runnable using `java -jar build/quarkus-app/quarkus-run.jar`. + +If you want to build an _über-jar_, execute the following command: + +```shell script +./gradlew build -Dquarkus.package.jar.type=uber-jar +``` + +The application, packaged as an _über-jar_, is now runnable using `java -jar build/*-runner.jar`. + +## Creating a native executable + +You can create a native executable using: + +```shell script +./gradlew build -Dquarkus.native.enabled=true +``` + +Or, if you don't have GraalVM installed, you can run the native executable build in a container using: + +```shell script +./gradlew build -Dquarkus.native.enabled=true -Dquarkus.native.container-build=true +``` + +You can then execute your native executable with: `./build/fj-doc-quarkus-tutorial-1.0.0-SNAPSHOT-runner` + +If you want to learn more about building native executables, please consult . + +## Related Guides + +- REST ([guide](https://quarkus.io/guides/rest)): A Jakarta REST implementation utilizing build time processing and Vert.x. This extension is not compatible with the quarkus-resteasy extension, or any of the extensions that depend on it. + +## Provided Code + +### REST + +Easily start your REST Web Services + +[Related guide section...](https://quarkus.io/guides/getting-started-reactive#reactive-jax-rs-resources) diff --git a/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/application.ftl b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/application.ftl new file mode 100644 index 000000000..e72f76974 --- /dev/null +++ b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/application.ftl @@ -0,0 +1,8 @@ +greeting: + message: "hello" + +quarkus: + native: + # if needed add -H:+UnlockExperimentalVMOptions + additional-build-args: -H:IncludeResources=${context.artifactId}/fm-doc-process-config.xml,\ + -H:IncludeResources=${context.artifactId}/template/document.ftl \ No newline at end of file diff --git a/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/build.gradle.ftl b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/build.gradle.ftl new file mode 100644 index 000000000..985223b00 --- /dev/null +++ b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/build.gradle.ftl @@ -0,0 +1,41 @@ +plugins { + id 'java' + id 'io.quarkus' +} + +repositories { + mavenCentral() + mavenLocal() +} + +dependencies { + implementation enforcedPlatform("${r"${quarkusPlatformGroupId}:${quarkusPlatformArtifactId}:${quarkusPlatformVersion}"}") + implementation 'io.quarkus:quarkus-rest' + implementation 'io.quarkus:quarkus-rest-jackson' + implementation 'io.quarkus:quarkus-smallrye-openapi' + implementation 'io.quarkus:quarkus-config-yaml' + implementation 'io.quarkus:quarkus-arc' + testImplementation 'io.quarkus:quarkus-junit5' + testImplementation 'io.rest-assured:rest-assured' +} + +group '${context.groupId}' +version '${context.projectVersion}' + +java { + sourceCompatibility = JavaVersion.VERSION_${context.javaRelease} + targetCompatibility = JavaVersion.VERSION_${context.javaRelease} +} + +test { + systemProperty "java.util.logging.manager", "org.jboss.logmanager.LogManager" +} + +compileJava { + options.encoding = 'UTF-8' + options.compilerArgs << '-parameters' +} + +compileTestJava { + options.encoding = 'UTF-8' +} \ No newline at end of file diff --git a/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/gitignore.ftl b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/gitignore.ftl new file mode 100644 index 000000000..ba4fbcc31 --- /dev/null +++ b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/gitignore.ftl @@ -0,0 +1,41 @@ +# 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 + +# Plugin directory +/.quarkus/cli/plugins/ +# TLS Certificates +.certs/ diff --git a/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/gradle.ftl b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/gradle.ftl new file mode 100644 index 000000000..dc84e4691 --- /dev/null +++ b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/gradle.ftl @@ -0,0 +1,7 @@ +# Gradle properties + +quarkusPluginId=io.quarkus +quarkusPluginVersion=${context.flavourVersion} +quarkusPlatformGroupId=io.quarkus.platform +quarkusPlatformArtifactId=quarkus-bom +quarkusPlatformVersion=${context.flavourVersion} diff --git a/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/settings.gradle.ftl b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/settings.gradle.ftl new file mode 100644 index 000000000..15cd6fc4d --- /dev/null +++ b/fj-doc-maven-plugin/src/main/resources/config/template/flavour/quarkus-3-gradle/settings.gradle.ftl @@ -0,0 +1,11 @@ +pluginManagement { + repositories { + mavenCentral() + gradlePluginPortal() + mavenLocal() + } + plugins { + id "${r"${quarkusPluginId}"}" version "${r"${quarkusPluginVersion}"}" + } +} +rootProject.name='${context.artifactId}' \ No newline at end of file diff --git a/fj-doc-maven-plugin/src/test/java/test/org/fugerit/java/doc/project/facade/TestInit.java b/fj-doc-maven-plugin/src/test/java/test/org/fugerit/java/doc/project/facade/TestInit.java index 921965bef..52c7b1427 100644 --- a/fj-doc-maven-plugin/src/test/java/test/org/fugerit/java/doc/project/facade/TestInit.java +++ b/fj-doc-maven-plugin/src/test/java/test/org/fugerit/java/doc/project/facade/TestInit.java @@ -14,6 +14,7 @@ import org.junit.Test; import java.io.File; +import java.util.Arrays; import java.util.UUID; @Slf4j @@ -55,11 +56,12 @@ public void execute() throws MojoExecutionException, MojoFailureException { } @Test - public void testMojoQuarkus3GradleKts() throws MojoExecutionException, MojoFailureException { - String currentFlavour = FlavourFacade.FLAVOUR_QUARKUS_3_GRADLE_KTS; - File projectDir = this.initConfigWorker(currentFlavour); - createMojoInit( projectDir, currentFlavour ).execute(); - Assert.assertTrue( projectDir.exists() ); + public void testMojoQuarkus3GradleGroovyAndKts() throws MojoExecutionException, MojoFailureException { + for ( String currentFlavour : Arrays.asList( FlavourFacade.FLAVOUR_QUARKUS_3_GRADLE, FlavourFacade.FLAVOUR_QUARKUS_3_GRADLE_KTS ) ) { + File projectDir = this.initConfigWorker(currentFlavour); + createMojoInit( projectDir, currentFlavour ).execute(); + Assert.assertTrue( projectDir.exists() ); + } } @Test