Skip to content

Commit 25ecf66

Browse files
authored
Add quarkus-3-gradle-kts flavour #284 (#285)
1 parent cde9f7e commit 25ecf66

31 files changed

+923
-53
lines changed

fj-doc-maven-plugin/src/main/java/org/fugerit/java/doc/maven/MojoAdd.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,10 @@ public class MojoAdd extends AbstractMojo {
5050
@Parameter(property = "freemarkerVersion", defaultValue = "2.3.32", required = true)
5151
protected String freemarkerVersion;
5252

53+
protected String groupIdOverride;
54+
55+
protected String artifactIdOverride;
56+
5357
@Override
5458
public void execute() throws MojoExecutionException, MojoFailureException {
5559
String foundVersion = VersionCheck.findVersion( this.version );
@@ -64,8 +68,10 @@ public void execute() throws MojoExecutionException, MojoFailureException {
6468
context.setAddLombok( this.addLombok );
6569
context.setAddDependencyOnTop( this.addDependencyOnTop );
6670
context.setFreemarkerVersion( this.freemarkerVersion );
71+
context.setGroupIdOverride( this.groupIdOverride );
72+
context.setArtifactIdOverride( this.artifactIdOverride );
6773
this.getLog().info( String.format( "add execute() context : %s", context ) );
68-
AddVenusFacade.addVenusToMavenProject( context );
74+
AddVenusFacade.addToProject( context );
6975
}
7076

7177
}

fj-doc-maven-plugin/src/main/java/org/fugerit/java/doc/maven/MojoInit.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ public void execute() throws MojoExecutionException, MojoFailureException {
6666
this.getLog().info( String.format( "flavour context : %s", context ) );
6767
FlavourFacade.initProject( context );
6868
} );
69+
super.groupIdOverride = this.groupId;
70+
super.artifactIdOverride = this.artifactId;
6971
super.execute();
7072
}
7173

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

Lines changed: 51 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package org.fugerit.java.doc.project.facade;
22

3-
import freemarker.template.*;
3+
import freemarker.template.Configuration;
4+
import freemarker.template.TemplateException;
45
import lombok.extern.slf4j.Slf4j;
6+
import org.apache.maven.model.Model;
57
import org.fugerit.java.core.cfg.ConfigException;
68
import org.fugerit.java.core.function.SafeFunction;
79
import org.fugerit.java.core.io.FileIO;
@@ -11,8 +13,12 @@
1113
import org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfig;
1214
import org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade;
1315

14-
import java.io.*;
15-
import java.util.*;
16+
import java.io.File;
17+
import java.io.IOException;
18+
import java.io.InputStream;
19+
import java.util.HashMap;
20+
import java.util.Map;
21+
import java.util.Properties;
1622

1723
@Slf4j
1824
public class AddVenusFacade extends BasicVenusFacade {
@@ -115,24 +121,52 @@ private static void addDocFacade( VenusContext context ) throws IOException, Tem
115121
configuration.clearTemplateCache();
116122
}
117123

118-
public static boolean addVenusToMavenProject( VenusContext context ) {
124+
public static boolean addToProject( VenusContext context ) {
119125
return SafeFunction.get( () -> {
120126
File pomFile = new File( context.getProjectDir(), "pom.xml" );
121-
log.info( "project dir : {}", context.getProjectDir().getCanonicalPath() );
122127
if ( pomFile.exists() ) {
123-
addExtensionList( pomFile, context );
124-
if ( context.isAddDocFacace() ) {
125-
addDocFacade( context );
126-
if ( context.isAddJunit5() ) {
127-
log.info( "Generation complete:\n{}\n* For usage open the example junit : {} *\n{}", LINE, "test."+context.getDocConfigPackage()+"."+context.getDocConfigClass()+"Test", LINE );
128-
} else {
129-
log.info( "Generation complete:\n{}\n* For usage open the example main() : {} *\n{}", LINE, context.getDocConfigPackage()+"."+context.getDocConfigClass()+"Example", LINE );
130-
}
131-
log.info( "for documentation refer to https://github.com/fugerit-org/fj-doc/blob/main/fj-doc-maven-plugin/README.md" );
132-
}
128+
return addVenusToMavenProject( pomFile, context );
133129
} else {
134-
addErrorAndLog( String.format( "No pom file in project dir : %s", pomFile.getCanonicalPath() ), context );
135-
return false;
130+
File gradleFile = new File( context.getProjectDir(), "build.gradle.kts" );
131+
if ( gradleFile.exists() ) {
132+
return addVenusToGradleKtsProject( gradleFile, context );
133+
} else {
134+
addErrorAndLog( String.format( "No pom or gradle file in project dir : %s", pomFile.getCanonicalPath() ), context );
135+
return false;
136+
}
137+
}
138+
} );
139+
}
140+
141+
public static boolean addVenusToMavenProject( File pomFile, VenusContext context ) {
142+
return SafeFunction.get( () -> {
143+
log.info( "maven project dir : {}", context.getProjectDir().getCanonicalPath() );
144+
addExtensionList( pomFile, context );
145+
if ( context.isAddDocFacace() ) {
146+
addDocFacade( context );
147+
if ( context.isAddJunit5() ) {
148+
log.info( "Generation complete:\n{}\n* For usage open the example junit : {} *\n{}", LINE, "test."+context.getDocConfigPackage()+"."+context.getDocConfigClass()+"Test", LINE );
149+
} else {
150+
log.info( "Generation complete:\n{}\n* For usage open the example main() : {} *\n{}", LINE, context.getDocConfigPackage()+"."+context.getDocConfigClass()+"Example", LINE );
151+
}
152+
log.info( "for documentation refer to https://github.com/fugerit-org/fj-doc/blob/main/fj-doc-maven-plugin/README.md" );
153+
}
154+
return true;
155+
} );
156+
}
157+
158+
public static boolean addVenusToGradleKtsProject( File gradleFile, VenusContext context ) {
159+
return SafeFunction.get( () -> {
160+
log.info( "gradle project dir : {}", context.getProjectDir().getCanonicalPath() );
161+
addExtensionGradleKtsList( gradleFile, context );
162+
if ( context.isAddDocFacace() ) {
163+
if ( context.getMavenModel() == null ) {
164+
Model model = new Model();
165+
model.setGroupId(context.getGroupIdOverride());
166+
model.setArtifactId(context.getArtifactIdOverride());
167+
context.setMavenModel(model);
168+
}
169+
addDocFacade( context );
136170
}
137171
return true;
138172
} );

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

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,13 @@
55
import org.codehaus.plexus.util.xml.Xpp3Dom;
66
import org.codehaus.plexus.util.xml.Xpp3DomBuilder;
77
import org.fugerit.java.core.cfg.ConfigRuntimeException;
8+
import org.fugerit.java.core.io.FileIO;
89
import org.fugerit.java.core.io.helper.HelperIOException;
910
import org.fugerit.java.core.lang.helpers.StringUtils;
1011
import org.maxxq.maven.dependency.ModelIO;
1112

1213
import java.io.*;
14+
import java.util.Collections;
1315
import java.util.Iterator;
1416
import java.util.List;
1517
import java.util.Properties;
@@ -149,6 +151,33 @@ protected static void addExtensionList( File pomFile, VenusContext context ) thr
149151
}
150152
}
151153

154+
private static final String CONST_IMPLEMENTATION = "implementation";
155+
156+
protected static void addExtensionGradleKtsList( File gradleFile, VenusContext context ) throws IOException {
157+
// note, this will currently only work for very simple build.gradle.kts files
158+
String gradleFileContent = FileIO.readString( gradleFile );
159+
String valVersion = String.format( "val fjDocVersion = \"%s\"\n\ndependencies", context.getVersion() );
160+
gradleFileContent = gradleFileContent.replaceFirst( "dependencies", valVersion );
161+
List<String> moduleListGradle = ModuleFacade.toModuleListOptimizedOrder( context.getExtensions() );
162+
Collections.reverse( moduleListGradle );
163+
log.info( "moduleListGradle : {}", moduleListGradle );
164+
for ( String currentModule : moduleListGradle ) {
165+
String moduleNameGradle = ModuleFacade.toModuleName( currentModule );
166+
String currentImplementation = String.format( "implementation\\(\"org.fugerit.java:%s:\\$fjDocVersion\"\\)%n implementation", moduleNameGradle );
167+
log.info( "Adding module to gradle file : {}, substitution : {}", moduleNameGradle, currentImplementation );
168+
gradleFileContent = gradleFileContent.replaceFirst( CONST_IMPLEMENTATION, currentImplementation );
169+
context.getModules().add( moduleNameGradle );
170+
}
171+
if (context.isAddLombok() ) {
172+
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 ) );
177+
}
178+
FileIO.writeString( gradleFileContent, gradleFile );
179+
}
180+
152181
private static void addPlugin( VenusContext context, Model model ) throws IOException {
153182
// addVerifyPlugin?
154183
if ( context.isAddVerifyPlugin() ) {

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

Lines changed: 7 additions & 1 deletion
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_KTS = "quarkus-3-gradle-kts";
29+
2830
public static final String FLAVOUR_QUARKUS_2 = "quarkus-2";
2931

3032
public static final String FLAVOUR_QUARKUS_LATEST = "quarkus-latest";
@@ -38,9 +40,13 @@ private FlavourFacade() {}
3840
private static final Properties FLAVOURS_DEFAULT_VERSION = PropsIO.loadFromClassLoaderSafe( "config/flavour/flavour_versions_default.properties" );
3941

4042
public static final Set<String> SUPPORTED_FLAVOURS = Collections.unmodifiableSet(
41-
new HashSet<>( Arrays.asList( FLAVOUR_VANILLA, FLAVOUR_QUARKUS_3, FLAVOUR_QUARKUS_2,
43+
new HashSet<>( Arrays.asList( FLAVOUR_VANILLA, FLAVOUR_QUARKUS_3, FLAVOUR_QUARKUS_3_GRADLE_KTS, FLAVOUR_QUARKUS_2,
4244
FLAVOUR_MICRONAUT_4, FLAVOUR_SPRINGBOOT_3, FLAVOUR_OPENLIBERTY ) ) );
4345

46+
public static boolean isGradleKtsFlavour(String flavour ) {
47+
return FLAVOUR_QUARKUS_3_GRADLE_KTS.equals( flavour );
48+
}
49+
4450
private static final Properties MAP_FLAVOURS = SafeFunction.get( () -> {
4551
Properties prop = new Properties();
4652
prop.setProperty( FLAVOUR_QUARKUS_LATEST, FLAVOUR_QUARKUS_3 );

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,12 @@ public static String toResourcePathFmConfigXml( String artifactId ) {
8181
@Getter @Setter
8282
private String freemarkerVersion;
8383

84+
@Getter @Setter
85+
private String groupIdOverride;
86+
87+
@Getter @Setter
88+
private String artifactIdOverride;
89+
8490
public void setExcludeXmlApis( boolean excludeXmlApis ) {
8591
if ( excludeXmlApis ) {
8692
this.setAddExclusions( "xml-apis:xml-apis" );

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.1
3+
quarkus-3-gradle-kts=3.18.1
34
quarkus-2=2.16.12.Final
45
micronaut-4=4.7.4
56
springboot-3=3.4.2
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/*
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+

0 commit comments

Comments
 (0)