Allow repackage maven goal to take a source classifier
Previously, the "classifier" attribute was only used to determine the target classifier of the repackaged archive, always using the main artifact as the source. This commit changes the semantic of the attribute so that an existing archive matching the "classifier" attribute can be used as source, replacing the archive the same way the goal replaces the main archive if no classifier is found. If no artifact with the specified classifier exists, the repackaged archive is still processed based on the main archive and attached to the lifecycle using the value of the classifier attribute. See gh-11061
This commit is contained in:
parent
08a12e7964
commit
3c8e012411
|
|
@ -0,0 +1,66 @@
|
|||
<?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">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<groupId>org.springframework.boot.maven.it</groupId>
|
||||
<artifactId>jar-repackage-classifier</artifactId>
|
||||
<version>0.0.1.BUILD-SNAPSHOT</version>
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<maven.compiler.source>@java.version@</maven.compiler.source>
|
||||
<maven.compiler.target>@java.version@</maven.compiler.target>
|
||||
</properties>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<version>@maven-jar-plugin.version@</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>jar</goal>
|
||||
</goals>
|
||||
<phase>package</phase>
|
||||
<configuration>
|
||||
<classifier>test</classifier>
|
||||
<archive>
|
||||
<manifestEntries>
|
||||
<Not-Used>Foo</Not-Used>
|
||||
</manifestEntries>
|
||||
</archive>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>@project.groupId@</groupId>
|
||||
<artifactId>@project.artifactId@</artifactId>
|
||||
<version>@project.version@</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>repackage</goal>
|
||||
</goals>
|
||||
<configuration>
|
||||
<classifier>test</classifier>
|
||||
</configuration>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-context</artifactId>
|
||||
<version>@spring.version@</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>javax.servlet-api</artifactId>
|
||||
<version>@servlet-api.version@</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
/*
|
||||
* Copyright 2012-2014 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.test;
|
||||
|
||||
public class SampleApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
/*
|
||||
* Copyright 2012-2014 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import java.io.*;
|
||||
import org.springframework.boot.maven.*;
|
||||
|
||||
File f = new File(basedir, "target/jar-repackage-classifier-0.0.1.BUILD-SNAPSHOT-test.jar");
|
||||
new Verify.JarArchiveVerification(f, Verify.SAMPLE_APP) {
|
||||
@Override
|
||||
protected void verifyZipEntries(Verify.ArchiveVerifier verifier) throws Exception {
|
||||
super.verifyZipEntries(verifier)
|
||||
}
|
||||
}.verify();
|
||||
|
|
@ -57,6 +57,7 @@ import org.springframework.boot.loader.tools.Repackager.MainClassTimeoutWarningL
|
|||
* @author Phillip Webb
|
||||
* @author Dave Syer
|
||||
* @author Stephane Nicoll
|
||||
* @author Björn Lindström
|
||||
*/
|
||||
@Mojo(name = "repackage", defaultPhase = LifecyclePhase.PACKAGE, requiresProject = true, threadSafe = true, requiresDependencyResolution = ResolutionScope.COMPILE_PLUS_RUNTIME, requiresDependencyCollection = ResolutionScope.COMPILE_PLUS_RUNTIME)
|
||||
public class RepackageMojo extends AbstractDependencyFilterMojo {
|
||||
|
|
@ -99,7 +100,8 @@ public class RepackageMojo extends AbstractDependencyFilterMojo {
|
|||
/**
|
||||
* Classifier to add to the artifact generated. If given, the artifact will be
|
||||
* attached with that classifier and the main artifact will be deployed as the main
|
||||
* artifact. If this is not given (default), it will replace the main artifact and
|
||||
* artifact. If an artifact with the classifier already exists, it will be used as source.
|
||||
* If a classifier is not given (default), it will replace the main artifact and
|
||||
* only the repackaged artifact will be deployed. Attaching the artifact allows to
|
||||
* deploy it alongside to the original one, see <a href=
|
||||
* "http://maven.apache.org/plugins/maven-deploy-plugin/examples/deploying-with-classifiers.html"
|
||||
|
|
@ -208,7 +210,7 @@ public class RepackageMojo extends AbstractDependencyFilterMojo {
|
|||
}
|
||||
|
||||
private void repackage() throws MojoExecutionException {
|
||||
File source = this.project.getArtifact().getFile();
|
||||
File source = getSourceFile();
|
||||
File target = getTargetFile();
|
||||
Repackager repackager = getRepackager(source);
|
||||
Set<Artifact> artifacts = filterDependencies(this.project.getArtifacts(),
|
||||
|
|
@ -225,6 +227,21 @@ public class RepackageMojo extends AbstractDependencyFilterMojo {
|
|||
updateArtifact(source, target, repackager.getBackupFile());
|
||||
}
|
||||
|
||||
private File getSourceFile() {
|
||||
Artifact sourceArtifact = this.project.getArtifact();
|
||||
|
||||
if (this.classifier != null) {
|
||||
for (Artifact attachedArtifact : this.project.getAttachedArtifacts()) {
|
||||
if (this.classifier.equals(attachedArtifact.getClassifier())) {
|
||||
sourceArtifact = attachedArtifact;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return sourceArtifact.getFile();
|
||||
}
|
||||
|
||||
private File getTargetFile() {
|
||||
String classifier = (this.classifier != null ? this.classifier.trim() : "");
|
||||
if (!classifier.isEmpty() && !classifier.startsWith("-")) {
|
||||
|
|
@ -233,10 +250,18 @@ public class RepackageMojo extends AbstractDependencyFilterMojo {
|
|||
if (!this.outputDirectory.exists()) {
|
||||
this.outputDirectory.mkdirs();
|
||||
}
|
||||
return new File(this.outputDirectory, this.finalName + classifier + "."
|
||||
return new File(this.outputDirectory, this.finalName + getClassifier() + "."
|
||||
+ this.project.getArtifact().getArtifactHandler().getExtension());
|
||||
}
|
||||
|
||||
private String getClassifier() {
|
||||
String classifier = (this.classifier == null ? "" : this.classifier.trim());
|
||||
if (classifier.length() > 0 && !classifier.startsWith("-")) {
|
||||
classifier = "-" + classifier;
|
||||
}
|
||||
return classifier;
|
||||
}
|
||||
|
||||
private Repackager getRepackager(File source) {
|
||||
Repackager repackager = new Repackager(source, this.layoutFactory);
|
||||
repackager.addMainClassTimeoutWarningListener(
|
||||
|
|
|
|||
Loading…
Reference in New Issue