From d530ccc89f62204183320621dc380052d4cd7379 Mon Sep 17 00:00:00 2001 From: frantuma Date: Thu, 18 Feb 2021 19:12:31 +0100 Subject: [PATCH] transformer maven plugin fork not to attach transformed JAR --- modules/swagger-annotations/pom.xml | 19 ++ modules/swagger-core/pom.xml | 19 ++ .../README.md | 6 + .../pom.xml | 104 +++++++++ .../v3/oas/transformer/TransformMojo.java | 212 ++++++++++++++++++ modules/swagger-integration/pom.xml | 19 ++ .../pom.xml | 19 ++ .../pom.xml | 19 ++ modules/swagger-jaxrs2/pom.xml | 19 ++ modules/swagger-maven-plugin/pom.xml | 19 ++ modules/swagger-models/pom.xml | 19 ++ pom.xml | 7 +- 12 files changed, 477 insertions(+), 4 deletions(-) create mode 100644 modules/swagger-eclipse-transformer-maven-plugin/README.md create mode 100644 modules/swagger-eclipse-transformer-maven-plugin/pom.xml create mode 100644 modules/swagger-eclipse-transformer-maven-plugin/src/main/java/io/swagger/v3/oas/transformer/TransformMojo.java diff --git a/modules/swagger-annotations/pom.xml b/modules/swagger-annotations/pom.xml index da1ad25a2d..5b22ebef73 100644 --- a/modules/swagger-annotations/pom.xml +++ b/modules/swagger-annotations/pom.xml @@ -30,6 +30,25 @@ + + io.swagger.core.v3 + swagger-eclipse-transformer-maven-plugin + ${project.version} + + false + jakarta + ${project.basedir}/../swagger-project-jakarta/modules/${project.artifactId}-jakarta/transformed + + + + transform-jakarta + + run + + package + + + diff --git a/modules/swagger-core/pom.xml b/modules/swagger-core/pom.xml index 643c70341e..168f616617 100644 --- a/modules/swagger-core/pom.xml +++ b/modules/swagger-core/pom.xml @@ -59,6 +59,25 @@ + + io.swagger.core.v3 + swagger-eclipse-transformer-maven-plugin + ${project.version} + + false + jakarta + ${project.basedir}/../swagger-project-jakarta/modules/${project.artifactId}-jakarta/transformed + + + + transform-jakarta + + run + + package + + + diff --git a/modules/swagger-eclipse-transformer-maven-plugin/README.md b/modules/swagger-eclipse-transformer-maven-plugin/README.md new file mode 100644 index 0000000000..51bf0a7e78 --- /dev/null +++ b/modules/swagger-eclipse-transformer-maven-plugin/README.md @@ -0,0 +1,6 @@ +Adapted from https://github.com/eclipse/transformer/blob/main/org.eclipse.transformer.maven +not to add the transformed JAR as an attached artifact to the project. + +To be replaced with Eclipse original Transformer plugin when/if optional attachment is supported. + + diff --git a/modules/swagger-eclipse-transformer-maven-plugin/pom.xml b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml new file mode 100644 index 0000000000..fda539c9d5 --- /dev/null +++ b/modules/swagger-eclipse-transformer-maven-plugin/pom.xml @@ -0,0 +1,104 @@ + + + + io.swagger.core.v3 + swagger-project + 2.1.7 + ../.. + + 4.0.0 + swagger-eclipse-transformer-maven-plugin + swagger-eclipse-transformer-maven-plugin + swagger-eclipse-transformer-maven-plugin + maven-plugin + + 3.2.2 + 0.20 + 3.3.0 + 1.2.6 + 5.7.0 + 1.7.0 + 3.18.1 + + + + + org.apache.maven.plugins + maven-enforcer-plugin + ${enforcer-plugin-version} + + true + + + + org.apache.maven.plugins + maven-jar-plugin + 3.2.0 + + + org.apache.maven.plugins + maven-plugin-plugin + 3.6.0 + + transform + + + + + + + org.eclipse.transformer + org.eclipse.transformer.cli + 0.2.0 + + + javax.inject + javax.inject + 1 + + compile + + + org.apache.maven.plugin-tools + maven-plugin-annotations + 3.3 + provided + + + org.apache.maven + maven-plugin-api + ${maven.target.version} + provided + + + org.apache.maven + maven-model + ${maven.target.version} + provided + + + org.apache.maven + maven-core + ${maven.target.version} + provided + + + commons-cli + commons-cli + 1.4 + + + org.apache.maven + maven-artifact + ${maven.target.version} + provided + + + org.apache.maven + maven-compat + ${maven.target.version} + provided + + + diff --git a/modules/swagger-eclipse-transformer-maven-plugin/src/main/java/io/swagger/v3/oas/transformer/TransformMojo.java b/modules/swagger-eclipse-transformer-maven-plugin/src/main/java/io/swagger/v3/oas/transformer/TransformMojo.java new file mode 100644 index 0000000000..14cb87adb3 --- /dev/null +++ b/modules/swagger-eclipse-transformer-maven-plugin/src/main/java/io/swagger/v3/oas/transformer/TransformMojo.java @@ -0,0 +1,212 @@ +package io.swagger.v3.oas.transformer; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.maven.artifact.Artifact; +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugin.MojoFailureException; +import org.apache.maven.plugins.annotations.Component; +import org.apache.maven.plugins.annotations.LifecyclePhase; +import org.apache.maven.plugins.annotations.Mojo; +import org.apache.maven.plugins.annotations.Parameter; +import org.apache.maven.plugins.annotations.ResolutionScope; +import org.apache.maven.project.MavenProject; +import org.apache.maven.project.MavenProjectHelper; +import org.eclipse.transformer.Transformer; +import org.eclipse.transformer.jakarta.JakartaTransformer; + +/** + * + * Adapted from https://github.com/eclipse/transformer/blob/main/org.eclipse.transformer.maven + * not to add the transformed JAR as an attached artifact to the project. + * + * To be replaced with Eclipse original Transformer plugin when/if optional attachment is supported. + * + * This is a Maven plugin which runs the Eclipse Transformer on build artifacts + * as part of the build. + */ +@Mojo(name = "run", requiresDependencyResolution = ResolutionScope.RUNTIME_PLUS_SYSTEM, defaultPhase = LifecyclePhase.PACKAGE, requiresProject = true, threadSafe = true) +public class TransformMojo extends AbstractMojo { + + @Parameter(defaultValue = "${project}", readonly = true, required = true) + private MavenProject project; + + @Parameter(defaultValue = "false", property = "transformer-plugin.invert", required = true) + private Boolean invert; + + @Parameter(defaultValue = "true", property = "transformer-plugin.overwrite", required = true) + private Boolean overwrite; + + @Parameter(property = "transformer-plugin.renames", defaultValue = "") + private String rulesRenamesUri; + + @Parameter(property = "transformer-plugin.versions", defaultValue = "") + private String rulesVersionUri; + + @Parameter(property = "transformer-plugin.bundles", defaultValue = "") + private String rulesBundlesUri; + + @Parameter(property = "transformer-plugin.direct", defaultValue = "") + private String rulesDirectUri; + + @Parameter(property = "transformer-plugin.per-class-constant", defaultValue = "") + private String rulesPerClassConstantUri; + + @Parameter(property = "transformer-plugin.xml", defaultValue = "") + private String rulesXmlsUri; + + @Parameter(defaultValue = "transformed") + private String classifier; + + @Parameter(defaultValue = "${project.build.directory}", required = true) + private File outputDirectory; + + @Parameter(defaultValue = "true", property = "transformer-plugin.attach", required = true) + private Boolean attach; + + @Component + private MavenProjectHelper projectHelper; + + /** + * Main execution point of the plugin. This looks at the attached artifacts, + * and runs the transformer on them. + * + * @throws MojoFailureException Thrown if there is an error during plugin + * execution + */ + @Override + public void execute() throws MojoFailureException { + final Transformer transformer = getTransformer(); + + final Artifact[] sourceArtifacts = getSourceArtifacts(); + for (final Artifact sourceArtifact : sourceArtifacts) { + transform(transformer, sourceArtifact); + } + } + + /** + * This runs the transformation process on the source artifact with the + * transformer provided. The transformed artifact is attached to the + * project. + * + * @param transformer The Transformer to use for the transformation + * @param sourceArtifact The Artifact to transform + * @throws MojoFailureException if plugin execution fails + */ + public void transform(final Transformer transformer, final Artifact sourceArtifact) throws MojoFailureException { + + final String sourceClassifier = sourceArtifact.getClassifier(); + final String targetClassifier = (sourceClassifier == null || sourceClassifier.length() == 0) ? this.classifier + : sourceClassifier + "-" + this.classifier; + + final File targetFile = new File(outputDirectory, sourceArtifact.getArtifactId() + "-" + targetClassifier + "-" + + sourceArtifact.getVersion() + "." + sourceArtifact.getType()); + + final List args = new ArrayList<>(); + args.add(sourceArtifact.getFile() + .getAbsolutePath()); + args.add(targetFile.getAbsolutePath()); + + if (this.overwrite) { + args.add("-o"); + } + + transformer.setArgs(args.toArray(new String[0])); + int rc = transformer.run(); + + if (rc != 0) { + throw new MojoFailureException("Transformer failed with an error: " + Transformer.RC_DESCRIPTIONS[rc]); + } + + if (attach) { + projectHelper.attachArtifact(project, sourceArtifact.getType(), targetClassifier, targetFile); + } + } + + /** + * Builds a configured transformer for the specified source and target + * artifacts + * + * @return A configured transformer + */ + public Transformer getTransformer() { + final Transformer transformer = new Transformer(System.out, System.err); + transformer.setOptionDefaults(JakartaTransformer.class, getOptionDefaults()); + return transformer; + } + + /** + * Gets the source artifacts that should be transformed + * + * @return an array to artifacts to be transformed + */ + public Artifact[] getSourceArtifacts() { + List artifactList = new ArrayList<>(); + if (project.getArtifact() != null && project.getArtifact() + .getFile() != null) { + artifactList.add(project.getArtifact()); + } + + for (final Artifact attachedArtifact : project.getAttachedArtifacts()) { + if (attachedArtifact.getFile() != null) { + artifactList.add(attachedArtifact); + } + } + + return artifactList.toArray(new Artifact[0]); + } + + private Map getOptionDefaults() { + Map optionDefaults = new HashMap<>(); + optionDefaults.put(Transformer.AppOption.RULES_RENAMES, + isEmpty(rulesRenamesUri) ? "jakarta-renames.properties" : rulesRenamesUri); + optionDefaults.put(Transformer.AppOption.RULES_VERSIONS, + isEmpty(rulesVersionUri) ? "jakarta-versions.properties" : rulesVersionUri); + optionDefaults.put(Transformer.AppOption.RULES_BUNDLES, + isEmpty(rulesBundlesUri) ? "jakarta-bundles.properties" : rulesBundlesUri); + optionDefaults.put(Transformer.AppOption.RULES_DIRECT, + isEmpty(rulesDirectUri) ? "jakarta-direct.properties" : rulesDirectUri); + optionDefaults.put(Transformer.AppOption.RULES_MASTER_TEXT, + isEmpty(rulesXmlsUri) ? "jakarta-text-master.properties" : rulesXmlsUri); + optionDefaults.put(Transformer.AppOption.RULES_PER_CLASS_CONSTANT, + isEmpty(rulesPerClassConstantUri) ? "jakarta-per-class-constant-master.properties" : rulesPerClassConstantUri); + return optionDefaults; + } + + private boolean isEmpty(final String input) { + return input == null || input.trim() + .length() == 0; + } + + void setProject(MavenProject project) { + this.project = project; + } + + void setClassifier(String classifier) { + this.classifier = classifier; + } + + MavenProjectHelper getProjectHelper() { + return projectHelper; + } + + void setProjectHelper(MavenProjectHelper projectHelper) { + this.projectHelper = projectHelper; + } + + void setOverwrite(Boolean overwrite) { + this.overwrite = overwrite; + } + + void setOutputDirectory(File outputDirectory) { + this.outputDirectory = outputDirectory; + } + + void setAttach(Boolean attach) { + this.attach = attach; + } +} diff --git a/modules/swagger-integration/pom.xml b/modules/swagger-integration/pom.xml index 3a9683a5c4..b75c67d2e5 100644 --- a/modules/swagger-integration/pom.xml +++ b/modules/swagger-integration/pom.xml @@ -58,6 +58,25 @@ + + io.swagger.core.v3 + swagger-eclipse-transformer-maven-plugin + ${project.version} + + false + jakarta + ${project.basedir}/../swagger-project-jakarta/modules/${project.artifactId}-jakarta/transformed + + + + transform-jakarta + + run + + package + + + diff --git a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml index ac7a169ead..49bc00e61b 100644 --- a/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer-v2/pom.xml @@ -113,6 +113,25 @@ + + io.swagger.core.v3 + swagger-eclipse-transformer-maven-plugin + ${project.version} + + false + jakarta + ${project.basedir}/../swagger-project-jakarta/modules/${project.artifactId}-jakarta/transformed + + + + transform-jakarta + + run + + package + + + diff --git a/modules/swagger-jaxrs2-servlet-initializer/pom.xml b/modules/swagger-jaxrs2-servlet-initializer/pom.xml index 9cbc57e4aa..b83f4db9f7 100644 --- a/modules/swagger-jaxrs2-servlet-initializer/pom.xml +++ b/modules/swagger-jaxrs2-servlet-initializer/pom.xml @@ -118,6 +118,25 @@ + + io.swagger.core.v3 + swagger-eclipse-transformer-maven-plugin + ${project.version} + + false + jakarta + ${project.basedir}/../swagger-project-jakarta/modules/${project.artifactId}-jakarta/transformed + + + + transform-jakarta + + run + + package + + + diff --git a/modules/swagger-jaxrs2/pom.xml b/modules/swagger-jaxrs2/pom.xml index 5c1875c0ae..7c2983a7f0 100644 --- a/modules/swagger-jaxrs2/pom.xml +++ b/modules/swagger-jaxrs2/pom.xml @@ -106,6 +106,25 @@ + + io.swagger.core.v3 + swagger-eclipse-transformer-maven-plugin + ${project.version} + + false + jakarta + ${project.basedir}/../swagger-project-jakarta/modules/${project.artifactId}-jakarta/transformed + + + + transform-jakarta + + run + + package + + + diff --git a/modules/swagger-maven-plugin/pom.xml b/modules/swagger-maven-plugin/pom.xml index cc111ee0e1..956d15c829 100644 --- a/modules/swagger-maven-plugin/pom.xml +++ b/modules/swagger-maven-plugin/pom.xml @@ -31,6 +31,25 @@ maven-plugin-plugin 3.6.0 + + io.swagger.core.v3 + swagger-eclipse-transformer-maven-plugin + ${project.version} + + false + jakarta + ${project.basedir}/../swagger-project-jakarta/modules/${project.artifactId}-jakarta/transformed + + + + transform-jakarta + + run + + package + + + diff --git a/modules/swagger-models/pom.xml b/modules/swagger-models/pom.xml index 32989da542..7626a1b218 100644 --- a/modules/swagger-models/pom.xml +++ b/modules/swagger-models/pom.xml @@ -44,6 +44,25 @@ -Djdk.attach.allowAttachSelf + + io.swagger.core.v3 + swagger-eclipse-transformer-maven-plugin + ${project.version} + + false + jakarta + ${project.basedir}/../swagger-project-jakarta/modules/${project.artifactId}-jakarta/transformed + + + + transform-jakarta + + run + + package + + + diff --git a/pom.xml b/pom.xml index 988f1ff3b1..31b543b31b 100644 --- a/pom.xml +++ b/pom.xml @@ -212,6 +212,7 @@ true--> + @@ -367,9 +368,6 @@ --pinentry-mode loopback - - **/*jakarta* - @@ -386,6 +384,7 @@ + modules/swagger-eclipse-transformer-maven-plugin modules/swagger-annotations modules/swagger-models modules/swagger-core