Skip to content

Commit

Permalink
Add quarkus-3-gradle-kts flavour #284 (#285)
Browse files Browse the repository at this point in the history
  • Loading branch information
fugerit79 authored Jan 31, 2025
1 parent cde9f7e commit 25ecf66
Show file tree
Hide file tree
Showing 31 changed files with 923 additions and 53 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,10 @@ public class MojoAdd extends AbstractMojo {
@Parameter(property = "freemarkerVersion", defaultValue = "2.3.32", required = true)
protected String freemarkerVersion;

protected String groupIdOverride;

protected String artifactIdOverride;

@Override
public void execute() throws MojoExecutionException, MojoFailureException {
String foundVersion = VersionCheck.findVersion( this.version );
Expand All @@ -64,8 +68,10 @@ public void execute() throws MojoExecutionException, MojoFailureException {
context.setAddLombok( this.addLombok );
context.setAddDependencyOnTop( this.addDependencyOnTop );
context.setFreemarkerVersion( this.freemarkerVersion );
context.setGroupIdOverride( this.groupIdOverride );
context.setArtifactIdOverride( this.artifactIdOverride );
this.getLog().info( String.format( "add execute() context : %s", context ) );
AddVenusFacade.addVenusToMavenProject( context );
AddVenusFacade.addToProject( context );
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,8 @@ public void execute() throws MojoExecutionException, MojoFailureException {
this.getLog().info( String.format( "flavour context : %s", context ) );
FlavourFacade.initProject( context );
} );
super.groupIdOverride = this.groupId;
super.artifactIdOverride = this.artifactId;
super.execute();
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package org.fugerit.java.doc.project.facade;

import freemarker.template.*;
import freemarker.template.Configuration;
import freemarker.template.TemplateException;
import lombok.extern.slf4j.Slf4j;
import org.apache.maven.model.Model;
import org.fugerit.java.core.cfg.ConfigException;
import org.fugerit.java.core.function.SafeFunction;
import org.fugerit.java.core.io.FileIO;
Expand All @@ -11,8 +13,12 @@
import org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfig;
import org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade;

import java.io.*;
import java.util.*;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

@Slf4j
public class AddVenusFacade extends BasicVenusFacade {
Expand Down Expand Up @@ -115,24 +121,52 @@ private static void addDocFacade( VenusContext context ) throws IOException, Tem
configuration.clearTemplateCache();
}

public static boolean addVenusToMavenProject( VenusContext context ) {
public static boolean addToProject( VenusContext context ) {
return SafeFunction.get( () -> {
File pomFile = new File( context.getProjectDir(), "pom.xml" );
log.info( "project dir : {}", context.getProjectDir().getCanonicalPath() );
if ( pomFile.exists() ) {
addExtensionList( pomFile, context );
if ( context.isAddDocFacace() ) {
addDocFacade( context );
if ( context.isAddJunit5() ) {
log.info( "Generation complete:\n{}\n* For usage open the example junit : {} *\n{}", LINE, "test."+context.getDocConfigPackage()+"."+context.getDocConfigClass()+"Test", LINE );
} else {
log.info( "Generation complete:\n{}\n* For usage open the example main() : {} *\n{}", LINE, context.getDocConfigPackage()+"."+context.getDocConfigClass()+"Example", LINE );
}
log.info( "for documentation refer to https://github.com/fugerit-org/fj-doc/blob/main/fj-doc-maven-plugin/README.md" );
}
return addVenusToMavenProject( pomFile, context );
} else {
addErrorAndLog( String.format( "No pom file in project dir : %s", pomFile.getCanonicalPath() ), context );
return false;
File gradleFile = new File( context.getProjectDir(), "build.gradle.kts" );
if ( gradleFile.exists() ) {
return addVenusToGradleKtsProject( gradleFile, context );
} else {
addErrorAndLog( String.format( "No pom or gradle file in project dir : %s", pomFile.getCanonicalPath() ), context );
return false;
}
}
} );
}

public static boolean addVenusToMavenProject( File pomFile, VenusContext context ) {
return SafeFunction.get( () -> {
log.info( "maven project dir : {}", context.getProjectDir().getCanonicalPath() );
addExtensionList( pomFile, context );
if ( context.isAddDocFacace() ) {
addDocFacade( context );
if ( context.isAddJunit5() ) {
log.info( "Generation complete:\n{}\n* For usage open the example junit : {} *\n{}", LINE, "test."+context.getDocConfigPackage()+"."+context.getDocConfigClass()+"Test", LINE );
} else {
log.info( "Generation complete:\n{}\n* For usage open the example main() : {} *\n{}", LINE, context.getDocConfigPackage()+"."+context.getDocConfigClass()+"Example", LINE );
}
log.info( "for documentation refer to https://github.com/fugerit-org/fj-doc/blob/main/fj-doc-maven-plugin/README.md" );
}
return true;
} );
}

public static boolean addVenusToGradleKtsProject( File gradleFile, VenusContext context ) {
return SafeFunction.get( () -> {
log.info( "gradle project dir : {}", context.getProjectDir().getCanonicalPath() );
addExtensionGradleKtsList( gradleFile, context );
if ( context.isAddDocFacace() ) {
if ( context.getMavenModel() == null ) {
Model model = new Model();
model.setGroupId(context.getGroupIdOverride());
model.setArtifactId(context.getArtifactIdOverride());
context.setMavenModel(model);
}
addDocFacade( context );
}
return true;
} );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@
import org.codehaus.plexus.util.xml.Xpp3Dom;
import org.codehaus.plexus.util.xml.Xpp3DomBuilder;
import org.fugerit.java.core.cfg.ConfigRuntimeException;
import org.fugerit.java.core.io.FileIO;
import org.fugerit.java.core.io.helper.HelperIOException;
import org.fugerit.java.core.lang.helpers.StringUtils;
import org.maxxq.maven.dependency.ModelIO;

import java.io.*;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Properties;
Expand Down Expand Up @@ -149,6 +151,33 @@ 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 {
// 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 );
List<String> 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 );
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 ) );
}
FileIO.writeString( gradleFileContent, gradleFile );
}

private static void addPlugin( VenusContext context, Model model ) throws IOException {
// addVerifyPlugin?
if ( context.isAddVerifyPlugin() ) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ private FlavourFacade() {}

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

public static final String FLAVOUR_QUARKUS_3_GRADLE_KTS = "quarkus-3-gradle-kts";

public static final String FLAVOUR_QUARKUS_2 = "quarkus-2";

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

public static final Set<String> SUPPORTED_FLAVOURS = Collections.unmodifiableSet(
new HashSet<>( Arrays.asList( FLAVOUR_VANILLA, FLAVOUR_QUARKUS_3, FLAVOUR_QUARKUS_2,
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 ) ) );

public static boolean isGradleKtsFlavour(String flavour ) {
return FLAVOUR_QUARKUS_3_GRADLE_KTS.equals( flavour );
}

private static final Properties MAP_FLAVOURS = SafeFunction.get( () -> {
Properties prop = new Properties();
prop.setProperty( FLAVOUR_QUARKUS_LATEST, FLAVOUR_QUARKUS_3 );
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,12 @@ public static String toResourcePathFmConfigXml( String artifactId ) {
@Getter @Setter
private String freemarkerVersion;

@Getter @Setter
private String groupIdOverride;

@Getter @Setter
private String artifactIdOverride;

public void setExcludeXmlApis( boolean excludeXmlApis ) {
if ( excludeXmlApis ) {
this.setAddExclusions( "xml-apis:xml-apis" );
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
# default flavour versions
quarkus-3=3.18.1
quarkus-3-gradle-kts=3.18.1
quarkus-2=2.16.12.Final
micronaut-4=4.7.4
springboot-3=3.4.2
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
*
!build/*-runner
!build/*-runner.jar
!build/lib/*
!build/quarkus-app/*
Original file line number Diff line number Diff line change
@@ -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" ]

Loading

0 comments on commit 25ecf66

Please sign in to comment.