Skip to content

Commit

Permalink
Introduce ApplicationConfig
Browse files Browse the repository at this point in the history
This allows users to set a desired name for the applications
(using quarkus.application.name) or version.
The idea came from:

#1300 (comment)

and this configuration is meant to be used by extensions that for some
reason need this information (like the planned kubernetes extension)
  • Loading branch information
geoand committed Mar 25, 2019
1 parent cd3b8a8 commit 187f875
Show file tree
Hide file tree
Showing 10 changed files with 138 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
import io.quarkus.creator.phase.curate.CurateOutcome;
import io.quarkus.creator.util.IoUtils;
import io.quarkus.creator.util.ZipUtils;
import io.quarkus.deployment.ApplicationInfo;
import io.quarkus.deployment.ClassOutput;
import io.quarkus.deployment.QuarkusAugmentor;
import io.quarkus.deployment.QuarkusClassWriter;
Expand Down Expand Up @@ -311,6 +312,9 @@ public void writeResource(String name, byte[] data) throws IOException {
builder.setRoot(appClassesDir);
builder.setClassLoader(runnerClassLoader);
builder.setOutput(classOutput);
final AppArtifact appArtifact = appState.getAppArtifact();
builder.setApplicationInfo(
new ApplicationInfo(appArtifact.getGroupId(), appArtifact.getArtifactId(), appArtifact.getVersion()));
builder.addFinal(BytecodeTransformerBuildItem.class).addFinal(MainClassBuildItem.class)
.addFinal(SubstrateOutputBuildItem.class);
result = builder.build().run();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package io.quarkus.deployment;

import io.quarkus.runtime.annotations.ConfigPhase;
import io.quarkus.runtime.annotations.ConfigRoot;

@ConfigRoot(phase = ConfigPhase.BUILD_TIME)
public class ApplicationConfig {

/**
* The name of the application.
* If not set, defaults to the name of the project.
*/
String name;

/**
* The version of the application.
* If not set, defaults to the version of the project
*/
String version;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package io.quarkus.deployment;

public class ApplicationInfo {

public static final ApplicationInfo UNSET = new ApplicationInfo(null, null, null);

private final String group;
private final String name;
private final String version;

public ApplicationInfo(String group, String name, String version) {
this.group = group;
this.name = name;
this.version = version;
}

public String getGroup() {
return group;
}

public String getName() {
return name;
}

public String getVersion() {
return version;
}

public boolean isUnset() {
return this == UNSET;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,14 @@
import org.jboss.logging.Logger;

import io.quarkus.deployment.builditem.AdditionalApplicationArchiveBuildItem;
import io.quarkus.deployment.builditem.AdditionalApplicationArchiveMarkerBuildItem;
import io.quarkus.deployment.builditem.ApplicationInfoBuildItem;
import io.quarkus.deployment.builditem.ArchiveRootBuildItem;
import io.quarkus.deployment.builditem.ClassOutputBuildItem;
import io.quarkus.deployment.builditem.ExtensionClassLoaderBuildItem;
import io.quarkus.deployment.builditem.GeneratedClassBuildItem;
import io.quarkus.deployment.builditem.GeneratedResourceBuildItem;
import io.quarkus.deployment.builditem.LaunchModeBuildItem;
import io.quarkus.deployment.builditem.ShutdownContextBuildItem;
import io.quarkus.deployment.builditem.substrate.SubstrateResourceBuildItem;
import io.quarkus.runtime.LaunchMode;

public class QuarkusAugmentor {
Expand All @@ -53,6 +52,7 @@ public class QuarkusAugmentor {
private final List<Consumer<BuildChainBuilder>> buildChainCustomizers;
private final LaunchMode launchMode;
private final List<Path> additionalApplicationArchives;
private final ApplicationInfo applicationInfo;

QuarkusAugmentor(Builder builder) {
this.output = builder.output;
Expand All @@ -62,6 +62,7 @@ public class QuarkusAugmentor {
this.buildChainCustomizers = new ArrayList<>(builder.buildChainCustomizers);
this.launchMode = builder.launchMode;
this.additionalApplicationArchives = new ArrayList<>(builder.additionalApplicationArchives);
this.applicationInfo = builder.applicationInfo;
}

public BuildResult run() throws Exception {
Expand All @@ -84,6 +85,11 @@ public BuildResult run() throws Exception {
.addInitial(LaunchModeBuildItem.class)
.addInitial(AdditionalApplicationArchiveBuildItem.class)
.addInitial(ExtensionClassLoaderBuildItem.class);

if (!applicationInfo.isUnset()) {
chainBuilder.addInitial(ApplicationInfoBuildItem.class);
}

for (Class<? extends BuildItem> i : finalResults) {
chainBuilder.addFinal(i);
}
Expand All @@ -103,6 +109,11 @@ public BuildResult run() throws Exception {
.produce(new ShutdownContextBuildItem())
.produce(new LaunchModeBuildItem(launchMode))
.produce(new ExtensionClassLoaderBuildItem(classLoader));

if (!applicationInfo.isUnset()) {
execBuilder.produce(new ApplicationInfoBuildItem(applicationInfo));
}

for (Path i : additionalApplicationArchives) {
execBuilder.produce(new AdditionalApplicationArchiveBuildItem(i));
}
Expand Down Expand Up @@ -136,6 +147,7 @@ public static final class Builder {
Set<Class<? extends BuildItem>> finalResults = new HashSet<>();
private final List<Consumer<BuildChainBuilder>> buildChainCustomizers = new ArrayList<>();
LaunchMode launchMode = LaunchMode.NORMAL;
ApplicationInfo applicationInfo;

public Builder addBuildChainCustomizer(Consumer<BuildChainBuilder> customizer) {
this.buildChainCustomizers.add(customizer);
Expand Down Expand Up @@ -192,6 +204,11 @@ public Builder setRoot(Path root) {
return this;
}

public Builder setApplicationInfo(ApplicationInfo applicationInfo) {
this.applicationInfo = applicationInfo;
return this;
}

public QuarkusAugmentor build() {
return new QuarkusAugmentor(this);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package io.quarkus.deployment.builditem;

import org.jboss.builder.item.SimpleBuildItem;

import io.quarkus.deployment.ApplicationInfo;

public final class ApplicationInfoBuildItem extends SimpleBuildItem {

private final ApplicationInfo applicationInfo;

public ApplicationInfoBuildItem(ApplicationInfo applicationInfo) {
this.applicationInfo = applicationInfo;
}

public ApplicationInfo getApplicationInfo() {
return applicationInfo;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.OptionalInt;
import java.util.Properties;
import java.util.Set;
Expand All @@ -38,8 +39,10 @@
import org.wildfly.security.ssl.Protocol;

import io.quarkus.deployment.AccessorFinder;
import io.quarkus.deployment.ApplicationInfo;
import io.quarkus.deployment.annotations.BuildProducer;
import io.quarkus.deployment.annotations.BuildStep;
import io.quarkus.deployment.builditem.ApplicationInfoBuildItem;
import io.quarkus.deployment.builditem.ArchiveRootBuildItem;
import io.quarkus.deployment.builditem.BuildTimeConfigurationBuildItem;
import io.quarkus.deployment.builditem.BuildTimeRunTimeFixedConfigurationBuildItem;
Expand Down Expand Up @@ -82,6 +85,7 @@
import io.quarkus.runtime.configuration.SimpleConfigurationProviderResolver;
import io.quarkus.runtime.configuration.ssl.CipherSuiteSelectorConverter;
import io.quarkus.runtime.configuration.ssl.ProtocolConverter;
import io.smallrye.config.PropertiesConfigSource;
import io.smallrye.config.SmallRyeConfig;
import io.smallrye.config.SmallRyeConfigBuilder;
import io.smallrye.config.SmallRyeConfigProviderResolver;
Expand Down Expand Up @@ -200,7 +204,8 @@ public void initializeConfiguration(
Consumer<SubstrateResourceBuildItem> niResourceConsumer,
Consumer<RunTimeConfigurationDefaultBuildItem> runTimeDefaultConsumer,
ExtensionClassLoaderBuildItem extensionClassLoaderBuildItem,
ArchiveRootBuildItem archiveRootBuildItem) throws IOException, ClassNotFoundException {
ArchiveRootBuildItem archiveRootBuildItem,
Optional<ApplicationInfoBuildItem> applicationInfo) throws IOException, ClassNotFoundException {
// set up the configuration definitions
final ConfigDefinition buildTimeConfig = new ConfigDefinition(FieldDescriptor.of("Bogus", "No field", "Nothing"));
final ConfigDefinition buildTimeRunTimeConfig = new ConfigDefinition(BUILD_TIME_CONFIG_FIELD);
Expand Down Expand Up @@ -231,7 +236,21 @@ public void initializeConfiguration(
builder.withWrapper(ExpandingConfigSource::new);
builder.addDefaultSources();
final ApplicationPropertiesConfigSource.InJar inJar = new ApplicationPropertiesConfigSource.InJar();
builder.withSources(inJar);
if (applicationInfo.isPresent()) {
final HashMap<String, String> appStateProperties = new HashMap<>();
final ApplicationInfo defaultValues = applicationInfo.get().getApplicationInfo();
// these are the default values that will be used for ApplicationConfig
appStateProperties.put("quarkus.application.name", defaultValues.getName());
appStateProperties.put("quarkus.application.version", defaultValues.getVersion());

builder.withSources(
inJar,
// the ordinal of 240 because it's slightly lower priority then what inJar uses
new PropertiesConfigSource(appStateProperties, "appState", 240));
} else {
builder.withSources(inJar);
}

for (ConfigurationCustomConverterBuildItem converter : converters) {
withConverterHelper(builder, converter.getType(), converter.getPriority(), converter.getConverter());
}
Expand Down
10 changes: 10 additions & 0 deletions core/deployment/src/main/java/io/quarkus/runner/RuntimeRunner.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
import org.jboss.builder.BuildResult;
import org.objectweb.asm.ClassVisitor;

import io.quarkus.deployment.ApplicationInfo;
import io.quarkus.deployment.ClassOutput;
import io.quarkus.deployment.QuarkusAugmentor;
import io.quarkus.deployment.builditem.ApplicationClassNameBuildItem;
Expand All @@ -52,6 +53,7 @@ public class RuntimeRunner implements Runnable, Closeable {
private final List<Path> additionalArchives;
private final List<Consumer<BuildChainBuilder>> chainCustomizers;
private final LaunchMode launchMode;
private final ApplicationInfo applicationInfo;

public RuntimeRunner(Builder builder) {
this.target = builder.target;
Expand All @@ -69,6 +71,7 @@ public RuntimeRunner(Builder builder) {
this.transformerTarget = builder.transformerTarget;
this.loader = builder.classLoader;
}
this.applicationInfo = builder.applicationInfo;
}

@Override
Expand All @@ -87,6 +90,7 @@ public void run() {
builder.setClassLoader(loader);
builder.setOutput(classOutput);
builder.setLaunchMode(launchMode);
builder.setApplicationInfo(applicationInfo);
for (Path i : additionalArchives) {
builder.addAdditionalApplicationArchive(i);
}
Expand Down Expand Up @@ -145,6 +149,7 @@ public static class Builder {
private Path frameworkClassesPath;
private Path transformerCache;
private LaunchMode launchMode = LaunchMode.NORMAL;
private ApplicationInfo applicationInfo = ApplicationInfo.UNSET;
private final List<Path> additionalArchives = new ArrayList<>();
private final List<Consumer<BuildChainBuilder>> chainCustomizers = new ArrayList<>();
private ClassOutput classOutput;
Expand Down Expand Up @@ -205,6 +210,11 @@ public Builder setTransformerTarget(TransformerTarget transformerTarget) {
return this;
}

public Builder setApplicationInfo(ApplicationInfo applicationInfo) {
this.applicationInfo = applicationInfo;
return this;
}

public RuntimeRunner build() {
return new RuntimeRunner(this);
}
Expand Down
8 changes: 8 additions & 0 deletions core/devmode/src/main/java/io/quarkus/dev/DevModeMain.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@

import org.jboss.logging.Logger;

import io.quarkus.deployment.ApplicationInfo;
import io.quarkus.runner.RuntimeRunner;
import io.quarkus.runtime.LaunchMode;
import io.quarkus.runtime.Timing;
Expand All @@ -41,6 +42,9 @@ public class DevModeMain {
private static File classesRoot;
private static File wiringDir;
private static File cacheDir;
private static String group;
private static String name;
private static String version;

private static Closeable closeable;
static volatile Throwable deploymentProblem;
Expand All @@ -54,6 +58,9 @@ public static void main(String... args) throws Exception {
classesRoot = new File(args[0]);
wiringDir = new File(args[1]);
cacheDir = new File(args[2]);
group = args[3];
name = args[4];
version = args[5];

runtimeUpdatesProcessor = RuntimeCompilationSetup.setup();
if (runtimeUpdatesProcessor != null) {
Expand Down Expand Up @@ -99,6 +106,7 @@ private static synchronized void doStart() {
.setTarget(classesRoot.toPath())
.setFrameworkClassesPath(wiringDir.toPath())
.setTransformerCache(cacheDir.toPath())
.setApplicationInfo(new ApplicationInfo(group, name, version))
.build();
runner.run();
closeable = runner;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,9 @@ public void startDev() {
args.add(tempFile.getAbsolutePath());
args.add(extension.outputDirectory().getAbsolutePath());
args.add(wiringClassesDirectory.getAbsolutePath());
args.add(extension.groupId());
args.add(extension.artifactId());
args.add(extension.version());
args.add(new File(getBuildDir(), "transformer-cache").getAbsolutePath());
ProcessBuilder pb = new ProcessBuilder(args.toArray(new String[0]));
pb.redirectError(ProcessBuilder.Redirect.INHERIT);
Expand Down
3 changes: 3 additions & 0 deletions devtools/maven/src/main/java/io/quarkus/maven/DevMojo.java
Original file line number Diff line number Diff line change
Expand Up @@ -306,6 +306,9 @@ public void execute() throws MojoFailureException, MojoExecutionException {
args.add(outputDirectory.getAbsolutePath());
args.add(wiringClassesDirectory.getAbsolutePath());
args.add(new File(buildDir, "transformer-cache").getAbsolutePath());
args.add(project.getGroupId());
args.add(project.getArtifactId());
args.add(project.getVersion());
// Display the launch command line in debug mode
getLog().debug("Launching JVM with comand line: " + args.toString());
ProcessBuilder pb = new ProcessBuilder(args.toArray(new String[0]));
Expand Down

0 comments on commit 187f875

Please sign in to comment.