Skip to content

Commit aa8cd00

Browse files
authored
flavour quarkus-3-gradle groovy #293 (#294)
1 parent 51a46eb commit aa8cd00

29 files changed

+820
-23
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
### Added
11+
12+
- Add quarkus-3-gradle (groovy) flavour <https://github.com/fugerit-org/fj-doc/issues/293>
13+
1014
### Changed
1115

1216
- [fj-doc-playground-quarkus] quarkus-info extension

fj-doc-guide/src/main/docs/asciidoc/chapters/02_2_maven_plugin_init.adoc

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ NOTE: it is possible to set any property from 'add' goal, except 'projectFolder'
3333
|====================================================================================================================================
3434
| flavour | model | description
3535
| quarkus-3 | maven | Based on link:https://quarkus.io/[Quarkus 3], with maven packaging
36+
| quarkus-3-gradle | gradle | Based on link:https://quarkus.io/[Quarkus 3], with gradle packaging
3637
| quarkus-3-gradle-kts | gradle-kts | Based on link:https://quarkus.io/[Quarkus 3], with gradle kotlin packaging
3738
| quarkus-2 | maven | Based on link:https://quarkus.io/[Quarkus 2], with maven packaging
3839
| micronaut-4 | maven | Based on link:https://micronaut.io/[Micronatut], with maven packaging

fj-doc-maven-plugin/src/main/java/org/fugerit/java/doc/project/facade/AddVenusFacade.java

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -127,12 +127,17 @@ public static boolean addToProject( VenusContext context ) {
127127
if ( pomFile.exists() ) {
128128
return addVenusToMavenProject( pomFile, context );
129129
} else {
130-
File gradleFile = new File( context.getProjectDir(), "build.gradle.kts" );
131-
if ( gradleFile.exists() ) {
132-
return addVenusToGradleKtsProject( gradleFile, context );
130+
File gradleFileKts = new File( context.getProjectDir(), "build.gradle.kts" );
131+
if ( gradleFileKts.exists() ) {
132+
return addVenusToGradleProject( gradleFileKts, context, true );
133133
} else {
134-
addErrorAndLog( String.format( "No pom or gradle file in project dir : %s", pomFile.getCanonicalPath() ), context );
135-
return false;
134+
File gradleFile = new File( context.getProjectDir(), "build.gradle" );
135+
if ( gradleFile.exists() ) {
136+
return addVenusToGradleProject( gradleFile, context, false );
137+
} else {
138+
addErrorAndLog(String.format("No pom or gradle file in project dir : %s", pomFile.getCanonicalPath()), context);
139+
return false;
140+
}
136141
}
137142
}
138143
} );
@@ -155,10 +160,10 @@ public static boolean addVenusToMavenProject( File pomFile, VenusContext context
155160
} );
156161
}
157162

158-
public static boolean addVenusToGradleKtsProject( File gradleFile, VenusContext context ) {
163+
public static boolean addVenusToGradleProject( File gradleFile, VenusContext context, boolean kts ) {
159164
return SafeFunction.get( () -> {
160165
log.info( "gradle project dir : {}", context.getProjectDir().getCanonicalPath() );
161-
addExtensionGradleKtsList( gradleFile, context );
166+
addExtensionGradleList( gradleFile, context, kts );
162167
if ( context.isAddDocFacace() ) {
163168
if ( context.getMavenModel() == null ) {
164169
Model model = new Model();

fj-doc-maven-plugin/src/main/java/org/fugerit/java/doc/project/facade/BasicVenusFacade.java

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -153,27 +153,40 @@ protected static void addExtensionList( File pomFile, VenusContext context ) thr
153153

154154
private static final String CONST_IMPLEMENTATION = "implementation";
155155

156-
protected static void addExtensionGradleKtsList( File gradleFile, VenusContext context ) throws IOException {
156+
private static String formatGroovy( String dependency, String version, boolean kts ) {
157+
if ( kts ) {
158+
return String.format( "\\(\"%s:%s\"\\)", dependency, version );
159+
} else {
160+
return String.format( " '%s:%s'", dependency, version );
161+
}
162+
}
163+
164+
protected static void addExtensionGradleList( File gradleFile, VenusContext context, boolean kts ) throws IOException {
157165
// note, this will currently only work for very simple build.gradle.kts files
158166
String gradleFileContent = FileIO.readString( gradleFile );
159-
String valVersion = String.format( "val fjDocVersion = \"%s\"\n\ndependencies", context.getVersion() );
160-
gradleFileContent = gradleFileContent.replaceFirst( "dependencies", valVersion );
167+
String fjDocVersion = context.getVersion();
168+
if ( kts ) {
169+
String valVersion = String.format( "def fjDocVersion = '%s'\n\ndependencies", context.getVersion() );
170+
valVersion = String.format( "val fjDocVersion = \"%s\"\n\ndependencies", context.getVersion() );
171+
gradleFileContent = gradleFileContent.replaceFirst( "dependencies", valVersion );
172+
fjDocVersion = "\\$fjDocVersion";
173+
}
161174
List<String> moduleListGradle = ModuleFacade.toModuleListOptimizedOrder( context.getExtensions() );
162175
Collections.reverse( moduleListGradle );
163176
log.info( "moduleListGradle : {}", moduleListGradle );
164177
for ( String currentModule : moduleListGradle ) {
165178
String moduleNameGradle = ModuleFacade.toModuleName( currentModule );
166-
String currentImplementation = String.format( "implementation\\(\"org.fugerit.java:%s:\\$fjDocVersion\"\\)%n implementation", moduleNameGradle );
179+
String currentImplementation = String.format( "implementation %s%n implementation", formatGroovy( "org.fugerit.java:"+moduleNameGradle, fjDocVersion, kts ), moduleNameGradle );
167180
log.info( "Adding module to gradle file : {}, substitution : {}", moduleNameGradle, currentImplementation );
168181
gradleFileContent = gradleFileContent.replaceFirst( CONST_IMPLEMENTATION, currentImplementation );
169182
context.getModules().add( moduleNameGradle );
170183
}
171184
if (context.isAddLombok() ) {
172185
String lombokVersion = "1.18.36";
173-
gradleFileContent = gradleFileContent.replaceFirst( CONST_IMPLEMENTATION, String.format( "compileOnly\\(\"org.projectlombok:lombok:%s\"\\)%n %s", lombokVersion, CONST_IMPLEMENTATION ) );
174-
gradleFileContent = gradleFileContent.replaceFirst( CONST_IMPLEMENTATION, String.format( "annotationProcessor\\(\"org.projectlombok:lombok:%s\"\\)%n %s", lombokVersion, CONST_IMPLEMENTATION ) );
175-
gradleFileContent = gradleFileContent.replaceFirst( CONST_IMPLEMENTATION, String.format( "testCompileOnly\\(\"org.projectlombok:lombok:%s\"\\)%n %s", lombokVersion, CONST_IMPLEMENTATION ) );
176-
gradleFileContent = gradleFileContent.replaceFirst( CONST_IMPLEMENTATION, String.format( "testAnnotationProcessor\\(\"org.projectlombok:lombok:%s\"\\)%n %s", lombokVersion, CONST_IMPLEMENTATION ) );
186+
gradleFileContent = gradleFileContent.replaceFirst( CONST_IMPLEMENTATION, String.format( "compileOnly%s%n %s", formatGroovy( "org.projectlombok:lombok", lombokVersion, kts ), CONST_IMPLEMENTATION ) );
187+
gradleFileContent = gradleFileContent.replaceFirst( CONST_IMPLEMENTATION, String.format( "annotationProcessor%s%n %s", formatGroovy( "org.projectlombok:lombok", lombokVersion, kts ), CONST_IMPLEMENTATION ) );
188+
gradleFileContent = gradleFileContent.replaceFirst( CONST_IMPLEMENTATION, String.format( "testCompileOnly%s%n %s", formatGroovy( "org.projectlombok:lombok", lombokVersion, kts ), CONST_IMPLEMENTATION ) );
189+
gradleFileContent = gradleFileContent.replaceFirst( CONST_IMPLEMENTATION, String.format( "testAnnotationProcessor%s%n %s", formatGroovy( "org.projectlombok:lombok", lombokVersion, kts ), CONST_IMPLEMENTATION ) );
177190
}
178191
FileIO.writeString( gradleFileContent, gradleFile );
179192
}

fj-doc-maven-plugin/src/main/java/org/fugerit/java/doc/project/facade/FlavourFacade.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ private FlavourFacade() {}
2525

2626
public static final String FLAVOUR_QUARKUS_3 = "quarkus-3";
2727

28+
public static final String FLAVOUR_QUARKUS_3_GRADLE = "quarkus-3-gradle";
29+
2830
public static final String FLAVOUR_QUARKUS_3_GRADLE_KTS = "quarkus-3-gradle-kts";
2931

3032
public static final String FLAVOUR_QUARKUS_2 = "quarkus-2";
@@ -40,11 +42,11 @@ private FlavourFacade() {}
4042
private static final Properties FLAVOURS_DEFAULT_VERSION = PropsIO.loadFromClassLoaderSafe( "config/flavour/flavour_versions_default.properties" );
4143

4244
public static final Set<String> SUPPORTED_FLAVOURS = Collections.unmodifiableSet(
43-
new HashSet<>( Arrays.asList( FLAVOUR_VANILLA, FLAVOUR_QUARKUS_3, FLAVOUR_QUARKUS_3_GRADLE_KTS, FLAVOUR_QUARKUS_2,
44-
FLAVOUR_MICRONAUT_4, FLAVOUR_SPRINGBOOT_3, FLAVOUR_OPENLIBERTY ) ) );
45+
new HashSet<>( Arrays.asList( FLAVOUR_VANILLA, FLAVOUR_QUARKUS_3, FLAVOUR_QUARKUS_3_GRADLE, FLAVOUR_QUARKUS_3_GRADLE_KTS,
46+
FLAVOUR_QUARKUS_2, FLAVOUR_MICRONAUT_4, FLAVOUR_SPRINGBOOT_3, FLAVOUR_OPENLIBERTY ) ) );
4547

4648
public static boolean isGradleKtsFlavour(String flavour ) {
47-
return FLAVOUR_QUARKUS_3_GRADLE_KTS.equals( flavour );
49+
return FLAVOUR_QUARKUS_3_GRADLE_KTS.equals( flavour ) || FLAVOUR_QUARKUS_3_GRADLE.equals( flavour );
4850
}
4951

5052
private static final Properties MAP_FLAVOURS = SafeFunction.get( () -> {

fj-doc-maven-plugin/src/main/resources/config/flavour/flavour_versions_default.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# default flavour versions
22
quarkus-3=3.18.3
3+
quarkus-3-gradle=3.18.3
34
quarkus-3-gradle-kts=3.18.3
45
quarkus-2=2.16.12.Final
56
micronaut-4=4.7.4
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
.dockerignore
2+
src/main/docker/Dockerfile.native
3+
src/main/docker/Dockerfile.native-micro
4+
src/main/docker/Dockerfile.legacy-jar
5+
src/main/docker/Dockerfile.jvm
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
*
2+
!build/*-runner
3+
!build/*-runner.jar
4+
!build/lib/*
5+
!build/quarkus-app/*
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
####
2+
# This Dockerfile is used in order to build a container that runs the Quarkus application in JVM mode
3+
#
4+
# Before building the container image run:
5+
#
6+
# ./gradlew build
7+
#
8+
# Then, build the image with:
9+
#
10+
# docker build -f src/main/docker/Dockerfile.jvm -t quarkus/fj-doc-quarkus-tutorial-jvm .
11+
#
12+
# Then run the container using:
13+
#
14+
# docker run -i --rm -p 8080:8080 quarkus/fj-doc-quarkus-tutorial-jvm
15+
#
16+
# If you want to include the debug port into your docker image
17+
# you will have to expose the debug port (default 5005 being the default) like this : EXPOSE 8080 5005.
18+
# Additionally you will have to set -e JAVA_DEBUG=true and -e JAVA_DEBUG_PORT=*:5005
19+
# when running the container
20+
#
21+
# Then run the container using :
22+
#
23+
# docker run -i --rm -p 8080:8080 quarkus/fj-doc-quarkus-tutorial-jvm
24+
#
25+
# This image uses the `run-java.sh` script to run the application.
26+
# This scripts computes the command line to execute your Java application, and
27+
# includes memory/GC tuning.
28+
# You can configure the behavior using the following environment properties:
29+
# - JAVA_OPTS: JVM options passed to the `java` command (example: "-verbose:class")
30+
# - JAVA_OPTS_APPEND: User specified Java options to be appended to generated options
31+
# in JAVA_OPTS (example: "-Dsome.property=foo")
32+
# - JAVA_MAX_MEM_RATIO: Is used when no `-Xmx` option is given in JAVA_OPTS. This is
33+
# used to calculate a default maximal heap memory based on a containers restriction.
34+
# If used in a container without any memory constraints for the container then this
35+
# option has no effect. If there is a memory constraint then `-Xmx` is set to a ratio
36+
# of the container available memory as set here. The default is `50` which means 50%
37+
# of the available memory is used as an upper boundary. You can skip this mechanism by
38+
# setting this value to `0` in which case no `-Xmx` option is added.
39+
# - JAVA_INITIAL_MEM_RATIO: Is used when no `-Xms` option is given in JAVA_OPTS. This
40+
# is used to calculate a default initial heap memory based on the maximum heap memory.
41+
# If used in a container without any memory constraints for the container then this
42+
# option has no effect. If there is a memory constraint then `-Xms` is set to a ratio
43+
# of the `-Xmx` memory as set here. The default is `25` which means 25% of the `-Xmx`
44+
# is used as the initial heap size. You can skip this mechanism by setting this value
45+
# to `0` in which case no `-Xms` option is added (example: "25")
46+
# - JAVA_MAX_INITIAL_MEM: Is used when no `-Xms` option is given in JAVA_OPTS.
47+
# This is used to calculate the maximum value of the initial heap memory. If used in
48+
# a container without any memory constraints for the container then this option has
49+
# no effect. If there is a memory constraint then `-Xms` is limited to the value set
50+
# here. The default is 4096MB which means the calculated value of `-Xms` never will
51+
# be greater than 4096MB. The value of this variable is expressed in MB (example: "4096")
52+
# - JAVA_DIAGNOSTICS: Set this to get some diagnostics information to standard output
53+
# when things are happening. This option, if set to true, will set
54+
# `-XX:+UnlockDiagnosticVMOptions`. Disabled by default (example: "true").
55+
# - JAVA_DEBUG: If set remote debugging will be switched on. Disabled by default (example:
56+
# true").
57+
# - JAVA_DEBUG_PORT: Port used for remote debugging. Defaults to 5005 (example: "8787").
58+
# - CONTAINER_CORE_LIMIT: A calculated core limit as described in
59+
# https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt. (example: "2")
60+
# - CONTAINER_MAX_MEMORY: Memory limit given to the container (example: "1024").
61+
# - GC_MIN_HEAP_FREE_RATIO: Minimum percentage of heap free after GC to avoid expansion.
62+
# (example: "20")
63+
# - GC_MAX_HEAP_FREE_RATIO: Maximum percentage of heap free after GC to avoid shrinking.
64+
# (example: "40")
65+
# - GC_TIME_RATIO: Specifies the ratio of the time spent outside the garbage collection.
66+
# (example: "4")
67+
# - GC_ADAPTIVE_SIZE_POLICY_WEIGHT: The weighting given to the current GC time versus
68+
# previous GC times. (example: "90")
69+
# - GC_METASPACE_SIZE: The initial metaspace size. (example: "20")
70+
# - GC_MAX_METASPACE_SIZE: The maximum metaspace size. (example: "100")
71+
# - GC_CONTAINER_OPTIONS: Specify Java GC to use. The value of this variable should
72+
# contain the necessary JRE command-line options to specify the required GC, which
73+
# will override the default of `-XX:+UseParallelGC` (example: -XX:+UseG1GC).
74+
# - HTTPS_PROXY: The location of the https proxy. (example: "myuser@127.0.0.1:8080")
75+
# - HTTP_PROXY: The location of the http proxy. (example: "myuser@127.0.0.1:8080")
76+
# - NO_PROXY: A comma separated lists of hosts, IP addresses or domains that can be
77+
# accessed directly. (example: "foo.example.com,bar.example.com")
78+
#
79+
###
80+
FROM registry.access.redhat.com/ubi8/openjdk-21:1.20
81+
82+
ENV LANGUAGE='en_US:en'
83+
84+
85+
# We make four distinct layers so if there are application changes the library layers can be re-used
86+
COPY --chown=185 build/quarkus-app/lib/ /deployments/lib/
87+
COPY --chown=185 build/quarkus-app/*.jar /deployments/
88+
COPY --chown=185 build/quarkus-app/app/ /deployments/app/
89+
COPY --chown=185 build/quarkus-app/quarkus/ /deployments/quarkus/
90+
91+
EXPOSE 8080
92+
USER 185
93+
ENV JAVA_OPTS_APPEND="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
94+
ENV JAVA_APP_JAR="/deployments/quarkus-run.jar"
95+
96+
ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ]
97+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
####
2+
# This Dockerfile is used in order to build a container that runs the Quarkus application in JVM mode
3+
#
4+
# Before building the container image run:
5+
#
6+
# ./gradlew build -Dquarkus.package.jar.type=legacy-jar
7+
#
8+
# Then, build the image with:
9+
#
10+
# docker build -f src/main/docker/Dockerfile.legacy-jar -t quarkus/fj-doc-quarkus-tutorial-legacy-jar .
11+
#
12+
# Then run the container using:
13+
#
14+
# docker run -i --rm -p 8080:8080 quarkus/fj-doc-quarkus-tutorial-legacy-jar
15+
#
16+
# If you want to include the debug port into your docker image
17+
# you will have to expose the debug port (default 5005 being the default) like this : EXPOSE 8080 5005.
18+
# Additionally you will have to set -e JAVA_DEBUG=true and -e JAVA_DEBUG_PORT=*:5005
19+
# when running the container
20+
#
21+
# Then run the container using :
22+
#
23+
# docker run -i --rm -p 8080:8080 quarkus/fj-doc-quarkus-tutorial-legacy-jar
24+
#
25+
# This image uses the `run-java.sh` script to run the application.
26+
# This scripts computes the command line to execute your Java application, and
27+
# includes memory/GC tuning.
28+
# You can configure the behavior using the following environment properties:
29+
# - JAVA_OPTS: JVM options passed to the `java` command (example: "-verbose:class")
30+
# - JAVA_OPTS_APPEND: User specified Java options to be appended to generated options
31+
# in JAVA_OPTS (example: "-Dsome.property=foo")
32+
# - JAVA_MAX_MEM_RATIO: Is used when no `-Xmx` option is given in JAVA_OPTS. This is
33+
# used to calculate a default maximal heap memory based on a containers restriction.
34+
# If used in a container without any memory constraints for the container then this
35+
# option has no effect. If there is a memory constraint then `-Xmx` is set to a ratio
36+
# of the container available memory as set here. The default is `50` which means 50%
37+
# of the available memory is used as an upper boundary. You can skip this mechanism by
38+
# setting this value to `0` in which case no `-Xmx` option is added.
39+
# - JAVA_INITIAL_MEM_RATIO: Is used when no `-Xms` option is given in JAVA_OPTS. This
40+
# is used to calculate a default initial heap memory based on the maximum heap memory.
41+
# If used in a container without any memory constraints for the container then this
42+
# option has no effect. If there is a memory constraint then `-Xms` is set to a ratio
43+
# of the `-Xmx` memory as set here. The default is `25` which means 25% of the `-Xmx`
44+
# is used as the initial heap size. You can skip this mechanism by setting this value
45+
# to `0` in which case no `-Xms` option is added (example: "25")
46+
# - JAVA_MAX_INITIAL_MEM: Is used when no `-Xms` option is given in JAVA_OPTS.
47+
# This is used to calculate the maximum value of the initial heap memory. If used in
48+
# a container without any memory constraints for the container then this option has
49+
# no effect. If there is a memory constraint then `-Xms` is limited to the value set
50+
# here. The default is 4096MB which means the calculated value of `-Xms` never will
51+
# be greater than 4096MB. The value of this variable is expressed in MB (example: "4096")
52+
# - JAVA_DIAGNOSTICS: Set this to get some diagnostics information to standard output
53+
# when things are happening. This option, if set to true, will set
54+
# `-XX:+UnlockDiagnosticVMOptions`. Disabled by default (example: "true").
55+
# - JAVA_DEBUG: If set remote debugging will be switched on. Disabled by default (example:
56+
# true").
57+
# - JAVA_DEBUG_PORT: Port used for remote debugging. Defaults to 5005 (example: "8787").
58+
# - CONTAINER_CORE_LIMIT: A calculated core limit as described in
59+
# https://www.kernel.org/doc/Documentation/scheduler/sched-bwc.txt. (example: "2")
60+
# - CONTAINER_MAX_MEMORY: Memory limit given to the container (example: "1024").
61+
# - GC_MIN_HEAP_FREE_RATIO: Minimum percentage of heap free after GC to avoid expansion.
62+
# (example: "20")
63+
# - GC_MAX_HEAP_FREE_RATIO: Maximum percentage of heap free after GC to avoid shrinking.
64+
# (example: "40")
65+
# - GC_TIME_RATIO: Specifies the ratio of the time spent outside the garbage collection.
66+
# (example: "4")
67+
# - GC_ADAPTIVE_SIZE_POLICY_WEIGHT: The weighting given to the current GC time versus
68+
# previous GC times. (example: "90")
69+
# - GC_METASPACE_SIZE: The initial metaspace size. (example: "20")
70+
# - GC_MAX_METASPACE_SIZE: The maximum metaspace size. (example: "100")
71+
# - GC_CONTAINER_OPTIONS: Specify Java GC to use. The value of this variable should
72+
# contain the necessary JRE command-line options to specify the required GC, which
73+
# will override the default of `-XX:+UseParallelGC` (example: -XX:+UseG1GC).
74+
# - HTTPS_PROXY: The location of the https proxy. (example: "myuser@127.0.0.1:8080")
75+
# - HTTP_PROXY: The location of the http proxy. (example: "myuser@127.0.0.1:8080")
76+
# - NO_PROXY: A comma separated lists of hosts, IP addresses or domains that can be
77+
# accessed directly. (example: "foo.example.com,bar.example.com")
78+
#
79+
###
80+
FROM registry.access.redhat.com/ubi8/openjdk-21:1.20
81+
82+
ENV LANGUAGE='en_US:en'
83+
84+
85+
COPY build/lib/* /deployments/lib/
86+
COPY build/*-runner.jar /deployments/quarkus-run.jar
87+
88+
EXPOSE 8080
89+
USER 185
90+
ENV JAVA_OPTS_APPEND="-Dquarkus.http.host=0.0.0.0 -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
91+
ENV JAVA_APP_JAR="/deployments/quarkus-run.jar"
92+
93+
ENTRYPOINT [ "/opt/jboss/container/java/run/run-java.sh" ]

0 commit comments

Comments
 (0)