Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 16 additions & 1 deletion build-parent/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,22 @@
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-devtools-common-core</artifactId>
<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>
Expand Down
6 changes: 6 additions & 0 deletions core/deployment/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,12 @@
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-bootstrap-core</artifactId>
<exclusions>
<exclusion>
<groupId>org.eclipse.sisu</groupId>
<artifactId>org.eclipse.sisu.inject</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
</parent>
<modelVersion>4.0.0</modelVersion>

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

Expand All @@ -19,14 +19,6 @@

<build>
<plugins>
<plugin>
<groupId>org.sonatype.plugins</groupId>
<artifactId>nexus-staging-maven-plugin</artifactId>
<version>${nexus-staging-maven-plugin.version}</version>
<configuration>
<skipNexusStagingDeployMojo>true</skipNexusStagingDeployMojo>
</configuration>
</plugin>
<plugin>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-maven-plugin</artifactId>
Expand Down
2 changes: 1 addition & 1 deletion devtools/extension-plugin/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@

<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-devtools-common-core</artifactId>
<artifactId>quarkus-platform-descriptor-api</artifactId>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
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-devtools-common-core:${version}"
compile "io.quarkus:quarkus-platform-descriptor-legacy:${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 @@ -53,14 +53,12 @@
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-devtools-common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-devtools-common-core</artifactId>
<version>${project.version}</version>
<artifactId>quarkus-platform-descriptor-legacy</artifactId>
</dependency>
<dependency>
<dependency>
<groupId>io.quarkus</groupId>
<artifactId>quarkus-development-mode</artifactId>
<version>${project.version}</version>
Expand All @@ -70,7 +68,7 @@
<artifactId>quarkus-creator</artifactId>
<version>${project.version}</version>
</dependency>

<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-model</artifactId>
Expand Down
8 changes: 8 additions & 0 deletions devtools/maven/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,14 @@
<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>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
Expand Down
68 changes: 40 additions & 28 deletions devtools/maven/src/main/java/io/quarkus/maven/AddExtensionMojo.java
Original file line number Diff line number Diff line change
@@ -1,23 +1,21 @@
package io.quarkus.maven;

import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.stream.Collectors;

import org.apache.commons.lang3.StringUtils;
import org.apache.maven.model.Model;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;

import io.quarkus.cli.commands.AddExtensionResult;
import io.quarkus.cli.commands.AddExtensions;
import io.quarkus.cli.commands.file.BuildFile;
import io.quarkus.cli.commands.writer.FileProjectWriter;
import io.quarkus.generators.BuildTool;

/**
* Allow adding an extension to an existing pom.xml file.
Expand All @@ -26,13 +24,7 @@
* parameters.
*/
@Mojo(name = "add-extension")
public class AddExtensionMojo extends AbstractMojo {

/**
* The Maven project which will define and configure the quarkus-maven-plugin
*/
@Parameter(defaultValue = "${project}")
protected MavenProject project;
public class AddExtensionMojo extends BuildFileMojoBase {

/**
* The list of extensions to be added.
Expand All @@ -47,31 +39,51 @@ public class AddExtensionMojo extends AbstractMojo {
String extension;

@Override
public void execute() throws MojoExecutionException {
protected void validateParameters() throws MojoExecutionException {
if ((StringUtils.isBlank(extension) && (extensions == null || extensions.isEmpty())) // None are set
|| (!StringUtils.isBlank(extension) && extensions != null && !extensions.isEmpty())) { // Both are set
throw new MojoExecutionException("Either the `extension` or `extensions` parameter must be set");
}
}

Set<String> ext = new HashSet<>();
if (extensions != null && !extensions.isEmpty()) {
ext.addAll(extensions);
} else {
// Parse the "extension" just in case it contains several comma-separated values
// https://github.com/quarkusio/quarkus/issues/2393
ext.addAll(Arrays.stream(extension.split(",")).map(s -> s.trim()).collect(Collectors.toSet()));
}
@Override
public void doExecute(BuildFile buildFile) throws MojoExecutionException {

boolean closeBuildFile = false;
try {
Model model = project.getOriginalModel().clone();
File pomFile = new File(model.getPomFile().getAbsolutePath());
AddExtensionResult result = new AddExtensions(new FileProjectWriter(pomFile.getParentFile()))
.addExtensions(ext.stream().map(String::trim).collect(Collectors.toSet()));
if (!result.succeeded()) {
throw new MojoExecutionException("Unable to add extensions");
if (buildFile == null) {
try {
buildFile = BuildTool.MAVEN.createBuildFile(new FileProjectWriter(project.getBasedir()));
} catch (IOException e) {
throw new MojoExecutionException("Failed initialize project configuration tools", e);
}
}
Set<String> ext = new HashSet<>();
if (extensions != null && !extensions.isEmpty()) {
ext.addAll(extensions);
} else {
// Parse the "extension" just in case it contains several comma-separated values
// https://github.com/quarkusio/quarkus/issues/2393
ext.addAll(Arrays.stream(extension.split(",")).map(s -> s.trim()).collect(Collectors.toSet()));
}

try {
final AddExtensionResult result = new AddExtensions(buildFile)
.addExtensions(ext.stream().map(String::trim).collect(Collectors.toSet()));
if (!result.succeeded()) {
throw new MojoExecutionException("Unable to add extensions");
}
} catch (IOException e) {
throw new MojoExecutionException("Unable to update the pom.xml file", e);
}
} finally {
if (closeBuildFile && buildFile != null) {
try {
buildFile.close();
} catch (IOException e) {
getLog().debug("Failed to close " + buildFile, e);
}
}
} catch (IOException e) {
throw new MojoExecutionException("Unable to update the pom.xml file", e);
}
}
}
133 changes: 133 additions & 0 deletions devtools/maven/src/main/java/io/quarkus/maven/BuildFileMojoBase.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
package io.quarkus.maven;

import java.io.File;
import java.io.IOException;
import java.util.List;

import org.apache.maven.model.Dependency;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugins.annotations.Component;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;
import org.eclipse.aether.RepositorySystem;
import org.eclipse.aether.RepositorySystemSession;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.artifact.DefaultArtifact;
import org.eclipse.aether.repository.RemoteRepository;

import io.quarkus.bootstrap.resolver.maven.MavenArtifactResolver;
import io.quarkus.cli.commands.file.BuildFile;
import io.quarkus.cli.commands.file.GradleBuildFile;
import io.quarkus.cli.commands.file.MavenBuildFile;
import io.quarkus.cli.commands.writer.FileProjectWriter;
import io.quarkus.platform.tools.config.QuarkusPlatformConfig;

public abstract class BuildFileMojoBase extends AbstractMojo {

@Parameter(defaultValue = "${project}")
protected MavenProject project;

@Component
protected RepositorySystem repoSystem;

@Parameter(defaultValue = "${repositorySystemSession}", readonly = true)
protected RepositorySystemSession repoSession;

@Parameter(defaultValue = "${project.remoteProjectRepositories}", readonly = true, required = true)
protected List<RemoteRepository> repos;

@Override
public void execute() throws MojoExecutionException {

validateParameters();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@aloubyansky this one is too long too bug I think it's copied code right?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not really, I actually type it in :)


final MavenArtifactResolver mvn;
try {
mvn = MavenArtifactResolver.builder().setRepositorySystem(repoSystem).setRepositorySystemSession(repoSession)
.setRemoteRepositories(repos).build();
} catch (Exception e) {
throw new MojoExecutionException("Failed to initialize maven artifact resolver", e);
}

BuildFile buildFile = null;
try {
if (project.getFile() != null) {
// Maven project
@SuppressWarnings("resource")
final MavenBuildFile mvnBuild = new MavenBuildFile(new FileProjectWriter(project.getBasedir()));
buildFile = mvnBuild;

if (QuarkusPlatformConfig.hasGlobalDefault()) {
getLog().warn("The Quarkus platform default configuration has already been initialized.");
} else {
Artifact descrArtifact = null;
for (Dependency dep : mvnBuild.getManagedDependencies()) {
if (!dep.getScope().equals("import") && !dep.getType().equals("pom")) {
continue;
}
String bomVersion = dep.getVersion();
if (bomVersion.startsWith("${") && bomVersion.endsWith("}")) {
final String prop = bomVersion.substring(2, bomVersion.length() - 1);
bomVersion = mvnBuild.getProperty(prop);
if (bomVersion == null) {
getLog().debug("Failed to resolve version of " + dep);
continue;
}
}
Artifact jsonArtifact = new DefaultArtifact(dep.getGroupId(), dep.getArtifactId(), dep.getClassifier(),
"json", bomVersion);
try {
jsonArtifact = mvn.resolve(jsonArtifact).getArtifact();
} catch (Exception e) {
getLog().debug("Failed to resolve JSON descriptor as " + jsonArtifact);
jsonArtifact = new DefaultArtifact(dep.getGroupId(), dep.getArtifactId() + "-descriptor-json",
dep.getClassifier(), "json", bomVersion);
try {
jsonArtifact = mvn.resolve(jsonArtifact).getArtifact();
} catch (Exception e1) {
getLog().debug("Failed to resolve JSON descriptor as " + jsonArtifact);
continue;
}
}
descrArtifact = jsonArtifact;
break;
}

if (descrArtifact != null) {
getLog().debug("Quarkus platform JSON descriptor artifact: " + descrArtifact);
CreateUtils.setupQuarkusJsonPlatformDescriptor(mvn, descrArtifact, getLog());
}
}
} else if (new File(project.getBasedir(), "build.gradle").exists()
|| new File(project.getBasedir(), "build.gradle.kts").exists()) {
// Gradle project
buildFile = new GradleBuildFile(new FileProjectWriter(project.getBasedir()));
}

if (!QuarkusPlatformConfig.hasGlobalDefault()) {
CreateUtils.setupQuarkusJsonPlatformDescriptor(mvn,
new DefaultArtifact(CreateUtils.DEFAULT_PLATFORM_GROUP_ID, CreateUtils.DEFAULT_PLATFORM_ARTIFACT_ID,
null, "json", CreateUtils.resolvePluginInfo(BuildFileMojoBase.class).getVersion()),
getLog());
}

doExecute(buildFile);
} catch (IOException e) {
throw new MojoExecutionException("Failed to initialize project reading tools", e);
} finally {
if (buildFile != null) {
try {
buildFile.close();
} catch (IOException e) {
getLog().debug("Failed to close " + buildFile, e);
}
}
}
}

protected void validateParameters() throws MojoExecutionException {
}

protected abstract void doExecute(BuildFile buildFile) throws MojoExecutionException;
}
Loading