Skip to content

Commit

Permalink
init custom gradle tooling model
Browse files Browse the repository at this point in the history
  • Loading branch information
glefloch committed Jul 3, 2020
1 parent e50eab4 commit 96dc2f2
Show file tree
Hide file tree
Showing 16 changed files with 602 additions and 295 deletions.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@
import java.util.Set;
import java.util.function.Consumer;

import javax.inject.Inject;

import org.gradle.api.Action;
import org.gradle.api.DefaultTask;
import org.gradle.api.GradleException;
Expand All @@ -21,6 +23,7 @@
import org.gradle.api.tasks.SourceSetContainer;
import org.gradle.api.tasks.TaskContainer;
import org.gradle.api.tasks.testing.Test;
import org.gradle.tooling.provider.model.ToolingModelBuilderRegistry;
import org.gradle.util.GradleVersion;

import io.quarkus.gradle.tasks.QuarkusAddExtension;
Expand All @@ -32,6 +35,7 @@
import io.quarkus.gradle.tasks.QuarkusRemoveExtension;
import io.quarkus.gradle.tasks.QuarkusTestConfig;
import io.quarkus.gradle.tasks.QuarkusTestNative;
import io.quarkus.gradle.workspace.builder.QuarkusModelBuilder;

public class QuarkusPlugin implements Plugin<Project> {

Expand Down Expand Up @@ -59,10 +63,17 @@ public class QuarkusPlugin implements Plugin<Project> {
public static final String NATIVE_TEST_IMPLEMENTATION_CONFIGURATION_NAME = "nativeTestImplementation";
public static final String NATIVE_TEST_RUNTIME_ONLY_CONFIGURATION_NAME = "nativeTestRuntimeOnly";

private final ToolingModelBuilderRegistry registry;

@Inject
public QuarkusPlugin(ToolingModelBuilderRegistry registry) {
this.registry = registry;
}

@Override
public void apply(Project project) {
verifyGradleVersion();

registerModel();
// register extension
final QuarkusPluginExtension quarkusExt = project.getExtensions().create(EXTENSION_NAME, QuarkusPluginExtension.class,
project);
Expand Down Expand Up @@ -151,6 +162,10 @@ public void execute(Task test) {
});
}

private void registerModel() {
registry.register(new QuarkusModelBuilder());
}

private void verifyGradleVersion() {
if (GradleVersion.current().compareTo(GradleVersion.version("5.0")) < 0) {
throw new GradleException("Quarkus plugin requires Gradle 5.0 or later. Current version is: " +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,16 @@
import org.gradle.api.tasks.SourceSet;
import org.gradle.api.tasks.testing.Test;
import org.gradle.jvm.tasks.Jar;
import org.gradle.tooling.GradleConnector;
import org.gradle.tooling.ModelBuilder;
import org.gradle.tooling.ProjectConnection;

import io.quarkus.bootstrap.BootstrapConstants;
import io.quarkus.bootstrap.model.AppArtifact;
import io.quarkus.bootstrap.model.AppModel;
import io.quarkus.bootstrap.resolver.AppModelResolver;
import io.quarkus.gradle.tasks.QuarkusGradleUtils;
import io.quarkus.gradle.workspace.model.QuarkusModel;
import io.quarkus.runtime.LaunchMode;

public class QuarkusPluginExtension {
Expand Down Expand Up @@ -163,7 +167,21 @@ public AppModelResolver getAppModelResolver() {
}

public AppModelResolver getAppModelResolver(LaunchMode mode) {
return new AppModelGradleResolver(project, mode);
return new AppModelGradleResolver(getQuarkusModel(mode));
}

public QuarkusModel getQuarkusModel() {
return getQuarkusModel(LaunchMode.NORMAL);
}

public QuarkusModel getQuarkusModel(LaunchMode mode) {
project.getExtensions().getExtraProperties().set("launchMode", mode);
ProjectConnection connection = GradleConnector.newConnector()
.forProjectDirectory(project.getProjectDir())
.connect();
ModelBuilder<QuarkusModel> modelBuilder = connection.model(QuarkusModel.class);

return modelBuilder.get();
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,8 @@
import java.io.InputStream;
import java.io.ObjectOutputStream;
import java.net.InetAddress;
import java.net.MalformedURLException;
import java.net.Socket;
import java.net.URI;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
Expand Down Expand Up @@ -58,7 +56,9 @@
import io.quarkus.bootstrap.resolver.AppModelResolverException;
import io.quarkus.deployment.dev.DevModeContext;
import io.quarkus.deployment.dev.DevModeMain;
import io.quarkus.gradle.AppModelGradleResolver;
import io.quarkus.gradle.QuarkusPluginExtension;
import io.quarkus.gradle.workspace.model.QuarkusModel;
import io.quarkus.runtime.LaunchMode;
import io.quarkus.utilities.JavaBinFinder;

Expand Down Expand Up @@ -284,7 +284,8 @@ public void startDev() {
StringBuilder classPathManifest = new StringBuilder();

final AppModel appModel;
final AppModelResolver modelResolver = extension().getAppModelResolver(LaunchMode.DEVELOPMENT);
final QuarkusModel quarkusModel = extension().getQuarkusModel(LaunchMode.DEVELOPMENT);
final AppModelResolver modelResolver = new AppModelGradleResolver(quarkusModel);
try {
final AppArtifact appArtifact = extension.getAppArtifact();
appArtifact.setPaths(QuarkusGradleUtils.getOutputPaths(project));
Expand Down Expand Up @@ -535,13 +536,4 @@ private void addToClassPaths(StringBuilder classPathManifest, File file) {
classPathManifest.append(uri).append(" ");
}
}

private URL toUrl(URI uri) {
try {
return uri.toURL();
} catch (MalformedURLException e) {
throw new IllegalStateException("Failed to convert URI to URL: " + uri, e);
}
}

}
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
package io.quarkus.gradle.tasks;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.UncheckedIOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Collection;
import java.util.Iterator;
import java.util.Properties;
import java.util.Set;

import org.gradle.api.GradleException;
import org.gradle.api.Project;
import org.gradle.api.Task;
import org.gradle.api.file.FileCollection;
Expand Down Expand Up @@ -105,4 +109,27 @@ public static String getClassesDir(SourceSet sourceSet, File tmpDir, boolean pop
}
return classesDir.toString();
}

public static PathsCollection toPathsCollection(Collection<File> files) {
PathsCollection.Builder paths = PathsCollection.builder();
for (File f : files) {
paths.add(f.toPath());
}
return paths.build();
}

public static Properties resolveDescriptor(final Path path) {
final Properties rtProps;
if (!Files.exists(path)) {
// not a platform artifact
return null;
}
rtProps = new Properties();
try (BufferedReader reader = Files.newBufferedReader(path)) {
rtProps.load(reader);
} catch (IOException e) {
throw new GradleException("Failed to load extension description " + path, e);
}
return rtProps;
}
}
Loading

0 comments on commit 96dc2f2

Please sign in to comment.