Skip to content

Commit 61d8ad2

Browse files
authored
Merge pull request #48835 from gsmet/3.24.3-backports-1
[3.24] 3.24.3 backports 1
2 parents 7c126a0 + 712cc99 commit 61d8ad2

File tree

66 files changed

+1219
-881
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

66 files changed

+1219
-881
lines changed

.mvn/extensions.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
<extension>
1818
<groupId>io.quarkus.develocity</groupId>
1919
<artifactId>quarkus-project-develocity-extension</artifactId>
20-
<version>1.2.2</version>
20+
<version>1.2.3</version>
2121
</extension>
2222
<extension>
2323
<groupId>eu.maveniverse.maven.nisse</groupId>

bom/application/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
<cyclonedx.version>9.0.5</cyclonedx.version>
2323
<expressly.version>6.0.0</expressly.version>
2424
<findbugs.version>3.0.2</findbugs.version>
25-
<jandex.version>3.3.1</jandex.version>
25+
<jandex.version>3.3.2</jandex.version>
2626
<javax.annotation-api.version>1.3.2</javax.annotation-api.version>
2727
<javax.inject.version>1</javax.inject.version>
2828
<parsson.version>1.1.7</parsson.version>

build-parent/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
<jboss-bridger-plugin.version>1.6.Final</jboss-bridger-plugin.version>
3030

3131
<!-- Jandex versions -->
32-
<jandex.version>3.3.1</jandex.version>
32+
<jandex.version>3.3.2</jandex.version>
3333
<jandex-gradle-plugin.version>1.0.0</jandex-gradle-plugin.version>
3434

3535
<asciidoctorj.version>2.5.13</asciidoctorj.version>

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

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -920,10 +920,7 @@ private void copyDependency(Set<ArtifactKey> parentFirstArtifacts, OutputTargetB
920920
return;
921921
}
922922
for (Path resolvedDep : appDep.getResolvedPaths()) {
923-
final boolean isDirectory = Files.isDirectory(resolvedDep);
924-
// we don't use getFileName() for directories, since directories would often be "classes" ending up merging content from multiple dependencies in the same package
925-
final String fileName = isDirectory ? getFileNameForDirectory(appDep)
926-
: appDep.getGroupId() + "." + resolvedDep.getFileName();
923+
final String fileName = getJarFileName(appDep, resolvedDep);
927924
final Path targetPath;
928925

929926
if (allowParentFirst && parentFirstArtifacts.contains(appDep.getKey())) {
@@ -935,7 +932,7 @@ private void copyDependency(Set<ArtifactKey> parentFirstArtifacts, OutputTargetB
935932
}
936933
runtimeArtifacts.computeIfAbsent(appDep.getKey(), (s) -> new ArrayList<>(1)).add(targetPath);
937934

938-
if (isDirectory) {
935+
if (Files.isDirectory(resolvedDep)) {
939936
// This case can happen when we are building a jar from inside the Quarkus repository
940937
// and Quarkus Bootstrap's localProjectDiscovery has been set to true. In such a case
941938
// the non-jar dependencies are the Quarkus dependencies picked up on the file system
@@ -976,12 +973,20 @@ private void copyDependency(Set<ArtifactKey> parentFirstArtifacts, OutputTargetB
976973
}
977974

978975
/**
979-
* Returns a JAR file name to be used for a content of a dependency that is in a directory.
976+
* Returns a JAR file name to be used for a content of a dependency, depending on whether the resolved path
977+
* is a directory or not.
978+
* We don't use getFileName() for directories, since directories would often be "classes" ending up merging
979+
* content from multiple dependencies in the same package
980980
*
981981
* @param dep dependency
982+
* @param resolvedPath path of the resolved dependency
982983
* @return JAR file name
983984
*/
984-
private static String getFileNameForDirectory(ResolvedDependency dep) {
985+
public static String getJarFileName(ResolvedDependency dep, Path resolvedPath) {
986+
boolean isDirectory = Files.isDirectory(resolvedPath);
987+
if (!isDirectory) {
988+
return dep.getGroupId() + "." + resolvedPath.getFileName();
989+
}
985990
final StringBuilder sb = new StringBuilder();
986991
sb.append(dep.getGroupId()).append(".").append(dep.getArtifactId()).append("-");
987992
if (!dep.getClassifier().isEmpty()) {

core/deployment/src/test/java/io/quarkus/deployment/runnerjar/PackageAppTestBase.java

Lines changed: 9 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
package io.quarkus.deployment.runnerjar;
22

3+
import static org.assertj.core.api.Assertions.assertThat;
34
import static org.junit.jupiter.api.Assertions.assertEquals;
45
import static org.junit.jupiter.api.Assertions.assertNotNull;
56
import static org.junit.jupiter.api.Assertions.assertTrue;
6-
import static org.junit.jupiter.api.Assertions.fail;
77

88
import java.io.BufferedWriter;
99
import java.io.IOException;
@@ -41,7 +41,7 @@
4141

4242
public abstract class PackageAppTestBase extends BootstrapTestBase {
4343

44-
private static final String LIB_PREFIX = "lib/";
44+
private static final String LIB_BOOT_PREFIX = "lib/boot/";
4545
private static final String MAIN_CLS = "io.quarkus.bootstrap.runner.QuarkusEntryPoint";
4646

4747
protected List<String> expectedLib = new ArrayList<>();
@@ -209,44 +209,16 @@ private void assertAugmentOutcome(AugmentResult outcome) throws IOException {
209209
.toArray(String[]::new);
210210
assertEquals(actualBootLib.size(), cpEntries.length);
211211
for (String entry : cpEntries) {
212-
assertTrue(entry.startsWith(LIB_PREFIX));
213-
assertTrue(actualBootLib.contains(entry.substring(LIB_PREFIX.length())));
214-
}
215-
}
216-
217-
List<String> missingEntries = List.of();
218-
for (String entry : expectedLib) {
219-
if (!actualMainLib.remove(entry)) {
220-
if (missingEntries.isEmpty()) {
221-
missingEntries = new ArrayList<>();
222-
}
223-
missingEntries.add(entry);
212+
assertThat(entry).startsWith(LIB_BOOT_PREFIX);
213+
String entryFile = entry.substring(LIB_BOOT_PREFIX.length());
214+
assertThat(actualBootLib).contains(entryFile);
224215
}
225216
}
217+
assertLibDirectoryContent(actualMainLib);
218+
}
226219

227-
StringBuilder buf = null;
228-
if (!missingEntries.isEmpty()) {
229-
buf = new StringBuilder();
230-
buf.append("Missing entries: ").append(missingEntries.get(0));
231-
for (int i = 1; i < missingEntries.size(); ++i) {
232-
buf.append(", ").append(missingEntries.get(i));
233-
}
234-
}
235-
if (!actualMainLib.isEmpty()) {
236-
if (buf == null) {
237-
buf = new StringBuilder();
238-
} else {
239-
buf.append("; ");
240-
}
241-
final Iterator<String> i = actualMainLib.iterator();
242-
buf.append("Extra entries: ").append(i.next());
243-
while (i.hasNext()) {
244-
buf.append(", ").append(i.next());
245-
}
246-
}
247-
if (buf != null) {
248-
fail(buf.toString());
249-
}
220+
protected void assertLibDirectoryContent(Set<String> actualMainLib) {
221+
assertThat(actualMainLib).containsExactlyInAnyOrderElementsOf(expectedLib);
250222
}
251223

252224
protected Set<String> getDirContent(final Path dir) throws IOException {

core/runtime/src/main/java/io/quarkus/runtime/ExecutorRecorder.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -117,8 +117,13 @@ public void run() {
117117
// do some probing
118118
final int queueSize = executor.getQueueSize();
119119
final Thread[] runningThreads = executor.getRunningThreads();
120-
log.infof("Awaiting thread pool shutdown; %d thread(s) running with %d task(s) waiting",
121-
runningThreads.length, queueSize);
120+
if (queueSize <= 0) {
121+
log.infof("Awaiting thread pool shutdown; %d thread(s) running",
122+
runningThreads.length);
123+
} else {
124+
log.infof("Awaiting thread pool shutdown; %d thread(s) running with %d task(s) waiting",
125+
runningThreads.length, queueSize);
126+
}
122127
// make sure no threads are stuck in {@code exit()}
123128
int realWaiting = runningThreads.length;
124129
for (Thread thr : runningThreads) {
@@ -138,7 +143,7 @@ public void run() {
138143
}
139144
}
140145
}
141-
if (realWaiting == 0 && queueSize == 0) {
146+
if (realWaiting == 0) {
142147
// just exit
143148
executor.shutdownNow();
144149
break;

devtools/gradle/gradle-application-plugin/src/main/java/io/quarkus/gradle/QuarkusPlugin.java

Lines changed: 41 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.gradle.api.artifacts.ExternalModuleDependency;
2626
import org.gradle.api.artifacts.ProjectDependency;
2727
import org.gradle.api.file.FileCollection;
28+
import org.gradle.api.java.archives.Attributes;
2829
import org.gradle.api.plugins.BasePlugin;
2930
import org.gradle.api.plugins.JavaPlugin;
3031
import org.gradle.api.provider.Property;
@@ -212,14 +213,15 @@ private void registerTasks(Project project, QuarkusPluginExtension quarkusExt) {
212213
QuarkusGenerateCode.class, LaunchMode.NORMAL, SourceSet.MAIN_SOURCE_SET_NAME,
213214
quarkusExt.getCodeGenerationInputs().get());
214215
quarkusGenerateCode.configure(task -> configureGenerateCodeTask(task, quarkusGenerateAppModelTask,
215-
QuarkusGenerateCode.QUARKUS_GENERATED_SOURCES));
216+
QuarkusGenerateCode.QUARKUS_GENERATED_SOURCES, quarkusExt));
216217
// quarkusGenerateCodeDev
217218
TaskProvider<QuarkusGenerateCode> quarkusGenerateCodeDev = tasks.register(QUARKUS_GENERATE_CODE_DEV_TASK_NAME,
218219
QuarkusGenerateCode.class, LaunchMode.DEVELOPMENT, SourceSet.MAIN_SOURCE_SET_NAME,
219220
quarkusExt.getCodeGenerationInputs().get());
220221
quarkusGenerateCodeDev.configure(task -> {
221222
task.dependsOn(quarkusGenerateCode);
222-
configureGenerateCodeTask(task, quarkusGenerateDevAppModelTask, QuarkusGenerateCode.QUARKUS_GENERATED_SOURCES);
223+
configureGenerateCodeTask(task, quarkusGenerateDevAppModelTask, QuarkusGenerateCode.QUARKUS_GENERATED_SOURCES,
224+
quarkusExt);
223225
});
224226
// quarkusGenerateCodeTests
225227
TaskProvider<QuarkusGenerateCode> quarkusGenerateCodeTests = tasks.register(QUARKUS_GENERATE_CODE_TESTS_TASK_NAME,
@@ -228,7 +230,7 @@ private void registerTasks(Project project, QuarkusPluginExtension quarkusExt) {
228230
quarkusGenerateCodeTests.configure(task -> {
229231
task.dependsOn("compileQuarkusTestGeneratedSourcesJava");
230232
configureGenerateCodeTask(task, quarkusGenerateTestAppModelTask,
231-
QuarkusGenerateCode.QUARKUS_TEST_GENERATED_SOURCES);
233+
QuarkusGenerateCode.QUARKUS_TEST_GENERATED_SOURCES, quarkusExt);
232234
});
233235

234236
TaskProvider<QuarkusApplicationModelTask> quarkusBuildAppModelTask = tasks.register("quarkusBuildAppModel",
@@ -240,14 +242,14 @@ private void registerTasks(Project project, QuarkusPluginExtension quarkusExt) {
240242
});
241243
tasks.register(QUARKUS_SHOW_EFFECTIVE_CONFIG_TASK_NAME,
242244
QuarkusShowEffectiveConfig.class, task -> {
243-
configureQuarkusBuildTask(project, task, quarkusBuildAppModelTask, serviceProvider);
245+
configureQuarkusBuildTask(project, task, quarkusBuildAppModelTask, serviceProvider, quarkusExt);
244246
task.setDescription("Show effective Quarkus build configuration.");
245247
});
246248

247249
TaskProvider<QuarkusBuildDependencies> quarkusBuildDependencies = tasks.register(QUARKUS_BUILD_DEP_TASK_NAME,
248250
QuarkusBuildDependencies.class,
249251
task -> {
250-
configureQuarkusBuildTask(project, task, quarkusBuildAppModelTask, serviceProvider);
252+
configureQuarkusBuildTask(project, task, quarkusBuildAppModelTask, serviceProvider, quarkusExt);
251253
task.getOutputs().doNotCacheIf("Dependencies are never cached", t -> true);
252254
});
253255
project.afterEvaluate(evaluated -> addDependencyOnJandexIfConfigured(evaluated, quarkusBuildDependencies));
@@ -257,7 +259,7 @@ private void registerTasks(Project project, QuarkusPluginExtension quarkusExt) {
257259
TaskProvider<QuarkusBuildCacheableAppParts> quarkusBuildCacheableAppParts = tasks.register(
258260
QUARKUS_BUILD_APP_PARTS_TASK_NAME,
259261
QuarkusBuildCacheableAppParts.class, task -> {
260-
configureQuarkusBuildTask(project, task, quarkusBuildAppModelTask, serviceProvider);
262+
configureQuarkusBuildTask(project, task, quarkusBuildAppModelTask, serviceProvider, quarkusExt);
261263
task.dependsOn(quarkusGenerateCode);
262264
task.getOutputs().doNotCacheIf(
263265
"Not adding uber-jars, native binaries and mutable-jar package type to Gradle " +
@@ -273,7 +275,7 @@ public boolean isSatisfiedBy(Task t) {
273275
});
274276

275277
TaskProvider<QuarkusBuild> quarkusBuild = tasks.register(QUARKUS_BUILD_TASK_NAME, QuarkusBuild.class, build -> {
276-
configureQuarkusBuildTask(project, build, quarkusBuildAppModelTask, serviceProvider);
278+
configureQuarkusBuildTask(project, build, quarkusBuildAppModelTask, serviceProvider, quarkusExt);
277279
build.dependsOn(quarkusBuildDependencies, quarkusBuildCacheableAppParts);
278280
build.getOutputs().doNotCacheIf(
279281
"Only collects and combines the outputs of " + QUARKUS_BUILD_APP_PARTS_TASK_NAME + " and "
@@ -297,28 +299,28 @@ public boolean isSatisfiedBy(Task t) {
297299

298300
tasks.register(IMAGE_BUILD_TASK_NAME, ImageBuild.class, task -> {
299301
task.dependsOn(quarkusRequiredExtension);
300-
configureQuarkusBuildTask(project, task, quarkusBuildAppModelTask, serviceProvider);
302+
configureQuarkusBuildTask(project, task, quarkusBuildAppModelTask, serviceProvider, quarkusExt);
301303
task.getBuilderName().set(quarkusRequiredExtension.flatMap(ImageCheckRequirementsTask::getOutputFile));
302304
task.finalizedBy(quarkusBuild);
303305
});
304306

305307
tasks.register(IMAGE_PUSH_TASK_NAME, ImagePush.class, task -> {
306308
task.dependsOn(quarkusRequiredExtension);
307-
configureQuarkusBuildTask(project, task, quarkusBuildAppModelTask, serviceProvider);
309+
configureQuarkusBuildTask(project, task, quarkusBuildAppModelTask, serviceProvider, quarkusExt);
308310
task.getBuilderName().set(quarkusRequiredExtension.flatMap(ImageCheckRequirementsTask::getOutputFile));
309311
task.finalizedBy(quarkusBuild);
310312
});
311313

312314
tasks.register(DEPLOY_TASK_NAME, Deploy.class, task -> {
313-
configureQuarkusBuildTask(project, task, quarkusBuildAppModelTask, serviceProvider);
315+
configureQuarkusBuildTask(project, task, quarkusBuildAppModelTask, serviceProvider, quarkusExt);
314316
task.finalizedBy(quarkusBuild);
315317
});
316318

317319
TaskProvider<QuarkusDev> quarkusDev = tasks.register(QUARKUS_DEV_TASK_NAME, QuarkusDev.class, devRuntimeDependencies,
318320
quarkusExt);
319321
TaskProvider<QuarkusRun> quarkusRun = tasks.register(QUARKUS_RUN_TASK_NAME, QuarkusRun.class,
320322
build -> {
321-
configureQuarkusBuildTask(project, build, quarkusBuildAppModelTask, serviceProvider);
323+
configureQuarkusBuildTask(project, build, quarkusBuildAppModelTask, serviceProvider, quarkusExt);
322324
build.dependsOn(quarkusBuild);
323325

324326
});
@@ -471,7 +473,11 @@ public boolean isSatisfiedBy(Task t) {
471473
quarkusGenerateTestAppModelTask.flatMap(QuarkusApplicationModelTask::getApplicationModel),
472474
quarkusBuild.map(QuarkusBuild::getNativeRunner),
473475
mainSourceSet.getOutput().getClassesDirs(),
474-
project.getObjects().newInstance(QuarkusPluginExtensionView.class, quarkusExt)));
476+
project.getObjects().newInstance(QuarkusPluginExtensionView.class, quarkusExt),
477+
project.getObjects().mapProperty(String.class, Object.class)
478+
.convention(quarkusExt.manifest().getAttributes()),
479+
project.getObjects().mapProperty(String.class, Attributes.class)
480+
.convention(quarkusExt.getAttributes())));
475481

476482
// also make each task use the JUnit platform since it's the only supported test environment
477483
t.useJUnitPlatform();
@@ -523,18 +529,35 @@ private static void configureApplicationModelTask(Project project, QuarkusApplic
523529

524530
private static void configureQuarkusBuildTask(Project project, QuarkusBuildTask task,
525531
TaskProvider<QuarkusApplicationModelTask> quarkusGenerateAppModelTask,
526-
Provider<ForcedPropertieBuildService> serviceProvider) {
532+
Provider<ForcedPropertieBuildService> serviceProvider,
533+
QuarkusPluginExtension quarkusExt) {
527534
task.getApplicationModel().set(quarkusGenerateAppModelTask.flatMap(QuarkusApplicationModelTask::getApplicationModel));
528535
SourceSet mainSourceSet = getSourceSet(project, SourceSet.MAIN_SOURCE_SET_NAME);
529536
task.getAdditionalForcedProperties().set(serviceProvider);
530537
task.usesService(serviceProvider);
531538
task.setCompileClasspath(mainSourceSet.getCompileClasspath().plus(mainSourceSet.getRuntimeClasspath())
532539
.plus(mainSourceSet.getAnnotationProcessorPath())
533540
.plus(mainSourceSet.getResources()));
541+
task.getCachingRelevantInput().set(quarkusExt
542+
.cachingRelevantProperties(quarkusExt.getCachingRelevantProperties().get()));
543+
task.getJarEnabled().set(quarkusExt.packageConfig().jar().enabled());
544+
task.getNativeEnabled().set(quarkusExt.nativeConfig().enabled());
545+
task.getNativeSourcesOnly().set(quarkusExt.nativeConfig().sourcesOnly());
546+
task.getRunnerSuffix().set(quarkusExt.packageConfig().computedRunnerSuffix());
547+
task.getRunnerName().set(
548+
quarkusExt.packageConfig().outputName().orElseGet(quarkusExt::finalName));
549+
task.getOutputDirectory()
550+
.set(Path.of(quarkusExt.packageConfig().outputDirectory().map(Path::toString)
551+
.orElse(QuarkusPlugin.DEFAULT_OUTPUT_DIRECTORY)));
552+
task.getJarType().set(quarkusExt.packageConfig().jar().type());
553+
task.getManifestAttributes().set(quarkusExt.manifest().getAttributes());
554+
task.getManifestSections().set(quarkusExt.manifest().getSections());
555+
534556
}
535557

536558
private static void configureGenerateCodeTask(QuarkusGenerateCode task,
537-
TaskProvider<QuarkusApplicationModelTask> applicationModelTaskTaskProvider, String generateSourcesDir) {
559+
TaskProvider<QuarkusApplicationModelTask> applicationModelTaskTaskProvider, String generateSourcesDir,
560+
QuarkusPluginExtension quarkusExt) {
538561
SourceSet generatedSources = getSourceSet(task.getProject(), generateSourcesDir);
539562
Set<File> sourceSetOutput = generatedSources.getOutput().filter(f -> f.getName().equals(generateSourcesDir)).getFiles();
540563
if (sourceSetOutput.isEmpty()) {
@@ -544,6 +567,10 @@ private static void configureGenerateCodeTask(QuarkusGenerateCode task,
544567
task.getApplicationModel()
545568
.set(applicationModelTaskTaskProvider.flatMap(QuarkusApplicationModelTask::getApplicationModel));
546569
task.getGeneratedOutputDirectory().set(generatedSources.getJava().getClassesDirectory());
570+
task.getCachingRelevantInput()
571+
.set(quarkusExt.cachingRelevantProperties(quarkusExt.getCachingRelevantProperties().get()));
572+
task.getManifestAttributes().set(quarkusExt.manifest().getAttributes());
573+
task.getManifestSections().set(quarkusExt.manifest().getSections());
547574
}
548575

549576
private void createSourceSets(Project project) {

0 commit comments

Comments
 (0)