Remove implicit layers support from the layer tools

Closes gh-20187
This commit is contained in:
Madhura Bhave
2020-02-18 16:23:25 -08:00
parent d8c309a310
commit aa09058d8c
7 changed files with 132 additions and 183 deletions

View File

@@ -1,83 +0,0 @@
/*
* Copyright 2012-2020 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
*
* https://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.jarmode.layertools;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.zip.ZipEntry;
/**
* {@link Layers} implementation that uses implicit rules to slice the application.
*
* @author Phillip Webb
*/
class ImplicitLayers implements Layers {
private static final String DEPENDENCIES_LAYER = "dependencies";
private static final String SNAPSHOT_DEPENDENCIES_LAYER = "snapshot-dependencies";
private static final String RESOURCES_LAYER = "resources";
private static final String APPLICATION_LAYER = "application";
private static final List<String> LAYERS;
static {
List<String> layers = new ArrayList<>();
layers.add(DEPENDENCIES_LAYER);
layers.add(SNAPSHOT_DEPENDENCIES_LAYER);
layers.add(RESOURCES_LAYER);
layers.add(APPLICATION_LAYER);
LAYERS = Collections.unmodifiableList(layers);
}
private static final String[] CLASS_LOCATIONS = { "", "BOOT-INF/classes/" };
private static final String[] RESOURCE_LOCATIONS = { "META-INF/resources/", "resources/", "static/", "public/" };
@Override
public Iterator<String> iterator() {
return LAYERS.iterator();
}
@Override
public String getLayer(ZipEntry entry) {
return getLayer(entry.getName());
}
String getLayer(String name) {
if (name.endsWith("SNAPSHOT.jar")) {
return SNAPSHOT_DEPENDENCIES_LAYER;
}
if (name.endsWith(".jar")) {
return DEPENDENCIES_LAYER;
}
if (!name.endsWith(".class")) {
for (String classLocation : CLASS_LOCATIONS) {
for (String resourceLocation : RESOURCE_LOCATIONS) {
if (name.startsWith(classLocation + resourceLocation)) {
return RESOURCES_LAYER;
}
}
}
}
return APPLICATION_LAYER;
}
}

View File

@@ -49,7 +49,10 @@ interface Layers extends Iterable<String> {
*/
static Layers get(Context context) {
IndexedLayers indexedLayers = IndexedLayers.get(context);
return (indexedLayers != null) ? indexedLayers : new ImplicitLayers();
if (indexedLayers == null) {
throw new IllegalStateException("Failed to load layers.idx which is required by layertools");
}
return indexedLayers;
}
}