diff --git a/spring-boot-tools/spring-boot-maven-plugin/src/it/war-reactor/jar/pom.xml b/spring-boot-tools/spring-boot-maven-plugin/src/it/war-reactor/jar/pom.xml new file mode 100644 index 00000000000..897420ea934 --- /dev/null +++ b/spring-boot-tools/spring-boot-maven-plugin/src/it/war-reactor/jar/pom.xml @@ -0,0 +1,18 @@ + + + 4.0.0 + + org.springframework.boot.maven.it + war-reactor + 0.0.1.BUILD-SNAPSHOT + + jar + jar + jar + Jar dependency + + + jar + + diff --git a/spring-boot-tools/spring-boot-maven-plugin/src/it/war-reactor/pom.xml b/spring-boot-tools/spring-boot-maven-plugin/src/it/war-reactor/pom.xml new file mode 100644 index 00000000000..8acb5538b01 --- /dev/null +++ b/spring-boot-tools/spring-boot-maven-plugin/src/it/war-reactor/pom.xml @@ -0,0 +1,16 @@ + + + 4.0.0 + org.springframework.boot.maven.it + war-reactor + 0.0.1.BUILD-SNAPSHOT + pom + + UTF-8 + + + jar + war + + diff --git a/spring-boot-tools/spring-boot-maven-plugin/src/it/war-reactor/verify.groovy b/spring-boot-tools/spring-boot-maven-plugin/src/it/war-reactor/verify.groovy new file mode 100644 index 00000000000..b63174c8f70 --- /dev/null +++ b/spring-boot-tools/spring-boot-maven-plugin/src/it/war-reactor/verify.groovy @@ -0,0 +1,29 @@ +/* + * Copyright 2012-2015 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, "war/target/war-0.0.1.BUILD-SNAPSHOT.war") +new Verify.WarArchiveVerification(f) { + @Override + protected void verifyZipEntries(Verify.ArchiveVerifier verifier) throws Exception { + super.verifyZipEntries(verifier) + verifier.assertHasEntryNameStartingWith("WEB-INF/lib/jar-0.0.1.BUILD-SNAPSHOT.jar") + verifier.assertHasNoEntryNameStartingWith("WEB-INF/lib/jar.jar") + } +}.verify() + diff --git a/spring-boot-tools/spring-boot-maven-plugin/src/it/war-reactor/war/pom.xml b/spring-boot-tools/spring-boot-maven-plugin/src/it/war-reactor/war/pom.xml new file mode 100644 index 00000000000..3b2d0d710e9 --- /dev/null +++ b/spring-boot-tools/spring-boot-maven-plugin/src/it/war-reactor/war/pom.xml @@ -0,0 +1,61 @@ + + + 4.0.0 + + org.springframework.boot.maven.it + war-reactor + 0.0.1.BUILD-SNAPSHOT + + war + war + war + + + + @project.groupId@ + @project.artifactId@ + @project.version@ + + + + repackage + + + + + + org.apache.maven.plugins + maven-war-plugin + 2.3 + + false + + + Foo + + + + + + + + + org.springframework.boot.maven.it + jar + 0.0.1.BUILD-SNAPSHOT + + + org.springframework + spring-context + @spring.version@ + + + javax.servlet + javax.servlet-api + @servlet-api.version@ + provided + + + + diff --git a/spring-boot-tools/spring-boot-maven-plugin/src/it/war-reactor/war/src/main/java/com/example/SampleApplication.java b/spring-boot-tools/spring-boot-maven-plugin/src/it/war-reactor/war/src/main/java/com/example/SampleApplication.java new file mode 100644 index 00000000000..e8784d4593d --- /dev/null +++ b/spring-boot-tools/spring-boot-maven-plugin/src/it/war-reactor/war/src/main/java/com/example/SampleApplication.java @@ -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) { + } + +} diff --git a/spring-boot-tools/spring-boot-maven-plugin/src/it/war-reactor/war/src/main/webapp/index.html b/spring-boot-tools/spring-boot-maven-plugin/src/it/war-reactor/war/src/main/webapp/index.html new file mode 100644 index 00000000000..18ecdcb795c --- /dev/null +++ b/spring-boot-tools/spring-boot-maven-plugin/src/it/war-reactor/war/src/main/webapp/index.html @@ -0,0 +1 @@ + diff --git a/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ArtifactsLibraries.java b/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ArtifactsLibraries.java index 3d478e7f652..77e7bdaa77f 100644 --- a/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ArtifactsLibraries.java +++ b/spring-boot-tools/spring-boot-maven-plugin/src/main/java/org/springframework/boot/maven/ArtifactsLibraries.java @@ -38,6 +38,7 @@ import org.springframework.boot.loader.tools.LibraryScope; * * @author Phillip Webb * @author Andy Wilkinson + * @author Stephane Nicoll */ public class ArtifactsLibraries implements Libraries { @@ -71,7 +72,7 @@ public class ArtifactsLibraries implements Libraries { for (Artifact artifact : this.artifacts) { LibraryScope scope = SCOPES.get(artifact.getScope()); if (scope != null && artifact.getFile() != null) { - String name = artifact.getFile().getName(); + String name = getFileName(artifact); if (duplicates.contains(name)) { this.log.debug("Duplicate found: " + name); name = artifact.getGroupId() + "-" + name; @@ -87,8 +88,9 @@ public class ArtifactsLibraries implements Libraries { Set duplicates = new HashSet(); Set seen = new HashSet(); for (Artifact artifact : artifacts) { - if (artifact.getFile() != null && !seen.add(artifact.getFile().getName())) { - duplicates.add(artifact.getFile().getName()); + String fileName = getFileName(artifact); + if (artifact.getFile() != null && !seen.add(fileName)) { + duplicates.add(fileName); } } return duplicates; @@ -106,4 +108,15 @@ public class ArtifactsLibraries implements Libraries { return false; } + private String getFileName(Artifact artifact) { + StringBuilder sb = new StringBuilder(); + sb.append(artifact.getArtifactId()).append("-").append(artifact.getVersion()); + String classifier = artifact.getClassifier(); + if (classifier != null) { + sb.append("-").append(classifier); + } + sb.append(".").append(artifact.getArtifactHandler().getExtension()); + return sb.toString(); + } + } diff --git a/spring-boot-tools/spring-boot-maven-plugin/src/site/apt/usage.apt.vm b/spring-boot-tools/spring-boot-maven-plugin/src/site/apt/usage.apt.vm index 4d819ee9139..5e501a2ada1 100644 --- a/spring-boot-tools/spring-boot-maven-plugin/src/site/apt/usage.apt.vm +++ b/spring-boot-tools/spring-boot-maven-plugin/src/site/apt/usage.apt.vm @@ -57,6 +57,8 @@ Usage including any <<>> dependencies that are defined in the project. If some of these dependencies need to be excluded, you can use one of the exclude options, see {{{./examples/exclude-dependency.html}Exclude a dependency}} for more details. + Please note that the <<>> feature of the <<>> + is currently not supported. The original (i.e. non executable) artifact is renamed to <<<.original>>> by default but it is also possible to keep the original artifact using a custom classifier. diff --git a/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/ArtifactsLibrariesTests.java b/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/ArtifactsLibrariesTests.java index e36f21ffde1..df636e2120e 100644 --- a/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/ArtifactsLibrariesTests.java +++ b/spring-boot-tools/spring-boot-maven-plugin/src/test/java/org/springframework/boot/maven/ArtifactsLibrariesTests.java @@ -23,6 +23,7 @@ import java.util.LinkedHashSet; import java.util.Set; import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.handler.ArtifactHandler; import org.apache.maven.model.Dependency; import org.apache.maven.plugin.logging.Log; import org.junit.Before; @@ -52,6 +53,9 @@ public class ArtifactsLibrariesTests { @Mock private Artifact artifact; + @Mock + private ArtifactHandler artifactHandler; + private Set artifacts; private File file = new File("."); @@ -70,6 +74,8 @@ public class ArtifactsLibrariesTests { this.artifacts = Collections.singleton(this.artifact); this.libs = new ArtifactsLibraries(this.artifacts, null, mock(Log.class)); given(this.artifact.getFile()).willReturn(this.file); + given(this.artifactHandler.getExtension()).willReturn("jar"); + given(this.artifact.getArtifactHandler()).willReturn(this.artifactHandler); } @Test @@ -107,17 +113,25 @@ public class ArtifactsLibrariesTests { given(artifact1.getType()).willReturn("jar"); given(artifact1.getScope()).willReturn("compile"); given(artifact1.getGroupId()).willReturn("g1"); + given(artifact1.getArtifactId()).willReturn("artifact"); + given(artifact1.getVersion()).willReturn("1.0"); given(artifact1.getFile()).willReturn(new File("a")); + given(artifact1.getArtifactHandler()).willReturn(this.artifactHandler); given(artifact2.getType()).willReturn("jar"); given(artifact2.getScope()).willReturn("compile"); given(artifact2.getGroupId()).willReturn("g2"); + given(artifact2.getArtifactId()).willReturn("artifact"); + given(artifact2.getVersion()).willReturn("1.0"); given(artifact2.getFile()).willReturn(new File("a")); + given(artifact2.getArtifactHandler()).willReturn(this.artifactHandler); this.artifacts = new LinkedHashSet(Arrays.asList(artifact1, artifact2)); this.libs = new ArtifactsLibraries(this.artifacts, null, mock(Log.class)); this.libs.doWithLibraries(this.callback); verify(this.callback, times(2)).library(this.libraryCaptor.capture()); - assertThat(this.libraryCaptor.getAllValues().get(0).getName()).isEqualTo("g1-a"); - assertThat(this.libraryCaptor.getAllValues().get(1).getName()).isEqualTo("g2-a"); + assertThat(this.libraryCaptor.getAllValues().get(0).getName()).isEqualTo( + "g1-artifact-1.0.jar"); + assertThat(this.libraryCaptor.getAllValues().get(1).getName()).isEqualTo( + "g2-artifact-1.0.jar"); } }