Skip to content

Commit 93072af

Browse files
cdsapgsmet
authored andcommitted
forcing initializing compilejava if empty
(cherry picked from commit 0462367)
1 parent dd35a81 commit 93072af

File tree

14 files changed

+498
-10
lines changed

14 files changed

+498
-10
lines changed

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

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.HashSet;
2020
import java.util.List;
2121
import java.util.Map;
22+
import java.util.Objects;
2223
import java.util.Properties;
2324
import java.util.Set;
2425
import java.util.function.Consumer;
@@ -70,7 +71,6 @@
7071
import io.quarkus.fs.util.ZipUtils;
7172
import io.quarkus.gradle.tooling.ToolingUtils;
7273
import io.quarkus.gradle.workspace.descriptors.DefaultProjectDescriptor;
73-
import io.quarkus.gradle.workspace.descriptors.ProjectDescriptor;
7474
import io.quarkus.gradle.workspace.descriptors.ProjectDescriptor.TaskType;
7575
import io.quarkus.maven.dependency.ArtifactCoords;
7676
import io.quarkus.maven.dependency.ArtifactDependency;
@@ -194,10 +194,13 @@ private ResolvedDependencyBuilder getProjectArtifact() {
194194
.setBuildDir(getLayout().getBuildDirectory().getAsFile().get().toPath())
195195
.setBuildFile(getProjectBuildFile().getAsFile().get().toPath());
196196

197-
ProjectDescriptor projectDescriptor = getProjectDescriptor().get();
198-
initProjectModule(projectDescriptor, mainModule, ArtifactSources.MAIN, DEFAULT_CLASSIFIER);
197+
DefaultProjectDescriptor projectDescriptor = getProjectDescriptor().get();
198+
199+
initProjectModule(projectDescriptor, mainModule, ArtifactSources.MAIN, DEFAULT_CLASSIFIER,
200+
getProjectDescriptor().get().getSourceSetTasksRaw());
199201
if (getLaunchMode().get().isDevOrTest()) {
200-
initProjectModule(projectDescriptor, mainModule, ArtifactSources.TEST, "tests");
202+
initProjectModule(projectDescriptor, mainModule, ArtifactSources.TEST, "tests",
203+
getProjectDescriptor().get().getSourceSetTasksRaw());
201204
}
202205
final PathList.Builder paths = PathList.builder();
203206
collectDestinationDirs(mainModule.getMainSources().getSourceDirs(), paths);
@@ -206,8 +209,8 @@ private ResolvedDependencyBuilder getProjectArtifact() {
206209
return appArtifact.setWorkspaceModule(mainModule).setResolvedPaths(paths.build());
207210
}
208211

209-
private static void initProjectModule(ProjectDescriptor projectDescriptor, WorkspaceModule.Mutable module,
210-
String sourceSetName, String classifier) {
212+
private static void initProjectModule(DefaultProjectDescriptor projectDescriptor, WorkspaceModule.Mutable module,
213+
String sourceSetName, String classifier, Map<String, Set<String>> sourceSetTasksRaw) {
211214
List<SourceDir> sourceDirs = new ArrayList<>();
212215
List<SourceDir> resources = new ArrayList<>();
213216
Set<String> tasks = projectDescriptor.getTasksForSourceSet(sourceSetName.isEmpty()
@@ -223,6 +226,23 @@ private static void initProjectModule(ProjectDescriptor projectDescriptor, Works
223226
resources.add(new DefaultSourceDir(source, destDir, null));
224227
}
225228
}
229+
230+
// Issue https://github.com/quarkusio/quarkus/issues/44384
231+
// no java sources are detected for compileJava before grpc configuration
232+
// so we need to verify if the destination source for the task exist and add it manually
233+
boolean containsJavaCompile = sourceDirs.stream()
234+
.anyMatch(sourceDir -> "compileJava".equals(sourceDir.getValue("compiler", String.class)));
235+
if (!containsJavaCompile && sourceSetTasksRaw.get("compileJava") != null) {
236+
237+
sourceSetTasksRaw.get("compileJava").forEach(s -> {
238+
File output = new File(s);
239+
if (output.exists() && Objects.requireNonNull(output.listFiles()).length > 0) {
240+
sourceDirs.add(
241+
new DefaultSourceDir(output.toPath(), output.toPath(), null, Map.of("compiler", "compileJava")));
242+
}
243+
});
244+
245+
}
226246
module.addArtifactSources(new DefaultArtifactSources(classifier, sourceDirs, resources));
227247
}
228248

devtools/gradle/gradle-application-plugin/src/main/java/io/quarkus/gradle/workspace/descriptors/DefaultProjectDescriptor.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,16 @@ public class DefaultProjectDescriptor implements Serializable, ProjectDescriptor
1818

1919
private final Map<String, QuarkusTaskDescriptor> tasks;
2020
private final Map<String, Set<String>> sourceSetTasks;
21+
private final Map<String, Set<String>> sourceSetTasksRaw;
2122

2223
public DefaultProjectDescriptor(File projectDir, File buildDir, File buildFile, Map<String, QuarkusTaskDescriptor> tasks,
23-
Map<String, Set<String>> sourceSetTasks) {
24+
Map<String, Set<String>> sourceSetTasks, Map<String, Set<String>> sourceSetTasksRaw) {
2425
this.projectDir = projectDir;
2526
this.buildDir = buildDir;
2627
this.buildFile = buildFile;
2728
this.tasks = tasks;
2829
this.sourceSetTasks = sourceSetTasks;
30+
this.sourceSetTasksRaw = sourceSetTasksRaw;
2931
}
3032

3133
@Override
@@ -47,6 +49,10 @@ public Map<String, Set<String>> getSourceSetTasks() {
4749
return sourceSetTasks;
4850
}
4951

52+
public Map<String, Set<String>> getSourceSetTasksRaw() {
53+
return sourceSetTasksRaw;
54+
}
55+
5056
public Map<String, QuarkusTaskDescriptor> getTasks() {
5157
return tasks;
5258
}
@@ -81,7 +87,8 @@ public DefaultProjectDescriptor withSourceSetView(Set<String> acceptedSourceSets
8187
Map<String, QuarkusTaskDescriptor> filteredTasks = tasks.entrySet().stream()
8288
.filter(e -> filteredSourceSets.values().stream().anyMatch(tasks -> tasks.contains(e.getKey())))
8389
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (a, b) -> a, TreeMap::new));
84-
return new DefaultProjectDescriptor(projectDir, buildDir, buildFile, filteredTasks, filteredSourceSets);
90+
return new DefaultProjectDescriptor(projectDir, buildDir, buildFile, filteredTasks, filteredSourceSets,
91+
sourceSetTasksRaw);
8592
}
8693

8794
@Override
@@ -92,6 +99,7 @@ public String toString() {
9299
",\nbuildFile=" + buildFile +
93100
",\ntasks=" + tasks +
94101
",\nsourceSetTasks=" + sourceSetTasks +
102+
",\nsourceSetTasksRaw=" + sourceSetTasksRaw +
95103
"\n}";
96104
}
97105
}

devtools/gradle/gradle-application-plugin/src/main/java/io/quarkus/gradle/workspace/descriptors/ProjectDescriptorBuilder.java

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,11 +32,13 @@ public class ProjectDescriptorBuilder {
3232
private final File buildFile;
3333
private final Map<String, QuarkusTaskDescriptor> tasks;
3434
private final Map<String, Set<String>> sourceSetTasks;
35+
private final Map<String, Set<String>> sourceSetTasksRaw;
3536
private final Set<String> collectOnlySourceSets;
3637

3738
private ProjectDescriptorBuilder(Project project, Set<String> collectOnlySourceSets) {
3839
this.tasks = new LinkedHashMap<>();
3940
this.sourceSetTasks = new LinkedHashMap<>();
41+
this.sourceSetTasksRaw = new LinkedHashMap<>();
4042
this.buildFile = project.getBuildFile();
4143
this.projectDir = project.getLayout().getProjectDirectory().getAsFile();
4244
this.buildDir = project.getLayout().getBuildDirectory().get().getAsFile();
@@ -59,7 +61,8 @@ public static Provider<DefaultProjectDescriptor> buildForApp(Project target) {
5961
builder.buildDir,
6062
builder.buildFile,
6163
builder.tasks,
62-
builder.sourceSetTasks));
64+
builder.sourceSetTasks,
65+
builder.sourceSetTasksRaw));
6366
}
6467

6568
public static Provider<DefaultProjectDescriptor> buildForDependency(Project target) {
@@ -76,10 +79,14 @@ public static Provider<DefaultProjectDescriptor> buildForDependency(Project targ
7679
builder.buildDir,
7780
builder.buildFile,
7881
builder.tasks,
79-
builder.sourceSetTasks));
82+
builder.sourceSetTasks,
83+
builder.sourceSetTasksRaw));
8084
}
8185

8286
private void readConfigurationFor(AbstractCompile task) {
87+
sourceSetTasksRaw.computeIfAbsent(task.getName(), s -> new HashSet<>())
88+
.add(task.getDestinationDirectory().getAsFile().get().getAbsolutePath());
89+
8390
if (task.getEnabled() && !task.getSource().isEmpty()) {
8491
File destDir = task.getDestinationDirectory().getAsFile().get();
8592
task.getSource().visit(fileVisitDetails -> {
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
plugins {
2+
id("io.quarkus")
3+
}
4+
5+
dependencies {
6+
implementation(project(":module1"))
7+
8+
implementation("io.quarkus:quarkus-rest-jackson")
9+
implementation("io.quarkus:quarkus-rest")
10+
implementation("io.quarkus:quarkus-kotlin")
11+
implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
12+
implementation("io.quarkus:quarkus-arc")
13+
implementation("io.quarkus:quarkus-grpc")
14+
15+
testImplementation("io.quarkus:quarkus-junit5")
16+
testImplementation("io.rest-assured:rest-assured")
17+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.acme
2+
3+
import io.quarkus.grpc.GrpcClient
4+
import jakarta.ws.rs.GET
5+
import jakarta.ws.rs.Path
6+
import jakarta.ws.rs.Produces
7+
import jakarta.ws.rs.core.MediaType
8+
import org.acme.module1.SomeClass1
9+
import org.acme.proto.Greeter
10+
11+
@Path("/version")
12+
class GreetingResource {
13+
14+
@GrpcClient
15+
lateinit var hello: Greeter
16+
17+
@GET
18+
@Produces(MediaType.TEXT_PLAIN)
19+
fun getVersion(): String {
20+
return SomeClass1().getVersion()
21+
}
22+
}
23+

integration-tests/gradle/src/main/resources/grpc-multi-module-no-java/application/src/main/resources/META-INF/resources/index.html

Lines changed: 285 additions & 0 deletions
Large diffs are not rendered by default.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
quarkus.generate-code.grpc.scan-for-proto=org.acme:module1
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
plugins {
2+
kotlin("jvm") version "2.0.21"
3+
kotlin("plugin.allopen") version "2.0.21"
4+
5+
id("io.quarkus") apply false
6+
}
7+
allprojects {
8+
9+
repositories {
10+
mavenLocal {
11+
content {
12+
includeGroupByRegex("io.quarkus.*")
13+
includeGroup("org.hibernate.orm")
14+
}
15+
}
16+
mavenCentral()
17+
}
18+
19+
}
20+
subprojects {
21+
apply(plugin = "org.jetbrains.kotlin.jvm")
22+
apply(plugin = "org.jetbrains.kotlin.plugin.allopen")
23+
24+
25+
tasks.withType<Test> {
26+
systemProperty("java.util.logging.manager", "org.jboss.logmanager.LogManager")
27+
}
28+
29+
val quarkusPlatformGroupId: String by project
30+
val quarkusPlatformArtifactId: String by project
31+
val quarkusPlatformVersion: String by project
32+
33+
dependencies {
34+
implementation(enforcedPlatform("${quarkusPlatformGroupId}:${quarkusPlatformArtifactId}:${quarkusPlatformVersion}"))
35+
}
36+
37+
allOpen {
38+
annotation("jakarta.ws.rs.Path")
39+
annotation("jakarta.enterprise.context.ApplicationScoped")
40+
annotation("jakarta.persistence.Entity")
41+
annotation("io.quarkus.test.junit.QuarkusTest")
42+
}
43+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
quarkusPlatformArtifactId=quarkus-bom
2+
quarkusPlatformGroupId=io.quarkus
3+
4+
group=org.acme
5+
version=1.0.0-SNAPSHOT

integration-tests/gradle/src/main/resources/grpc-multi-module-no-java/module1/build.gradle.kts

Whitespace-only changes.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package org.acme.module1
2+
3+
class SomeClass1 {
4+
fun getVersion(): String {
5+
return "123"
6+
}
7+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
syntax = "proto3";
2+
3+
option java_multiple_files = true;
4+
option java_package = "org.acme.proto";
5+
option java_outer_classname = "HelloWorldProto";
6+
7+
package helloworld;
8+
9+
// The greeting service definition.
10+
service Greeter {
11+
// Sends a greeting
12+
rpc SayHello (HelloRequest) returns (HelloReply) {}
13+
}
14+
15+
// The request message containing the user's name.
16+
message HelloRequest {
17+
string name = 1;
18+
}
19+
20+
// The response message containing the greetings
21+
message HelloReply {
22+
string message = 1;
23+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
pluginManagement {
2+
repositories {
3+
mavenLocal {
4+
content {
5+
includeGroupByRegex 'io.quarkus.*'
6+
includeGroup 'org.hibernate.orm'
7+
}
8+
}
9+
mavenCentral()
10+
gradlePluginPortal()
11+
}
12+
//noinspection GroovyAssignabilityCheck
13+
plugins {
14+
id 'io.quarkus' version "${quarkusPluginVersion}"
15+
}
16+
}
17+
18+
rootProject.name = 'quarkus-grpc-multi-module-no-java'
19+
20+
include ':module1'
21+
include ':application'
22+
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package io.quarkus.gradle;
2+
3+
import static org.assertj.core.api.Assertions.assertThat;
4+
5+
import java.io.File;
6+
import java.nio.file.Path;
7+
8+
import org.junit.jupiter.api.Test;
9+
10+
public class GrpcMultiModuleNoJavaQuarkusBuildTest extends QuarkusGradleWrapperTestBase {
11+
12+
@Test
13+
public void testGrpcMultiModuleBuild() throws Exception {
14+
15+
final File projectDir = getProjectDir("grpc-multi-module-no-java");
16+
17+
final BuildResult build = runGradleWrapper(projectDir, "clean", "build");
18+
assertThat(BuildResult.isSuccessful(build.getTasks().get(":application:quarkusBuild"))).isTrue();
19+
assertThat(BuildResult.isSuccessful(build.getTasks().get(":application:quarkusAppPartsBuild"))).isTrue();
20+
21+
final Path applicationLib = projectDir.toPath().resolve("application").resolve("build").resolve("quarkus-app")
22+
.resolve("lib").resolve("main");
23+
assertThat(applicationLib).exists();
24+
assertThat(applicationLib.resolve("org.acme.module1-1.0.0-SNAPSHOT.jar")).exists();
25+
}
26+
27+
}

0 commit comments

Comments
 (0)