Skip to content

Commit 45fa5d3

Browse files
authored
Merge pull request #44518 from dmlloyd/drop-xjrbi
Discontinue support for `*JarRequiredBuildItem`
2 parents 19ee291 + a6850cc commit 45fa5d3

File tree

21 files changed

+248
-134
lines changed

21 files changed

+248
-134
lines changed

core/deployment/src/main/java/io/quarkus/deployment/cmd/RunCommandProcessor.java

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package io.quarkus.deployment.cmd;
22

3-
import static io.quarkus.deployment.pkg.PackageConfig.JarConfig.JarType.*;
43
import static io.quarkus.deployment.pkg.steps.JarResultBuildStep.DEFAULT_FAST_JAR_DIRECTORY_NAME;
54
import static io.quarkus.deployment.pkg.steps.JarResultBuildStep.QUARKUS_RUN_JAR;
65

@@ -14,9 +13,7 @@
1413
import io.quarkus.deployment.annotations.BuildStep;
1514
import io.quarkus.deployment.pkg.PackageConfig;
1615
import io.quarkus.deployment.pkg.builditem.BuildSystemTargetBuildItem;
17-
import io.quarkus.deployment.pkg.builditem.LegacyJarRequiredBuildItem;
1816
import io.quarkus.deployment.pkg.builditem.OutputTargetBuildItem;
19-
import io.quarkus.deployment.pkg.builditem.UberJarRequiredBuildItem;
2017

2118
public class RunCommandProcessor {
2219
private static final String JAVA_HOME_SYS = "java.home";
@@ -31,25 +28,18 @@ public RunCommandActionResultBuildItem commands(List<RunCommandActionBuildItem>
3128
@BuildStep
3229
public void defaultJavaCommand(PackageConfig packageConfig,
3330
OutputTargetBuildItem jar,
34-
List<UberJarRequiredBuildItem> uberJarRequired,
35-
List<LegacyJarRequiredBuildItem> legacyJarRequired,
3631
BuildProducer<RunCommandActionBuildItem> cmds,
3732
BuildSystemTargetBuildItem buildSystemTarget) {
3833

39-
Path jarPath = null;
40-
if (legacyJarRequired.isEmpty() && (!uberJarRequired.isEmpty()
41-
|| packageConfig.jar().type() == UBER_JAR)) {
42-
jarPath = jar.getOutputDirectory()
34+
Path jarPath = switch (packageConfig.jar().type()) {
35+
case UBER_JAR -> jar.getOutputDirectory()
4336
.resolve(jar.getBaseName() + packageConfig.computedRunnerSuffix() + ".jar");
44-
} else if (!legacyJarRequired.isEmpty()
45-
|| packageConfig.jar().type() == LEGACY_JAR) {
4637
// todo: legacy JAR should be using runnerSuffix()
47-
jarPath = jar.getOutputDirectory()
38+
case LEGACY_JAR -> jar.getOutputDirectory()
4839
.resolve(jar.getBaseName() + packageConfig.computedRunnerSuffix() + ".jar");
49-
} else {
50-
jarPath = jar.getOutputDirectory().resolve(DEFAULT_FAST_JAR_DIRECTORY_NAME).resolve(QUARKUS_RUN_JAR);
51-
52-
}
40+
case FAST_JAR, MUTABLE_JAR -> jar.getOutputDirectory()
41+
.resolve(DEFAULT_FAST_JAR_DIRECTORY_NAME).resolve(QUARKUS_RUN_JAR);
42+
};
5343

5444
List<String> args = new ArrayList<>();
5545
args.add(determineJavaPath());

core/deployment/src/main/java/io/quarkus/deployment/pkg/builditem/LegacyJarRequiredBuildItem.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,12 @@
33
import io.quarkus.builder.item.MultiBuildItem;
44

55
/**
6-
* marker build item that extensions can use to force legacy jar creation
6+
* Ignored.
7+
* To force legacy-JAR creation, implement a configuration customizer which resets the
8+
* default {@code quarkus.package.jar.type} to {@code legacy-jar},
9+
* and add a validation step to your processor which verifies that {@code legacy-jar}
10+
* is selected, throwing an error otherwise.
711
*/
8-
@Deprecated
12+
@Deprecated(forRemoval = true)
913
public final class LegacyJarRequiredBuildItem extends MultiBuildItem {
1014
}

core/deployment/src/main/java/io/quarkus/deployment/pkg/builditem/UberJarRequiredBuildItem.java

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,12 @@
33
import io.quarkus.builder.item.MultiBuildItem;
44

55
/**
6-
* marker build item that extensions can use to force uber jar creation
6+
* Ignored.
7+
* To force uber-JAR creation, implement a configuration customizer which resets the
8+
* default {@code quarkus.package.jar.type} to {@code uber-jar},
9+
* and add a validation step to your processor which verifies that {@code uber-jar}
10+
* is selected, throwing an error otherwise.
711
*/
8-
@Deprecated
12+
@Deprecated(forRemoval = true)
913
public final class UberJarRequiredBuildItem extends MultiBuildItem {
1014
}

core/deployment/src/main/java/io/quarkus/deployment/pkg/steps/JarResultBuildStep.java

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,10 @@
7575
import io.quarkus.deployment.pkg.builditem.BuildSystemTargetBuildItem;
7676
import io.quarkus.deployment.pkg.builditem.CurateOutcomeBuildItem;
7777
import io.quarkus.deployment.pkg.builditem.JarBuildItem;
78-
import io.quarkus.deployment.pkg.builditem.LegacyJarRequiredBuildItem;
7978
import io.quarkus.deployment.pkg.builditem.NativeImageSourceJarBuildItem;
8079
import io.quarkus.deployment.pkg.builditem.OutputTargetBuildItem;
8180
import io.quarkus.deployment.pkg.builditem.UberJarIgnoredResourceBuildItem;
8281
import io.quarkus.deployment.pkg.builditem.UberJarMergedResourceBuildItem;
83-
import io.quarkus.deployment.pkg.builditem.UberJarRequiredBuildItem;
8482
import io.quarkus.deployment.util.FileUtil;
8583
import io.quarkus.fs.util.ZipUtils;
8684
import io.quarkus.maven.dependency.ArtifactKey;
@@ -197,10 +195,8 @@ public JarBuildItem buildRunnerJar(CurateOutcomeBuildItem curateOutcomeBuildItem
197195
ClassLoadingConfig classLoadingConfig,
198196
List<GeneratedClassBuildItem> generatedClasses,
199197
List<GeneratedResourceBuildItem> generatedResources,
200-
List<UberJarRequiredBuildItem> uberJarRequired,
201198
List<UberJarMergedResourceBuildItem> uberJarMergedResourceBuildItems,
202199
List<UberJarIgnoredResourceBuildItem> uberJarIgnoredResourceBuildItems,
203-
List<LegacyJarRequiredBuildItem> legacyJarRequired,
204200
QuarkusBuildCloseablesBuildItem closeablesBuildItem,
205201
List<AdditionalApplicationArchiveBuildItem> additionalApplicationArchiveBuildItems,
206202
MainClassBuildItem mainClassBuildItem, Optional<AppCDSRequestedBuildItem> appCDS) throws Exception {
@@ -209,27 +205,21 @@ public JarBuildItem buildRunnerJar(CurateOutcomeBuildItem curateOutcomeBuildItem
209205
handleAppCDSSupportFileGeneration(transformedClasses, generatedClasses, appCDS.get());
210206
}
211207

212-
if (!uberJarRequired.isEmpty() && !legacyJarRequired.isEmpty()) {
213-
throw new RuntimeException(
214-
"Extensions with conflicting package types. One extension requires uber-jar another requires legacy format");
215-
}
216-
217-
if (legacyJarRequired.isEmpty() && (!uberJarRequired.isEmpty()
218-
|| packageConfig.jar().type() == UBER_JAR)) {
219-
return buildUberJar(curateOutcomeBuildItem, outputTargetBuildItem, transformedClasses, applicationArchivesBuildItem,
220-
packageConfig, applicationInfo, generatedClasses, generatedResources, uberJarMergedResourceBuildItems,
221-
uberJarIgnoredResourceBuildItems, mainClassBuildItem, classLoadingConfig);
222-
} else if (!legacyJarRequired.isEmpty() || packageConfig.jar().type() == LEGACY_JAR) {
223-
return buildLegacyThinJar(curateOutcomeBuildItem, outputTargetBuildItem, transformedClasses,
208+
return switch (packageConfig.jar().type()) {
209+
case UBER_JAR ->
210+
buildUberJar(curateOutcomeBuildItem, outputTargetBuildItem, transformedClasses, applicationArchivesBuildItem,
211+
packageConfig, applicationInfo, generatedClasses, generatedResources, uberJarMergedResourceBuildItems,
212+
uberJarIgnoredResourceBuildItems, mainClassBuildItem, classLoadingConfig);
213+
case LEGACY_JAR -> buildLegacyThinJar(curateOutcomeBuildItem, outputTargetBuildItem, transformedClasses,
224214
applicationArchivesBuildItem,
225215
packageConfig, applicationInfo, generatedClasses, generatedResources, mainClassBuildItem,
226216
classLoadingConfig);
227-
} else {
228-
return buildThinJar(curateOutcomeBuildItem, outputTargetBuildItem, transformedClasses, applicationArchivesBuildItem,
229-
packageConfig, classLoadingConfig, applicationInfo, generatedClasses,
230-
generatedResources,
231-
additionalApplicationArchiveBuildItems, mainClassBuildItem);
232-
}
217+
case FAST_JAR, MUTABLE_JAR ->
218+
buildThinJar(curateOutcomeBuildItem, outputTargetBuildItem, transformedClasses, applicationArchivesBuildItem,
219+
packageConfig, classLoadingConfig, applicationInfo, generatedClasses,
220+
generatedResources,
221+
additionalApplicationArchiveBuildItems, mainClassBuildItem);
222+
};
233223
}
234224

235225
// the idea here is to just dump the class names of the generated and transformed classes into a file
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package io.quarkus.amazon.lambda.deployment;
2+
3+
import java.util.OptionalInt;
4+
5+
import io.smallrye.config.ConfigSourceInterceptor;
6+
import io.smallrye.config.ConfigSourceInterceptorContext;
7+
import io.smallrye.config.ConfigSourceInterceptorFactory;
8+
import io.smallrye.config.ConfigValue;
9+
import io.smallrye.config.SmallRyeConfigBuilder;
10+
import io.smallrye.config.SmallRyeConfigBuilderCustomizer;
11+
12+
/**
13+
* A configuration customizer to change the default packaging to legacy-jar.
14+
*/
15+
public final class ConfigurationCustomizer implements SmallRyeConfigBuilderCustomizer {
16+
public void configBuilder(final SmallRyeConfigBuilder builder) {
17+
builder.withInterceptorFactories(new ConfigSourceInterceptorFactory() {
18+
public ConfigSourceInterceptor getInterceptor(final ConfigSourceInterceptorContext context) {
19+
return (ic, name) -> switch (name) {
20+
case "quarkus.package.jar.type" ->
21+
ConfigValue.builder().withName(name).withValue("legacy-jar").build();
22+
default -> ic.proceed(name);
23+
};
24+
}
25+
26+
public OptionalInt getPriority() {
27+
return OptionalInt.of(Integer.MIN_VALUE + 100);
28+
}
29+
});
30+
}
31+
}

extensions/amazon-lambda/common-deployment/src/main/java/io/quarkus/amazon/lambda/deployment/FunctionZipProcessor.java

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import java.nio.file.Files;
99
import java.nio.file.Path;
1010
import java.nio.file.Paths;
11+
import java.util.List;
1112
import java.util.Optional;
1213
import java.util.stream.Stream;
1314

@@ -16,12 +17,13 @@
1617
import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
1718
import org.jboss.logging.Logger;
1819

20+
import io.quarkus.builder.BuildException;
1921
import io.quarkus.deployment.IsNormal;
2022
import io.quarkus.deployment.annotations.BuildProducer;
2123
import io.quarkus.deployment.annotations.BuildStep;
24+
import io.quarkus.deployment.pkg.PackageConfig;
2225
import io.quarkus.deployment.pkg.builditem.ArtifactResultBuildItem;
2326
import io.quarkus.deployment.pkg.builditem.JarBuildItem;
24-
import io.quarkus.deployment.pkg.builditem.LegacyJarRequiredBuildItem;
2527
import io.quarkus.deployment.pkg.builditem.NativeImageBuildItem;
2628
import io.quarkus.deployment.pkg.builditem.NativeImageRunnerBuildItem;
2729
import io.quarkus.deployment.pkg.builditem.OutputTargetBuildItem;
@@ -35,11 +37,6 @@
3537
public class FunctionZipProcessor {
3638
private static final Logger log = Logger.getLogger(FunctionZipProcessor.class);
3739

38-
@BuildStep(onlyIf = IsNormal.class, onlyIfNot = NativeBuild.class)
39-
public void requireLegacy(BuildProducer<LegacyJarRequiredBuildItem> required) {
40-
required.produce(new LegacyJarRequiredBuildItem());
41-
}
42-
4340
/**
4441
* Function.zip is same as the runner jar plus dependencies in lib/
4542
* plus anything in src/main/zip.jvm
@@ -51,8 +48,16 @@ public void requireLegacy(BuildProducer<LegacyJarRequiredBuildItem> required) {
5148
*/
5249
@BuildStep(onlyIf = IsNormal.class, onlyIfNot = NativeBuild.class)
5350
public void jvmZip(OutputTargetBuildItem target,
51+
PackageConfig packageConfig,
5452
BuildProducer<ArtifactResultBuildItem> artifactResultProducer,
5553
JarBuildItem jar) throws Exception {
54+
55+
if (packageConfig.jar().type() != PackageConfig.JarConfig.JarType.LEGACY_JAR) {
56+
throw new BuildException("Lambda deployments need to use a legacy JAR, " +
57+
"please set 'quarkus.package.jar.type=legacy-jar' inside your application.properties",
58+
List.of());
59+
}
60+
5661
Path zipPath = target.getOutputDirectory().resolve("function.zip");
5762
Path zipDir = findJvmZipDir(target.getOutputDirectory());
5863
try (ZipArchiveOutputStream zip = new ZipArchiveOutputStream(zipPath.toFile())) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
io.quarkus.amazon.lambda.deployment.ConfigurationCustomizer

extensions/azure-functions/deployment/src/main/java/io/quarkus/azure/functions/deployment/AzureFunctionsProcessor.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444
import io.quarkus.arc.deployment.AdditionalBeanBuildItem;
4545
import io.quarkus.arc.deployment.UnremovableBeanBuildItem;
4646
import io.quarkus.arc.processor.BuiltinScope;
47+
import io.quarkus.builder.BuildException;
4748
import io.quarkus.deployment.Feature;
4849
import io.quarkus.deployment.IsNormal;
4950
import io.quarkus.deployment.annotations.BuildProducer;
@@ -53,7 +54,6 @@
5354
import io.quarkus.deployment.pkg.PackageConfig;
5455
import io.quarkus.deployment.pkg.builditem.ArtifactResultBuildItem;
5556
import io.quarkus.deployment.pkg.builditem.JarBuildItem;
56-
import io.quarkus.deployment.pkg.builditem.LegacyJarRequiredBuildItem;
5757
import io.quarkus.deployment.pkg.builditem.OutputTargetBuildItem;
5858
import io.quarkus.deployment.pkg.steps.NativeBuild;
5959

@@ -64,13 +64,6 @@ public class AzureFunctionsProcessor {
6464
protected static final String LOCAL_SETTINGS_JSON = "local.settings.json";
6565
public static final String FUNCTION_JSON = "function.json";
6666

67-
@BuildStep
68-
public LegacyJarRequiredBuildItem forceLegacy(PackageConfig config) {
69-
// TODO: Instead of this, consume a LegacyJarBuildItem
70-
// Azure Functions need a legacy jar and no runner
71-
return new LegacyJarRequiredBuildItem();
72-
}
73-
7467
@BuildStep
7568
FeatureBuildItem feature() {
7669
return new FeatureBuildItem(Feature.AZURE_FUNCTIONS);
@@ -93,6 +86,11 @@ public ArtifactResultBuildItem packageFunctions(List<AzureFunctionBuildItem> fun
9386
log.warn("No azure functions exist in deployment");
9487
return null;
9588
}
89+
if (packageConfig.jar().type() != PackageConfig.JarConfig.JarType.LEGACY_JAR) {
90+
throw new BuildException("Azure Function deployment need to use a legacy JAR, " +
91+
"please set 'quarkus.package.jar.type=legacy-jar' inside your application.properties",
92+
List.of());
93+
}
9694
AnnotationHandler handler = new AnnotationHandlerImpl();
9795
HashSet<Method> methods = new HashSet<>();
9896
for (AzureFunctionBuildItem item : functions)
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package io.quarkus.azure.functions.deployment;
2+
3+
import java.util.OptionalInt;
4+
5+
import io.smallrye.config.ConfigSourceInterceptor;
6+
import io.smallrye.config.ConfigSourceInterceptorContext;
7+
import io.smallrye.config.ConfigSourceInterceptorFactory;
8+
import io.smallrye.config.ConfigValue;
9+
import io.smallrye.config.SmallRyeConfigBuilder;
10+
import io.smallrye.config.SmallRyeConfigBuilderCustomizer;
11+
12+
/**
13+
* A configuration customizer to change the default packaging to legacy-jar.
14+
*/
15+
public final class ConfigurationCustomizer implements SmallRyeConfigBuilderCustomizer {
16+
public void configBuilder(final SmallRyeConfigBuilder builder) {
17+
builder.withInterceptorFactories(new ConfigSourceInterceptorFactory() {
18+
public ConfigSourceInterceptor getInterceptor(final ConfigSourceInterceptorContext context) {
19+
return (ic, name) -> switch (name) {
20+
case "quarkus.package.jar.type" ->
21+
ConfigValue.builder().withName(name).withValue("legacy-jar").build();
22+
default -> ic.proceed(name);
23+
};
24+
}
25+
26+
public OptionalInt getPriority() {
27+
return OptionalInt.of(Integer.MIN_VALUE + 100);
28+
}
29+
});
30+
}
31+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
io.quarkus.azure.functions.deployment.ConfigurationCustomizer

0 commit comments

Comments
 (0)