Add Library abstraction
Add a Library class update the LibraryCallback interface and implementations to use it. This change is in preparation for an addition `unpack` flag that will be required to allow the automatic unpacking of certain nested jars. See gh-1070
This commit is contained in:
parent
3d6c8a85f4
commit
5f8fbfd73a
|
|
@ -619,7 +619,7 @@ Here is a typical example repackage:
|
|||
@Override
|
||||
public void doWithLibraries(LibraryCallback callback) throws IOException {
|
||||
// Build system specific implementation, callback for each dependency
|
||||
// callback.library(nestedFile, LibraryScope.COMPILE);
|
||||
// callback.library(new Library(nestedFile, LibraryScope.COMPILE));
|
||||
}
|
||||
});
|
||||
----
|
||||
|
|
|
|||
|
|
@ -23,6 +23,7 @@ import org.gradle.api.Project;
|
|||
import org.gradle.api.artifacts.Configuration;
|
||||
import org.gradle.api.file.FileCollection;
|
||||
import org.springframework.boot.loader.tools.Libraries;
|
||||
import org.springframework.boot.loader.tools.Library;
|
||||
import org.springframework.boot.loader.tools.LibraryCallback;
|
||||
import org.springframework.boot.loader.tools.LibraryScope;
|
||||
|
||||
|
|
@ -97,7 +98,7 @@ class ProjectLibraries implements Libraries {
|
|||
LibraryCallback callback) throws IOException {
|
||||
if (files != null) {
|
||||
for (File file: files) {
|
||||
callback.library(file, scope);
|
||||
callback.library(new Library(file, scope));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,8 +28,8 @@ import org.gradle.api.plugins.BasePlugin;
|
|||
import org.gradle.api.tasks.bundling.Jar;
|
||||
import org.springframework.boot.gradle.PluginFeatures;
|
||||
import org.springframework.boot.gradle.SpringBootPluginExtension;
|
||||
import org.springframework.boot.loader.tools.Library;
|
||||
import org.springframework.boot.loader.tools.LibraryCallback;
|
||||
import org.springframework.boot.loader.tools.LibraryScope;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
/**
|
||||
|
|
@ -135,9 +135,8 @@ public class RepackagePluginFeatures implements PluginFeatures {
|
|||
private void addLibraryDependencies(final RepackageTask task) {
|
||||
try {
|
||||
task.getLibraries().doWithLibraries(new LibraryCallback() {
|
||||
@Override
|
||||
public void library(File file, LibraryScope scope) throws IOException {
|
||||
task.getInputs().file(file);
|
||||
public void library(Library library) throws IOException {
|
||||
task.getInputs().file(library.getFile());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,58 @@
|
|||
/*
|
||||
* 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.springframework.boot.loader.tools;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
/**
|
||||
* Encapsulates information about a single library that may be packed into the archive.
|
||||
*
|
||||
* @author Phillip Webb
|
||||
* @since 1.1.2
|
||||
* @see Libraries
|
||||
*/
|
||||
public class Library {
|
||||
|
||||
private final File file;
|
||||
|
||||
private final LibraryScope scope;
|
||||
|
||||
/**
|
||||
* Create a new {@link Library}.
|
||||
* @param file the source file
|
||||
* @param scope the scope of the library
|
||||
*/
|
||||
public Library(File file, LibraryScope scope) {
|
||||
this.file = file;
|
||||
this.scope = scope;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the library file
|
||||
*/
|
||||
public File getFile() {
|
||||
return this.file;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return the scope of the library
|
||||
*/
|
||||
public LibraryScope getScope() {
|
||||
return this.scope;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -28,10 +28,9 @@ public interface LibraryCallback {
|
|||
|
||||
/**
|
||||
* Callback to for a single library backed by a {@link File}.
|
||||
* @param file the library file
|
||||
* @param scope the scope of the library
|
||||
* @param library the library
|
||||
* @throws IOException
|
||||
*/
|
||||
void library(File file, LibraryScope scope) throws IOException;
|
||||
void library(Library library) throws IOException;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -141,10 +141,11 @@ public class Repackager {
|
|||
|
||||
libraries.doWithLibraries(new LibraryCallback() {
|
||||
@Override
|
||||
public void library(File file, LibraryScope scope) throws IOException {
|
||||
public void library(Library library) throws IOException {
|
||||
File file = library.getFile();
|
||||
if (isZip(file)) {
|
||||
String destination = Repackager.this.layout
|
||||
.getLibraryDestination(file.getName(), scope);
|
||||
.getLibraryDestination(file.getName(), library.getScope());
|
||||
if (destination != null) {
|
||||
writer.writeNestedLibrary(destination, file);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -266,8 +266,8 @@ public class RepackagerTests {
|
|||
repackager.repackage(new Libraries() {
|
||||
@Override
|
||||
public void doWithLibraries(LibraryCallback callback) throws IOException {
|
||||
callback.library(libJarFile, LibraryScope.COMPILE);
|
||||
callback.library(libNonJarFile, LibraryScope.COMPILE);
|
||||
callback.library(new Library(libJarFile, LibraryScope.COMPILE));
|
||||
callback.library(new Library(libNonJarFile, LibraryScope.COMPILE));
|
||||
}
|
||||
});
|
||||
assertThat(hasEntry(file, "lib/" + libJarFile.getName()), equalTo(true));
|
||||
|
|
@ -290,7 +290,7 @@ public class RepackagerTests {
|
|||
repackager.repackage(new Libraries() {
|
||||
@Override
|
||||
public void doWithLibraries(LibraryCallback callback) throws IOException {
|
||||
callback.library(libJarFile, scope);
|
||||
callback.library(new Library(libJarFile, scope));
|
||||
}
|
||||
});
|
||||
assertThat(hasEntry(file, "test/" + libJarFile.getName()), equalTo(true));
|
||||
|
|
@ -331,7 +331,7 @@ public class RepackagerTests {
|
|||
repackager.repackage(new Libraries() {
|
||||
@Override
|
||||
public void doWithLibraries(LibraryCallback callback) throws IOException {
|
||||
callback.library(nestedFile, LibraryScope.COMPILE);
|
||||
callback.library(new Library(nestedFile, LibraryScope.COMPILE));
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,7 @@ import java.util.Set;
|
|||
|
||||
import org.apache.maven.artifact.Artifact;
|
||||
import org.springframework.boot.loader.tools.Libraries;
|
||||
import org.springframework.boot.loader.tools.Library;
|
||||
import org.springframework.boot.loader.tools.LibraryCallback;
|
||||
import org.springframework.boot.loader.tools.LibraryScope;
|
||||
|
||||
|
|
@ -55,7 +56,7 @@ public class ArtifactsLibraries implements Libraries {
|
|||
for (Artifact artifact : this.artifacts) {
|
||||
LibraryScope scope = SCOPES.get(artifact.getScope());
|
||||
if (scope != null && artifact.getFile() != null) {
|
||||
callback.library(artifact.getFile(), scope);
|
||||
callback.library(new Library(artifact.getFile(), scope));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,11 +23,16 @@ import java.util.Set;
|
|||
import org.apache.maven.artifact.Artifact;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.mockito.ArgumentCaptor;
|
||||
import org.mockito.Captor;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.springframework.boot.loader.tools.Library;
|
||||
import org.springframework.boot.loader.tools.LibraryCallback;
|
||||
import org.springframework.boot.loader.tools.LibraryScope;
|
||||
|
||||
import static org.hamcrest.Matchers.equalTo;
|
||||
import static org.junit.Assert.assertThat;
|
||||
import static org.mockito.BDDMockito.given;
|
||||
import static org.mockito.Mockito.verify;
|
||||
|
||||
|
|
@ -36,7 +41,7 @@ import static org.mockito.Mockito.verify;
|
|||
*
|
||||
* @author Phillip Webb
|
||||
*/
|
||||
public class ArtifactsLibrariesTest {
|
||||
public class ArtifactsLibrariesTests {
|
||||
|
||||
@Mock
|
||||
private Artifact artifact;
|
||||
|
|
@ -50,6 +55,9 @@ public class ArtifactsLibrariesTest {
|
|||
@Mock
|
||||
private LibraryCallback callback;
|
||||
|
||||
@Captor
|
||||
private ArgumentCaptor<Library> libraryCaptor;
|
||||
|
||||
@Before
|
||||
public void setup() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
|
|
@ -63,6 +71,10 @@ public class ArtifactsLibrariesTest {
|
|||
given(this.artifact.getType()).willReturn("jar");
|
||||
given(this.artifact.getScope()).willReturn("compile");
|
||||
this.libs.doWithLibraries(this.callback);
|
||||
verify(this.callback).library(this.file, LibraryScope.COMPILE);
|
||||
verify(this.callback).library(this.libraryCaptor.capture());
|
||||
Library library = this.libraryCaptor.getValue();
|
||||
assertThat(library.getFile(), equalTo(this.file));
|
||||
assertThat(library.getScope(), equalTo(LibraryScope.COMPILE));
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue