start.jar uses shaded jetty-util classes
This commit is contained in:
parent
b9dbf7111d
commit
d5dab98546
|
@ -0,0 +1,83 @@
|
|||
<?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/maven-v4_0_0.xsd">
|
||||
<parent>
|
||||
<artifactId>jetty-project</artifactId>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<version>9.3.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>jetty-start</artifactId>
|
||||
<name>Jetty :: Start</name>
|
||||
<description>The start utility</description>
|
||||
<url>http://www.eclipse.org/jetty</url>
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<configuration>
|
||||
<archive>
|
||||
<manifest>
|
||||
<mainClass>org.eclipse.jetty.start.Main</mainClass>
|
||||
</manifest>
|
||||
</archive>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.codehaus.mojo</groupId>
|
||||
<artifactId>findbugs-maven-plugin</artifactId>
|
||||
<configuration>
|
||||
<onlyAnalyze>org.eclipse.jetty.start.*</onlyAnalyze>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<artifactId>maven-shade-plugin</artifactId>
|
||||
<version>2.4</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>shade</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
<configuration>
|
||||
<minimizeJar>true</minimizeJar>
|
||||
<artifactSet>
|
||||
<includes>
|
||||
<include>org.eclipse.jetty:jetty-util</include>
|
||||
</includes>
|
||||
</artifactSet>
|
||||
<relocations>
|
||||
<relocation>
|
||||
<pattern>org.eclipse.jetty.util</pattern>
|
||||
<shadedPattern>org.eclipse.jetty.start.util</shadedPattern>
|
||||
</relocation>
|
||||
</relocations>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty.toolchain</groupId>
|
||||
<artifactId>jetty-test-helper</artifactId>
|
||||
<version>2.9</version>
|
||||
<scope>test</scope>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<artifactId>junit</artifactId>
|
||||
<groupId>junit</groupId>
|
||||
</exclusion>
|
||||
<exclusion>
|
||||
<artifactId>hamcrest-library</artifactId>
|
||||
<groupId>org.hamcrest</groupId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<properties>
|
||||
<bundle-symbolic-name>${project.groupId}.start</bundle-symbolic-name>
|
||||
<start-jar-file-name>start.jar</start-jar-file-name>
|
||||
</properties>
|
||||
</project>
|
||||
|
|
@ -32,9 +32,41 @@
|
|||
<onlyAnalyze>org.eclipse.jetty.start.*</onlyAnalyze>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-shade-plugin</artifactId>
|
||||
<version>2.4</version>
|
||||
<configuration>
|
||||
<minimizeJar>true</minimizeJar>
|
||||
<artifactSet>
|
||||
<includes>
|
||||
<include>org.eclipse.jetty:jetty-util</include>
|
||||
</includes>
|
||||
</artifactSet>
|
||||
<relocations>
|
||||
<relocation>
|
||||
<pattern>org.eclipse.jetty.util</pattern>
|
||||
<shadedPattern>org.eclipse.jetty.start.util</shadedPattern>
|
||||
</relocation>
|
||||
</relocations>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<phase>package</phase>
|
||||
<goals>
|
||||
<goal>shade</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty</groupId>
|
||||
<artifactId>jetty-util</artifactId>
|
||||
<version>${project.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty.toolchain</groupId>
|
||||
<artifactId>jetty-test-helper</artifactId>
|
||||
|
|
|
@ -33,7 +33,7 @@ import java.util.function.Consumer;
|
|||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
import org.eclipse.jetty.start.util.TopologicalSort;
|
||||
import org.eclipse.jetty.util.TopologicalSort;
|
||||
|
||||
/**
|
||||
* Access for all modules declared, as well as what is enabled.
|
||||
|
|
|
@ -1,187 +0,0 @@
|
|||
//
|
||||
// ========================================================================
|
||||
// Copyright (c) 1995-2015 Mort Bay Consulting Pty. Ltd.
|
||||
// ------------------------------------------------------------------------
|
||||
// All rights reserved. This program and the accompanying materials
|
||||
// are made available under the terms of the Eclipse Public License v1.0
|
||||
// and Apache License v2.0 which accompanies this distribution.
|
||||
//
|
||||
// The Eclipse Public License is available at
|
||||
// http://www.eclipse.org/legal/epl-v10.html
|
||||
//
|
||||
// The Apache License v2.0 is available at
|
||||
// http://www.opensource.org/licenses/apache2.0.php
|
||||
//
|
||||
// You may elect to redistribute this code under either of these licenses.
|
||||
// ========================================================================
|
||||
//
|
||||
|
||||
package org.eclipse.jetty.start.util;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Comparator;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.SortedSet;
|
||||
import java.util.TreeSet;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Topological Sort a list or array.
|
||||
* <p>A Topological sort is used when you have a partial ordering expressed as
|
||||
* dependencies between elements (also often represented as edges in a directed
|
||||
* acyclic graph). A Topological sort should not be used when you have a total
|
||||
* ordering expressed as a {@link Comparator} over the items. The algorithm has
|
||||
* the additional characteristic that dependency sets are sorted by the original
|
||||
* list order so that order is preserved when possible.</p>
|
||||
* <p>
|
||||
* The sort algorithm works by recursively visiting every item, once and
|
||||
* only once. On each visit, the items dependencies are first visited and then the
|
||||
* item is added to the sorted list. Thus the algorithm ensures that dependency
|
||||
* items are always added before dependent items.</p>
|
||||
* <p>
|
||||
* THIS CLASS IS COPIED FROM org.eclipse.jetty.util.TopologicalSort
|
||||
* @param <T> The type to be sorted. It must be able to be added to a {@link HashSet}
|
||||
*/
|
||||
public class TopologicalSort<T>
|
||||
{
|
||||
private final Map<T,Set<T>> _dependencies = new HashMap<>();
|
||||
|
||||
/**
|
||||
* Add a dependency to be considered in the sort.
|
||||
* @param dependent The dependent item will be sorted after all its dependencies
|
||||
* @param dependency The dependency item, will be sorted before its dependent item
|
||||
*/
|
||||
public void addDependency(T dependent, T dependency)
|
||||
{
|
||||
Set<T> set = _dependencies.get(dependent);
|
||||
if (set==null)
|
||||
{
|
||||
set=new HashSet<>();
|
||||
_dependencies.put(dependent,set);
|
||||
}
|
||||
set.add(dependency);
|
||||
}
|
||||
|
||||
/** Sort the passed array according to dependencies previously set with
|
||||
* {@link #addDependency(Object, Object)}. Where possible, ordering will be
|
||||
* preserved if no dependency
|
||||
* @param array The array to be sorted.
|
||||
*/
|
||||
public void sort(T[] array)
|
||||
{
|
||||
List<T> sorted = new ArrayList<>();
|
||||
Set<T> visited = new HashSet<>();
|
||||
Comparator<T> comparator = new InitialOrderComparitor<>(array);
|
||||
|
||||
// Visit all items in the array
|
||||
for (T t : array)
|
||||
visit(t,visited,sorted,comparator);
|
||||
|
||||
sorted.toArray(array);
|
||||
}
|
||||
|
||||
/** Sort the passed list according to dependencies previously set with
|
||||
* {@link #addDependency(Object, Object)}. Where possible, ordering will be
|
||||
* preserved if no dependency
|
||||
* @param list The list to be sorted.
|
||||
*/
|
||||
public void sort(Collection<T> list)
|
||||
{
|
||||
List<T> sorted = new ArrayList<>();
|
||||
Set<T> visited = new HashSet<>();
|
||||
Comparator<T> comparator = new InitialOrderComparitor<>(list);
|
||||
|
||||
// Visit all items in the list
|
||||
for (T t : list)
|
||||
visit(t,visited,sorted,comparator);
|
||||
|
||||
list.clear();
|
||||
list.addAll(sorted);
|
||||
}
|
||||
|
||||
/** Visit an item to be sorted.
|
||||
* @param item The item to be visited
|
||||
* @param visited The Set of items already visited
|
||||
* @param sorted The list to sort items into
|
||||
* @param comparator A comparator used to sort dependencies.
|
||||
*/
|
||||
private void visit(T item, Set<T> visited, List<T> sorted,Comparator<T> comparator)
|
||||
{
|
||||
// If the item has not been visited
|
||||
if(!visited.contains(item))
|
||||
{
|
||||
// We are visiting it now, so add it to the visited set
|
||||
visited.add(item);
|
||||
|
||||
// Lookup the items dependencies
|
||||
Set<T> dependencies = _dependencies.get(item);
|
||||
if (dependencies!=null)
|
||||
{
|
||||
// Sort the dependencies
|
||||
SortedSet<T> ordered_deps = new TreeSet<>(comparator);
|
||||
ordered_deps.addAll(dependencies);
|
||||
|
||||
// recursively visit each dependency
|
||||
for (T d:ordered_deps)
|
||||
visit(d,visited,sorted,comparator);
|
||||
}
|
||||
|
||||
// Now that we have visited all our dependencies, they and their
|
||||
// dependencies will have been added to the sorted list. So we can
|
||||
// now add the current item and it will be after its dependencies
|
||||
sorted.add(item);
|
||||
}
|
||||
else if (!sorted.contains(item))
|
||||
// If we have already visited an item, but it has not yet been put in the
|
||||
// sorted list, then we must be in a cycle!
|
||||
throw new IllegalStateException("cyclic at "+item);
|
||||
}
|
||||
|
||||
|
||||
/** A comparator that is used to sort dependencies in the order they
|
||||
* were in the original list. This ensures that dependencies are visited
|
||||
* in the original order and no needless reordering takes place.
|
||||
* @param <T>
|
||||
*/
|
||||
private static class InitialOrderComparitor<T> implements Comparator<T>
|
||||
{
|
||||
private final Map<T,Integer> _indexes = new HashMap<>();
|
||||
InitialOrderComparitor(T[] initial)
|
||||
{
|
||||
int i=0;
|
||||
for (T t : initial)
|
||||
_indexes.put(t,i++);
|
||||
}
|
||||
|
||||
InitialOrderComparitor(Collection<T> initial)
|
||||
{
|
||||
int i=0;
|
||||
for (T t : initial)
|
||||
_indexes.put(t,i++);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int compare(T o1, T o2)
|
||||
{
|
||||
Integer i1=_indexes.get(o1);
|
||||
Integer i2=_indexes.get(o2);
|
||||
if (i1==null || i2==null || i1.equals(o2))
|
||||
return 0;
|
||||
if (i1<i2)
|
||||
return -1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString()
|
||||
{
|
||||
return "TopologicalSort "+_dependencies;
|
||||
}
|
||||
}
|
|
@ -165,6 +165,8 @@ public class PropertyPassingTest
|
|||
cp.append(MavenTestingUtils.getProjectDir("target/classes"));
|
||||
cp.append(pathSep);
|
||||
cp.append(MavenTestingUtils.getProjectDir("target/test-classes"));
|
||||
cp.append(pathSep);
|
||||
cp.append(MavenTestingUtils.getProjectDir("../jetty-util/target/classes")); // TODO horrible hack!
|
||||
return cp.toString();
|
||||
}
|
||||
|
||||
|
|
|
@ -29,9 +29,8 @@ import java.util.SortedSet;
|
|||
import java.util.TreeSet;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Topological Sort a list or array.
|
||||
* Topological sort a list or array.
|
||||
* <p>A Topological sort is used when you have a partial ordering expressed as
|
||||
* dependencies between elements (also often represented as edges in a directed
|
||||
* acyclic graph). A Topological sort should not be used when you have a total
|
||||
|
@ -75,7 +74,7 @@ public class TopologicalSort<T>
|
|||
{
|
||||
List<T> sorted = new ArrayList<>();
|
||||
Set<T> visited = new HashSet<>();
|
||||
Comparator<T> comparator = new InitialOrderComparitor<>(array);
|
||||
Comparator<T> comparator = new InitialOrderComparator<>(array);
|
||||
|
||||
// Visit all items in the array
|
||||
for (T t : array)
|
||||
|
@ -93,7 +92,7 @@ public class TopologicalSort<T>
|
|||
{
|
||||
List<T> sorted = new ArrayList<>();
|
||||
Set<T> visited = new HashSet<>();
|
||||
Comparator<T> comparator = new InitialOrderComparitor<>(list);
|
||||
Comparator<T> comparator = new InitialOrderComparator<>(list);
|
||||
|
||||
// Visit all items in the list
|
||||
for (T t : list)
|
||||
|
@ -147,17 +146,17 @@ public class TopologicalSort<T>
|
|||
* in the original order and no needless reordering takes place.
|
||||
* @param <T>
|
||||
*/
|
||||
private static class InitialOrderComparitor<T> implements Comparator<T>
|
||||
private static class InitialOrderComparator<T> implements Comparator<T>
|
||||
{
|
||||
private final Map<T,Integer> _indexes = new HashMap<>();
|
||||
InitialOrderComparitor(T[] initial)
|
||||
InitialOrderComparator(T[] initial)
|
||||
{
|
||||
int i=0;
|
||||
for (T t : initial)
|
||||
_indexes.put(t,i++);
|
||||
}
|
||||
|
||||
InitialOrderComparitor(Collection<T> initial)
|
||||
InitialOrderComparator(Collection<T> initial)
|
||||
{
|
||||
int i=0;
|
||||
for (T t : initial)
|
||||
|
|
Loading…
Reference in New Issue