Skip to content

Commit

Permalink
Merge pull request #4885 from maxandersen/redo-local-platform-descrir…
Browse files Browse the repository at this point in the history
…ptor

Redo #4856 Platform descriptor should only be downloaded when targeting a different version
  • Loading branch information
maxandersen authored Oct 26, 2019
2 parents fc6f867 + 4ec22be commit 797029c
Show file tree
Hide file tree
Showing 109 changed files with 2,216 additions and 1,413 deletions.
10 changes: 0 additions & 10 deletions build-parent/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -100,21 +100,11 @@
<artifactId>quarkus-platform-descriptor-api</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-platform-descriptor-legacy</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-platform-descriptor-json</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-devtools-templates</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-creator</artifactId>
Expand Down
5 changes: 3 additions & 2 deletions devtools/bom-descriptor-json/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@

<artifactId>quarkus-bom-descriptor-json</artifactId>
<packaging>pom</packaging>
<name>Quarkus - Core Extensions JSON</name>
<name>Quarkus - BOM - Descriptor JSON</name>

<dependencies>
</dependencies>
Expand All @@ -21,7 +21,8 @@
<plugins>
<plugin>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-maven-plugin</artifactId>
<artifactId>quarkus-platform-descriptor-json-plugin</artifactId>
<version>${project.version}</version>
<executions>
<execution>
<phase>process-resources</phase>
Expand Down
2 changes: 1 addition & 1 deletion devtools/gradle/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ repositories {
dependencies {
compile "io.quarkus:quarkus-bootstrap-core:${version}"
compile "io.quarkus:quarkus-devtools-common:${version}"
compile "io.quarkus:quarkus-platform-descriptor-legacy:${version}"
compile "io.quarkus:quarkus-platform-descriptor-json:${version}"
compile "io.quarkus:quarkus-development-mode:${version}"
compile "io.quarkus:quarkus-creator:${version}"
compile "org.gradle:gradle-tooling-api:5.5.1"
Expand Down
8 changes: 3 additions & 5 deletions devtools/gradle/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -56,17 +56,15 @@
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-platform-descriptor-legacy</artifactId>
<artifactId>quarkus-development-mode</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-development-mode</artifactId>
<version>${project.version}</version>
<artifactId>quarkus-creator</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-creator</artifactId>
<version>${project.version}</version>
<artifactId>quarkus-platform-descriptor-json</artifactId>
</dependency>

<dependency>
Expand Down
4 changes: 0 additions & 4 deletions devtools/maven/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,6 @@
<groupId>io.quarkus</groupId>
<artifactId>quarkus-devtools-common</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-platform-descriptor-legacy</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-platform-descriptor-json</artifactId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,12 +61,6 @@ public class CreateProjectMojo extends AbstractMojo {

final private static boolean IS_WINDOWS = System.getProperty("os.name").toLowerCase(Locale.ROOT).contains("windows");

private static String pluginKey;

public static String getPluginKey() {
return pluginKey == null ? pluginKey = MojoUtils.getPluginGroupId() + ":" + MojoUtils.getPluginArtifactId() : pluginKey;
}

private static final String DEFAULT_GROUP_ID = "org.acme.quarkus.sample";

@Parameter(defaultValue = "${project}")
Expand Down
98 changes: 50 additions & 48 deletions devtools/maven/src/main/java/io/quarkus/maven/CreateUtils.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
package io.quarkus.maven;

import java.io.InputStream;
import java.net.URL;
import java.nio.file.FileSystem;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
Expand All @@ -27,11 +25,11 @@
import io.quarkus.bootstrap.resolver.AppModelResolverException;
import io.quarkus.bootstrap.resolver.maven.MavenArtifactResolver;
import io.quarkus.bootstrap.util.ZipUtils;
import io.quarkus.maven.utilities.MojoUtils;
import io.quarkus.platform.descriptor.QuarkusPlatformDescriptor;
import io.quarkus.platform.descriptor.loader.QuarkusPlatformDescriptorLoaderContext;
import io.quarkus.platform.descriptor.loader.json.impl.QuarkusJsonPlatformDescriptorLoaderBootstrap;
import io.quarkus.platform.descriptor.loader.json.util.QuarkusJsonDescriptorUtils;
import io.quarkus.platform.descriptor.loader.legacy.QuarkusLegacyPlatformDescriptor;
import io.quarkus.platform.descriptor.loader.legacy.QuarkusLegacyPlatformDescriptorLoader;
import io.quarkus.platform.tools.MessageWriter;
import io.quarkus.platform.tools.config.QuarkusPlatformConfig;
import io.quarkus.platform.tools.maven.MojoMessageWriter;
Expand All @@ -57,6 +55,14 @@ public static void setupQuarkusJsonPlatformDescriptor(
final Log log)
throws MojoExecutionException {

final Artifact platformArtifact = new DefaultArtifact(platformGroupId, platformArtifactId, null, "json",
defaultPlatformVersion);

if (isOnClasspath(platformArtifact)) {
loadDescriptorFromClasspath(log);
return;
}

final MavenArtifactResolver mvn;
try {
mvn = MavenArtifactResolver.builder()
Expand All @@ -68,68 +74,73 @@ public static void setupQuarkusJsonPlatformDescriptor(
throw new MojoExecutionException("Failed to initialize artifact resolver", e);
}

final Artifact platformArtifact = new DefaultArtifact(platformGroupId, platformArtifactId, null, "json",
defaultPlatformVersion);

setupQuarkusJsonPlatformDescriptor(mvn, platformArtifact, log);
doSetupQuarkusJsonPlatformDescriptor(mvn, platformArtifact, log);
}

public static void setupQuarkusJsonPlatformDescriptor(MavenArtifactResolver mvn, Artifact platformArtifact, final Log log)
throws MojoExecutionException {

if (isOnClasspath(platformArtifact)) {
loadDescriptorFromClasspath(log);
return;
}

doSetupQuarkusJsonPlatformDescriptor(mvn, platformArtifact, log);
}

private static void doSetupQuarkusJsonPlatformDescriptor(MavenArtifactResolver mvn, Artifact platformArtifact,
final Log log)
throws MojoExecutionException {
if (platformArtifact.getVersion() == null || platformArtifact.getVersion().isEmpty()) {
platformArtifact = platformArtifact.setVersion(resolvePluginInfo(CreateUtils.class).getVersion());
}

final MessageWriter msgWriter = new MojoMessageWriter(log);
QuarkusPlatformDescriptor platformDescr;
final QuarkusPlatformDescriptor platformDescr;
try {
platformDescr = QuarkusJsonDescriptorUtils.loadDescriptor(mvn, platformArtifact, msgWriter);
platformDescr = QuarkusJsonDescriptorUtils.loadDescriptor(mvn, platformArtifact, new MojoMessageWriter(log));
} catch (Throwable t) {
log.warn(
"The JSON platform descriptor couldn't be loaded for " + platformArtifact
+ ". Falling back to the legacy platform descriptor.");
platformDescr = newLegacyDescriptor(msgWriter);
throw new MojoExecutionException("Failed to resolve platform descriptor " + platformArtifact, t);
}
QuarkusPlatformConfig.defaultConfigBuilder()
.setPlatformDescriptor(platformDescr)
.build();
}

public static void setupQuarkusLegacyPlatformDescriptor(Log log) {
private static void loadDescriptorFromClasspath(Log log) {
QuarkusPlatformConfig.defaultConfigBuilder()
.setPlatformDescriptor(newLegacyDescriptor(new MojoMessageWriter(log)))
.setPlatformDescriptor(new QuarkusJsonPlatformDescriptorLoaderBootstrap()
.load(new QuarkusPlatformDescriptorLoaderContext() {
final MessageWriter msgWriter = new MojoMessageWriter(log);

@Override
public MessageWriter getMessageWriter() {
return msgWriter;
}
}))
.build();
}

private static QuarkusLegacyPlatformDescriptor newLegacyDescriptor(final MessageWriter msgWriter) {
return new QuarkusLegacyPlatformDescriptorLoader().load(new QuarkusPlatformDescriptorLoaderContext() {
@Override
public MessageWriter getMessageWriter() {
return msgWriter;
}
});
private static boolean isOnClasspath(Artifact platformArtifact) throws MojoExecutionException {
return "quarkus-bom-descriptor-json".equals(platformArtifact.getArtifactId())
&& "io.quarkus".equals(platformArtifact.getGroupId())
&& (platformArtifact.getVersion() == null
|| platformArtifact.getVersion().isEmpty()
|| platformArtifact.getVersion()
.equals(CreateUtils.resolvePluginInfo(CreateUtils.class).getVersion()));
}

public static Plugin resolvePluginInfo(Class<?> cls) throws MojoExecutionException {
final String pluginClassPath = cls.getName().replace('.', '/') + ".class";
URL url = Thread.currentThread().getContextClassLoader().getResource(pluginClassPath);
if (url == null) {
throw new MojoExecutionException("Failed to locate the origin of " + cls);
}
String classLocation = url.toExternalForm();
if (url.getProtocol().equals("jar")) {
classLocation = classLocation.substring(4, classLocation.length() - pluginClassPath.length() - 2);
try (FileSystem fs = ZipUtils.newFileSystem(toPath(classLocation))) {
try {
final Path classOrigin = MojoUtils.getClassOrigin(cls);
if (Files.isDirectory(classOrigin)) {
return resolvePluginInfo(classOrigin);
}
try (FileSystem fs = ZipUtils.newFileSystem(classOrigin)) {
return resolvePluginInfo(fs.getPath("META-INF", "maven", "plugin.xml"));
} catch (Exception e) {
throw new MojoExecutionException("Failed to resolve plugin version for " + classLocation, e);
}
} else {
classLocation = classLocation.substring(0, classLocation.length() - pluginClassPath.length());
return resolvePluginInfo(toPath(classLocation));
} catch (Exception e) {
throw new MojoExecutionException("Failed to resolve maven plugin version containing " + cls, e);
}

}

private static Plugin resolvePluginInfo(Path pluginXml) throws MojoExecutionException {
Expand Down Expand Up @@ -163,15 +174,6 @@ private static String getChildElementTextValue(final Node parentNode, String chi
return text;
}

private static Path toPath(String classLocation) throws MojoExecutionException {
try {
return Paths.get(new URL(classLocation).toURI());
} catch (Throwable e) {
throw new MojoExecutionException(
"Failed to create an instance of " + Path.class.getName() + " from " + classLocation, e);
}
}

private static Node getElement(NodeList nodeList, String name) throws MojoExecutionException {
for (int i = 0; i < nodeList.getLength(); ++i) {
final Node item = nodeList.item(i);
Expand Down
67 changes: 67 additions & 0 deletions devtools/platform-descriptor-json-plugin/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>quarkus-build-parent</artifactId>
<groupId>io.quarkus</groupId>
<version>999-SNAPSHOT</version>
<relativePath>../../build-parent/pom.xml</relativePath>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>quarkus-platform-descriptor-json-plugin</artifactId>
<packaging>maven-plugin</packaging>
<name>Quarkus - Dev tools - Platform Descriptor - JSON Maven Plugin</name>

<properties>
<quarkus.version>${project.version}</quarkus.version>
</properties>
<dependencies>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-bootstrap-core</artifactId>
<exclusions>
<exclusion>
<groupId>org.apache.maven.wagon</groupId>
<artifactId>wagon-provider-api</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-devtools-common</artifactId>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-platform-descriptor-resolver-json</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-creator</artifactId>
</dependency>

<dependency>
<groupId>org.glassfish</groupId>
<artifactId>javax.json</artifactId>
</dependency>

<!-- extensions reader -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>

<dependency>
<groupId>org.jboss.slf4j</groupId>
<artifactId>slf4j-jboss-logging</artifactId>
</dependency>

</dependencies>
</project>
Loading

0 comments on commit 797029c

Please sign in to comment.