Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'jetty-start')
-rw-r--r--jetty-start/pom.xml9
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/BaseBuilder.java375
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/BaseHome.java1
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/FS.java5
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/FileInitializer.java43
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/Licensing.java104
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/Main.java460
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/Module.java234
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/ModuleGraphWriter.java18
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/Modules.java535
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/README.TXT48
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/StartArgs.java57
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/UsageException.java5
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/Utils.java122
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/builders/StartDirBuilder.java98
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/builders/StartIniBuilder.java142
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/config/CommandLineConfigSource.java27
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/fileinits/MavenLocalRepoFileInitializer.java194
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/fileinits/TestFileInitializer.java44
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/fileinits/UriFileInitializer.java137
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/graph/AllPredicate.java31
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/graph/AndPredicate.java46
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/graph/AnySelectionPredicate.java28
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/graph/Graph.java499
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/graph/GraphException.java36
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/graph/HowPredicate.java45
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/graph/HowSetPredicate.java71
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/graph/HowUniquePredicate.java63
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/graph/NamePredicate.java35
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/graph/Node.java178
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/graph/NodeDepthComparator.java43
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/graph/OnlyTransitivePredicate.java41
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/graph/Predicate.java27
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/graph/RegexNamePredicate.java40
-rw-r--r--jetty-start/src/main/java/org/eclipse/jetty/start/graph/Selection.java111
-rw-r--r--jetty-start/src/test/java/org/eclipse/jetty/start/BaseHomeTest.java6
-rw-r--r--jetty-start/src/test/java/org/eclipse/jetty/start/DistTest.java187
-rw-r--r--jetty-start/src/test/java/org/eclipse/jetty/start/IncludeJettyDirTest.java24
-rw-r--r--jetty-start/src/test/java/org/eclipse/jetty/start/LicensingTest.java (renamed from jetty-start/src/test/java/org/eclipse/jetty/start/LicenseTest.java)30
-rw-r--r--jetty-start/src/test/java/org/eclipse/jetty/start/MainTest.java15
-rw-r--r--jetty-start/src/test/java/org/eclipse/jetty/start/ModuleGraphWriterTest.java2
-rw-r--r--jetty-start/src/test/java/org/eclipse/jetty/start/ModuleTest.java11
-rw-r--r--jetty-start/src/test/java/org/eclipse/jetty/start/ModulesTest.java335
-rw-r--r--jetty-start/src/test/java/org/eclipse/jetty/start/PathFinderTest.java15
-rw-r--r--jetty-start/src/test/java/org/eclipse/jetty/start/StartMatchers.java104
-rw-r--r--jetty-start/src/test/java/org/eclipse/jetty/start/TestBadUseCases.java83
-rw-r--r--jetty-start/src/test/java/org/eclipse/jetty/start/TestUseCases.java134
-rw-r--r--jetty-start/src/test/java/org/eclipse/jetty/start/config/ConfigSourcesTest.java24
-rw-r--r--jetty-start/src/test/java/org/eclipse/jetty/start/fileinits/MavenLocalRepoFileInitializerTest.java151
-rw-r--r--jetty-start/src/test/java/org/eclipse/jetty/start/graph/NodeTest.java75
-rw-r--r--jetty-start/src/test/java/org/eclipse/jetty/start/util/CorrectMavenCentralRefs.java256
-rw-r--r--jetty-start/src/test/java/org/eclipse/jetty/start/util/RebuildTestResources.java (renamed from jetty-start/src/test/java/org/eclipse/jetty/start/RebuildTestResources.java)9
-rw-r--r--jetty-start/src/test/resources/assert-home-with-http2.txt (renamed from jetty-start/src/test/resources/assert-home-with-spdy.txt)81
-rw-r--r--jetty-start/src/test/resources/assert-home-with-jvm.txt66
-rw-r--r--jetty-start/src/test/resources/assert-home.txt44
-rw-r--r--jetty-start/src/test/resources/dist-home/etc/jetty-alpn.xml (renamed from jetty-start/src/test/resources/dist-home/etc/jetty-spdy-proxy.xml)0
-rw-r--r--jetty-start/src/test/resources/dist-home/etc/jetty-gzip.xml (renamed from jetty-start/src/test/resources/dist-home/etc/jetty-spdy.xml)0
-rw-r--r--jetty-start/src/test/resources/dist-home/etc/jetty-http2.xml (renamed from jetty-start/src/test/resources/dist-home/etc/protonego-alpn.xml)0
-rw-r--r--jetty-start/src/test/resources/dist-home/etc/jetty-http2c.xml (renamed from jetty-start/src/test/resources/dist-home/etc/protonego-npn.xml)0
-rw-r--r--jetty-start/src/test/resources/dist-home/etc/webdefault.xml534
-rw-r--r--jetty-start/src/test/resources/dist-home/lib/http2/http2-common-TEST.jar (renamed from jetty-start/src/test/resources/dist-home/lib/jetty-alpn-client-TEST.jar)0
-rw-r--r--jetty-start/src/test/resources/dist-home/lib/http2/http2-hpack-TEST.jar (renamed from jetty-start/src/test/resources/dist-home/lib/jsp/javax.el-3.0.0.jar)0
-rw-r--r--jetty-start/src/test/resources/dist-home/lib/http2/http2-server-TEST.jar (renamed from jetty-start/src/test/resources/dist-home/lib/jsp/javax.servlet.jsp-2.3.2.jar)0
-rw-r--r--jetty-start/src/test/resources/dist-home/lib/jsp/javax.servlet.jsp.jstl-1.2.2.jar0
-rw-r--r--jetty-start/src/test/resources/dist-home/lib/jsp/jetty-jsp-jdt-2.3.3.jar0
-rw-r--r--jetty-start/src/test/resources/dist-home/lib/jsp/org.eclipse.jdt.core-3.8.2.v20130121.jar0
-rw-r--r--jetty-start/src/test/resources/dist-home/lib/jsp/org.eclipse.jetty.orbit.javax.servlet.jsp.jstl-1.2.0.v201105211821.jar0
-rw-r--r--jetty-start/src/test/resources/dist-home/lib/spdy/spdy-client-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/dist-home/lib/spdy/spdy-core-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/dist-home/lib/spdy/spdy-http-common-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/dist-home/lib/spdy/spdy-http-server-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/dist-home/lib/spdy/spdy-server-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_40.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_45.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_51.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_55.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_60.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_65.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_67.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_71.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_72.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_75.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_76.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0_05.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0_11.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0_20.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0_25.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0_31.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0_40.mod (renamed from jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.8.0_40.mod)0
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/alpn.mod (renamed from jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn.mod)19
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/apache-jsp.mod (renamed from jetty-start/src/test/resources/usecases/home/modules/jsp-impl/apache-jsp.mod)2
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/apache-jstl.mod (renamed from jetty-start/src/test/resources/dist-home/modules/jsp-impl/apache-jstl.mod)2
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/cdi.mod2
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/debug.mod3
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/gzip.mod18
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/http2.mod18
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/http2c.mod22
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/https.mod9
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/jamon.mod4
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/jminix.mod22
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/jolokia.mod2
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/jsp-impl/apache-jsp.mod10
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/jsp-impl/glassfish-jsp.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/jsp-impl/glassfish-jstl.mod6
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/jsp.mod14
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/jstl.mod10
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_40.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_45.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_51.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_55.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_60.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_65.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_67.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_71.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_72.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_75.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_76.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.8.0.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.8.0_05.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.8.0_11.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.8.0_20.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.8.0_25.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.8.0_31.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_04.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_05.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_06.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_07.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_09.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_10.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_11.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_13.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_15.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_17.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_21.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_25.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_40.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_45.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_51.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_55.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_60.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_65.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_67.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_71.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_72.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_75.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_76.mod8
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn.mod37
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/protonego.mod24
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/server.mod4
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/spdy.mod26
-rw-r--r--jetty-start/src/test/resources/dist-home/modules/ssl.mod7
-rw-r--r--jetty-start/src/test/resources/dist-home/start.ini133
-rw-r--r--jetty-start/src/test/resources/usecases/agent-properties.assert.txt (renamed from jetty-start/src/test/resources/usecases/assert-props.agent.txt)17
-rw-r--r--jetty-start/src/test/resources/usecases/agent-properties/lib/agent-jdk-1.5.jar (renamed from jetty-start/src/test/resources/usecases/base.props.agent/lib/agent-jdk-1.5.jar)0
-rw-r--r--jetty-start/src/test/resources/usecases/agent-properties/lib/agent-jdk-1.6.jar (renamed from jetty-start/src/test/resources/usecases/base.props.agent/lib/agent-jdk-1.6.jar)0
-rw-r--r--jetty-start/src/test/resources/usecases/agent-properties/lib/agent-jdk-1.7.jar (renamed from jetty-start/src/test/resources/usecases/base.props.agent/lib/agent-jdk-1.7.jar)0
-rw-r--r--jetty-start/src/test/resources/usecases/agent-properties/modules/agent.mod (renamed from jetty-start/src/test/resources/usecases/base.props.agent/modules/agent.mod)0
-rw-r--r--jetty-start/src/test/resources/usecases/agent-properties/start.ini (renamed from jetty-start/src/test/resources/usecases/base.props.agent/start.ini)0
-rw-r--r--jetty-start/src/test/resources/usecases/assert-jmx.txt18
-rw-r--r--jetty-start/src/test/resources/usecases/assert-jsp-apache.txt26
-rw-r--r--jetty-start/src/test/resources/usecases/assert-jsp-glassfish.txt28
-rw-r--r--jetty-start/src/test/resources/usecases/barebones.assert.txt (renamed from jetty-start/src/test/resources/usecases/assert-barebones.txt)15
-rw-r--r--jetty-start/src/test/resources/usecases/barebones/start.ini (renamed from jetty-start/src/test/resources/usecases/base.barebones/start.ini)0
-rw-r--r--jetty-start/src/test/resources/usecases/base.enable.spdy.bad.npn.version/start.ini12
-rw-r--r--jetty-start/src/test/resources/usecases/base.enable.spdy/start.ini12
-rw-r--r--jetty-start/src/test/resources/usecases/base.with.jsp.apache/start.ini7
-rw-r--r--jetty-start/src/test/resources/usecases/base.with.jsp.bad/start.ini7
-rw-r--r--jetty-start/src/test/resources/usecases/base.with.jsp.glassfish/start.ini7
-rw-r--r--jetty-start/src/test/resources/usecases/basic-properties.assert.txt (renamed from jetty-start/src/test/resources/usecases/assert-props.basic.txt)15
-rw-r--r--jetty-start/src/test/resources/usecases/basic-properties/start.ini (renamed from jetty-start/src/test/resources/usecases/base.props.basic/start.ini)0
-rw-r--r--jetty-start/src/test/resources/usecases/database.assert.txt (renamed from jetty-start/src/test/resources/usecases/assert-with-db.txt)24
-rw-r--r--jetty-start/src/test/resources/usecases/database/etc/jetty-db.xml (renamed from jetty-start/src/test/resources/usecases/base.with.db/etc/jetty-db.xml)0
-rw-r--r--jetty-start/src/test/resources/usecases/database/lib/db/bonecp.jar (renamed from jetty-start/src/test/resources/usecases/base.with.db/lib/db/bonecp.jar)0
-rw-r--r--jetty-start/src/test/resources/usecases/database/lib/db/mysql-driver.jar (renamed from jetty-start/src/test/resources/usecases/base.with.db/lib/db/mysql-driver.jar)0
-rw-r--r--jetty-start/src/test/resources/usecases/database/modules/db.mod (renamed from jetty-start/src/test/resources/usecases/base.with.db/modules/db.mod)0
-rw-r--r--jetty-start/src/test/resources/usecases/database/start.ini (renamed from jetty-start/src/test/resources/usecases/base.with.db/start.ini)0
-rw-r--r--jetty-start/src/test/resources/usecases/deep-ext.assert.txt (renamed from jetty-start/src/test/resources/usecases/assert-with.ext.txt)15
-rw-r--r--jetty-start/src/test/resources/usecases/deep-ext/lib/ext/agent.jar (renamed from jetty-start/src/test/resources/usecases/base.with.ext/lib/ext/agent.jar)0
-rw-r--r--jetty-start/src/test/resources/usecases/deep-ext/lib/ext/jdbc/mariadb-jdbc.jar (renamed from jetty-start/src/test/resources/usecases/base.with.ext/lib/ext/jdbc/mariadb-jdbc.jar)0
-rw-r--r--jetty-start/src/test/resources/usecases/deep-ext/lib/ext/logging/jul-to-slf4j.jar (renamed from jetty-start/src/test/resources/usecases/base.logging/lib/logging/jul-to-slf4j.jar)0
-rw-r--r--jetty-start/src/test/resources/usecases/deep-ext/lib/ext/logging/logback-classic.jar (renamed from jetty-start/src/test/resources/usecases/base.logging/lib/logging/logback-classic.jar)0
-rw-r--r--jetty-start/src/test/resources/usecases/deep-ext/lib/ext/logging/logback-core.jar (renamed from jetty-start/src/test/resources/usecases/base.logging/lib/logging/logback-core.jar)0
-rw-r--r--jetty-start/src/test/resources/usecases/deep-ext/lib/ext/logging/slf4j-api.jar (renamed from jetty-start/src/test/resources/usecases/base.logging/lib/logging/slf4j-api.jar)0
-rw-r--r--jetty-start/src/test/resources/usecases/deep-ext/lib/jetty-util-alt.jar (renamed from jetty-start/src/test/resources/usecases/base.with.ext/lib/jetty-util-alt.jar)0
-rw-r--r--jetty-start/src/test/resources/usecases/deep-ext/start.ini (renamed from jetty-start/src/test/resources/usecases/base.with.ext/start.ini)0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/README.spnego0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/jdbcRealm.properties0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/jetty-annotations.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/jetty-contexts.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/jetty-debug.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/jetty-demo.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/jetty-deploy.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/jetty-http.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/jetty-https.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/jetty-ipaccess.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/jetty-jaas.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/jetty-jmx.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/jetty-logging.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/jetty-lowresources.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/jetty-monitor.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/jetty-plus.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/jetty-proxy.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/jetty-requestlog.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/jetty-rewrite.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/jetty-setuid.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/jetty-spdy-proxy.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/jetty-spdy.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/jetty-ssl.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/jetty-started.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/jetty-stats.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/jetty-testrealm.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/jetty-webapps.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/jetty-websockets.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/jetty-xinetd.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/jetty.conf0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/jetty.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/keystore0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/krb5.ini0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/protonego-alpn.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/protonego-npn.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/realm.properties0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/spnego.conf0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/spnego.properties0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/test-realm.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/etc/webdefault.xml0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/annotations/javax.annotation-api-1.2.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/annotations/org.objectweb.asm-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/apache-jsp/javax.servlet.jsp.javax.servlet.jsp-api-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/apache-jsp/org.eclipse.jetty.apache-jsp-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/apache-jsp/org.eclipse.jetty.orbit.org.eclipse.jdt.core-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/apache-jsp/org.mortbay.jasper.apache-el-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/apache-jsp/org.mortbay.jasper.apache-jsp-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/apache-jstl/org.apache.taglibs.taglibs-standard-impl-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/apache-jstl/org.apache.taglibs.taglibs-standard-spec-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/ext/.nodelete0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/jetty-annotations-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/jetty-client-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/jetty-continuation-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/jetty-deploy-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/jetty-http-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/jetty-io-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/jetty-jaas-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/jetty-jmx-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/jetty-jndi-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/jetty-jsp-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/jetty-plus-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/jetty-proxy-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/jetty-rewrite-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/jetty-schemas-3.1.RC0.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/jetty-schemas-3.1.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/jetty-security-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/jetty-server-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/jetty-servlet-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/jetty-servlets-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/jetty-util-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/jetty-webapp-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/jetty-xml-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/jndi/javax.activation-1.1.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/jndi/javax.transaction-api-1.2.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/jsp/javax.el-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/jsp/javax.servlet.jsp-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/jsp/javax.servlet.jsp-api-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/jsp/javax.servlet.jsp.jstl-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/jsp/jetty-jsp-jdt-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/jsp/org.eclipse.jdt.core-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/jsp/org.eclipse.jetty.orbit.javax.servlet.jsp.jstl-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/monitor/jetty-monitor-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/servlet-api-3.1.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/setuid/jetty-setuid-java-1.0.1.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/setuid/libsetuid-linux.so0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/setuid/libsetuid-osx.so0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/spdy/spdy-client-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/spdy/spdy-core-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/spdy/spdy-http-common-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/spdy/spdy-http-server-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/spdy/spdy-server-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/websocket/javax-websocket-client-impl-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/websocket/javax-websocket-server-impl-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/websocket/javax.websocket-api-1.0.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/websocket/websocket-api-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/websocket/websocket-client-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/websocket/websocket-common-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/websocket/websocket-server-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/lib/websocket/websocket-servlet-TEST.jar0
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/annotations.mod17
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/base.mod11
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/client.mod7
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/debug.mod9
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/deploy.mod14
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/ext.mod10
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/http.mod9
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/https.mod10
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/ipaccess.mod9
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/jaas.mod14
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/jmx.mod11
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/jndi.mod11
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/jsp-impl/glassfish-jsp.mod8
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/jsp.mod20
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/logging.mod31
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/lowresources.mod9
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/monitor.mod13
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/plus.mod15
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn-1.7.0_40.mod8
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn-1.7.0_45.mod8
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn-1.7.0_51.mod8
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn-1.7.0_55.mod8
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn-1.7.0_60.mod8
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn-1.8.0.mod8
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn-1.8.0_05.mod8
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn.mod36
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_04.mod8
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_05.mod8
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_06.mod8
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_07.mod8
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_09.mod8
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_10.mod8
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_11.mod8
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_13.mod8
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_15.mod8
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_17.mod8
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_21.mod8
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_25.mod8
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_40.mod8
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_45.mod8
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_51.mod8
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_55.mod8
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_60.mod8
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn.mod31
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/protonego.mod15
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/proxy.mod14
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/requestlog.mod9
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/resources.mod10
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/rewrite.mod13
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/security.mod9
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/server.mod21
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/servlet.mod9
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/spdy.mod26
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/ssl.mod35
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/stats.mod9
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/webapp.mod9
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/websocket.mod17
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/xinetd.mod9
-rw-r--r--jetty-start/src/test/resources/usecases/home/modules/xml.mod10
-rw-r--r--jetty-start/src/test/resources/usecases/home/resources/.nodelete0
-rw-r--r--jetty-start/src/test/resources/usecases/home/start.ini2
-rw-r--r--jetty-start/src/test/resources/usecases/http2.assert.txt (renamed from jetty-start/src/test/resources/usecases/assert-enable-spdy.txt)38
-rw-r--r--jetty-start/src/test/resources/usecases/http2/start.ini (renamed from jetty-start/src/test/resources/usecases/base.missing.npn.version/start.ini)2
-rw-r--r--jetty-start/src/test/resources/usecases/include-jetty-dir-logging.assert.txt (renamed from jetty-start/src/test/resources/usecases/assert-include-jetty-dir-logging.txt)19
-rw-r--r--jetty-start/src/test/resources/usecases/include-jetty-dir-logging/resources/some.properties (renamed from jetty-start/src/test/resources/dist-home/lib/jsp/javax.servlet.jsp-api-2.3.1.jar)0
-rw-r--r--jetty-start/src/test/resources/usecases/include-jetty-dir-logging/start.ini (renamed from jetty-start/src/test/resources/usecases/base.with.include.jetty.dirs/start.ini)1
-rw-r--r--jetty-start/src/test/resources/usecases/jmx.assert.txt (renamed from jetty-start/src/test/resources/usecases/assert-missing-npn-version.txt)27
-rw-r--r--jetty-start/src/test/resources/usecases/jmx/start.ini (renamed from jetty-start/src/test/resources/usecases/base.jmx/start.ini)0
-rw-r--r--jetty-start/src/test/resources/usecases/jsp.assert.txt49
-rw-r--r--jetty-start/src/test/resources/usecases/jsp/start.ini (renamed from jetty-start/src/test/resources/usecases/base.with.jsp.default/start.ini)0
-rw-r--r--jetty-start/src/test/resources/usecases/logging.assert.txt (renamed from jetty-start/src/test/resources/usecases/assert-logging.txt)16
-rw-r--r--jetty-start/src/test/resources/usecases/logging/lib/logging/jul-to-slf4j.jar (renamed from jetty-start/src/test/resources/usecases/base.with.ext/lib/ext/logging/jul-to-slf4j.jar)0
-rw-r--r--jetty-start/src/test/resources/usecases/logging/lib/logging/logback-classic.jar (renamed from jetty-start/src/test/resources/usecases/base.with.ext/lib/ext/logging/logback-classic.jar)0
-rw-r--r--jetty-start/src/test/resources/usecases/logging/lib/logging/logback-core.jar (renamed from jetty-start/src/test/resources/usecases/base.with.ext/lib/ext/logging/logback-core.jar)0
-rw-r--r--jetty-start/src/test/resources/usecases/logging/lib/logging/slf4j-api.jar (renamed from jetty-start/src/test/resources/usecases/base.with.ext/lib/ext/logging/slf4j-api.jar)0
-rw-r--r--jetty-start/src/test/resources/usecases/logging/modules/logging.mod (renamed from jetty-start/src/test/resources/usecases/base.logging/modules/logging.mod)0
-rw-r--r--jetty-start/src/test/resources/usecases/logging/resources/jetty-logging.properties (renamed from jetty-start/src/test/resources/usecases/base.logging/resources/jetty-logging.properties)0
-rw-r--r--jetty-start/src/test/resources/usecases/logging/resources/logback.xml (renamed from jetty-start/src/test/resources/usecases/base.logging/resources/logback.xml)0
-rw-r--r--jetty-start/src/test/resources/usecases/logging/start.ini (renamed from jetty-start/src/test/resources/usecases/base.logging/start.ini)0
364 files changed, 5192 insertions, 2863 deletions
diff --git a/jetty-start/pom.xml b/jetty-start/pom.xml
index 1f63d85e4d..a69db463ea 100644
--- a/jetty-start/pom.xml
+++ b/jetty-start/pom.xml
@@ -2,13 +2,17 @@
<parent>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-project</artifactId>
- <version>9.2.11-SNAPSHOT</version>
+ <version>9.3.0-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>
+ <properties>
+ <bundle-symbolic-name>${project.groupId}.start</bundle-symbolic-name>
+ <start-jar-file-name>start.jar</start-jar-file-name>
+ </properties>
<build>
<plugins>
<plugin>
@@ -30,9 +34,6 @@
</plugin>
</plugins>
</build>
- <properties>
- <start-jar-file-name>start.jar</start-jar-file-name>
- </properties>
<dependencies>
<dependency>
<groupId>org.eclipse.jetty.toolchain</groupId>
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/BaseBuilder.java b/jetty-start/src/main/java/org/eclipse/jetty/start/BaseBuilder.java
new file mode 100644
index 0000000000..440b9f4867
--- /dev/null
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/BaseBuilder.java
@@ -0,0 +1,375 @@
+//
+// ========================================================================
+// 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;
+
+import java.io.IOException;
+import java.net.URI;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jetty.start.builders.StartDirBuilder;
+import org.eclipse.jetty.start.builders.StartIniBuilder;
+import org.eclipse.jetty.start.fileinits.MavenLocalRepoFileInitializer;
+import org.eclipse.jetty.start.fileinits.TestFileInitializer;
+import org.eclipse.jetty.start.fileinits.UriFileInitializer;
+import org.eclipse.jetty.start.graph.HowSetPredicate;
+import org.eclipse.jetty.start.graph.HowUniquePredicate;
+import org.eclipse.jetty.start.graph.Predicate;
+import org.eclipse.jetty.start.graph.Selection;
+
+/**
+ * Build a start configuration in <code>${jetty.base}</code>, including
+ * ini files, directories, and libs. Also handles License management.
+ */
+public class BaseBuilder
+{
+ public static interface Config
+ {
+ /**
+ * Add a module to the start environment in <code>${jetty.base}</code>
+ *
+ * @param module
+ * the module to add
+ * @return true if module was added, false if module was not added
+ * (because that module already exists)
+ * @throws IOException
+ */
+ public boolean addModule(Module module) throws IOException;
+ }
+
+ private static final String EXITING_LICENSE_NOT_ACKNOWLEDGED = "Exiting: license not acknowledged!";
+
+ private final BaseHome baseHome;
+ private final List<FileInitializer> fileInitializers;
+ private final StartArgs startArgs;
+
+ public BaseBuilder(BaseHome baseHome, StartArgs args)
+ {
+ this.baseHome = baseHome;
+ this.startArgs = args;
+ this.fileInitializers = new ArrayList<>();
+
+ // Establish FileInitializers
+ if (args.isTestingModeEnabled())
+ {
+ // No downloads performed
+ fileInitializers.add(new TestFileInitializer());
+ }
+ else if (args.isDownload())
+ {
+ // Downloads are allowed to be performed
+ // Setup Maven Local Repo
+ Path localRepoDir = args.getMavenLocalRepoDir();
+ if (localRepoDir != null)
+ {
+ // Use provided local repo directory
+ fileInitializers.add(new MavenLocalRepoFileInitializer(baseHome,localRepoDir));
+ }
+ else
+ {
+ // No no local repo directory (direct downloads)
+ fileInitializers.add(new MavenLocalRepoFileInitializer(baseHome));
+ }
+
+ // Normal URL downloads
+ fileInitializers.add(new UriFileInitializer(baseHome));
+ }
+ }
+
+ private void ackLicenses() throws IOException
+ {
+ if (startArgs.isLicenseCheckRequired())
+ {
+ if (startArgs.isApproveAllLicenses())
+ {
+ StartLog.info("All Licenses Approved via Command Line Option");
+ }
+ else
+ {
+ Licensing licensing = new Licensing();
+ for (Module module : startArgs.getAllModules().getSelected())
+ {
+ if (!module.hasFiles(baseHome))
+ {
+ licensing.addModule(module);
+ }
+ }
+
+ if (licensing.hasLicenses())
+ {
+ StartLog.debug("Requesting License Acknowledgement");
+ if (!licensing.acknowledgeLicenses())
+ {
+ StartLog.warn(EXITING_LICENSE_NOT_ACKNOWLEDGED);
+ System.exit(1);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * Build out the Base directory (if needed)
+ *
+ * @return true if base directory was changed, false if left unchanged.
+ * @throws IOException
+ */
+ public boolean build() throws IOException
+ {
+ Modules modules = startArgs.getAllModules();
+ boolean dirty = false;
+
+ String dirSource = "<add-to-startd>";
+ String iniSource = "<add-to-start-ini>";
+ Selection startDirSelection = new Selection(dirSource);
+ Selection startIniSelection = new Selection(iniSource);
+
+ List<String> startDNames = new ArrayList<>();
+ startDNames.addAll(startArgs.getAddToStartdIni());
+ List<String> startIniNames = new ArrayList<>();
+ startIniNames.addAll(startArgs.getAddToStartIni());
+
+ int count = 0;
+ count += modules.selectNodes(startDNames,startDirSelection);
+ count += modules.selectNodes(startIniNames,startIniSelection);
+
+ // look for ambiguous declaration found in both places
+ Predicate ambiguousPredicate = new HowSetPredicate(dirSource,iniSource);
+ List<Module> ambiguous = modules.getMatching(ambiguousPredicate);
+
+ if (ambiguous.size() > 0)
+ {
+ StringBuilder err = new StringBuilder();
+ err.append("Unable to add ");
+ err.append(ambiguous.size());
+ err.append(" module");
+ if (ambiguous.size() > 1)
+ {
+ err.append('s');
+ }
+ err.append(" (found declared via both --add-to-start and --add-to-startd): [");
+ for (int i = 0; i < ambiguous.size(); i++)
+ {
+ if (i > 0)
+ {
+ err.append(", ");
+ }
+ err.append(ambiguous.get(i).getName());
+ }
+ err.append(']');
+ throw new RuntimeException(err.toString());
+ }
+
+ StartLog.debug("Adding %s new module(s)",count);
+
+ // Acknowledge Licenses
+ ackLicenses();
+
+ // Collect specific modules to enable
+ // Should match 'how', with no other selections.explicit
+ Predicate startDMatcher = new HowUniquePredicate(dirSource);
+ Predicate startIniMatcher = new HowUniquePredicate(iniSource);
+
+ List<Module> startDModules = modules.getMatching(startDMatcher);
+ List<Module> startIniModules = modules.getMatching(startIniMatcher);
+
+ List<FileArg> files = new ArrayList<FileArg>();
+
+ if (!startDModules.isEmpty())
+ {
+ StartDirBuilder builder = new StartDirBuilder(this);
+ for (Module mod : startDModules)
+ {
+ dirty |= builder.addModule(mod);
+ for (String file : mod.getFiles())
+ {
+ files.add(new FileArg(mod,file));
+ }
+ }
+ }
+
+ if (!startIniModules.isEmpty())
+ {
+ StartIniBuilder builder = new StartIniBuilder(this);
+ for (Module mod : startIniModules)
+ {
+ dirty |= builder.addModule(mod);
+ for (String file : mod.getFiles())
+ {
+ files.add(new FileArg(mod,file));
+ }
+ }
+ }
+
+ // Process files
+ files.addAll(startArgs.getFiles());
+ dirty |= processFileResources(files);
+
+ return dirty;
+ }
+
+ public BaseHome getBaseHome()
+ {
+ return baseHome;
+ }
+
+ public StartArgs getStartArgs()
+ {
+ return startArgs;
+ }
+
+ /**
+ * Process a specific file resource
+ *
+ * @param arg
+ * the fileArg to work with
+ * @param file
+ * the resolved file reference to work with
+ * @return true if change was made as a result of the file, false if no change made.
+ * @throws IOException
+ * if there was an issue in processing this file
+ */
+ private boolean processFileResource(FileArg arg, Path file) throws IOException
+ {
+ if (startArgs.isDownload() && (arg.uri != null))
+ {
+ URI uri = URI.create(arg.uri);
+
+ // Process via initializers
+ for (FileInitializer finit : fileInitializers)
+ {
+ if (finit.init(uri,file))
+ {
+ // Completed successfully
+ return true;
+ }
+ }
+
+ return false;
+ }
+ else
+ {
+ // Process directly
+ boolean isDir = arg.location.endsWith("/");
+
+ if (FS.exists(file))
+ {
+ // Validate existence
+ if (isDir)
+ {
+ if (!Files.isDirectory(file))
+ {
+ throw new IOException("Invalid: path should be a directory (but isn't): " + file);
+ }
+ if (!FS.canReadDirectory(file))
+ {
+ throw new IOException("Unable to read directory: " + file);
+ }
+ }
+ else
+ {
+ if (!FS.canReadFile(file))
+ {
+ throw new IOException("Unable to read file: " + file);
+ }
+ }
+
+ return false;
+ }
+
+ if (isDir)
+ {
+ // Create directory
+ StartLog.log("MKDIR",baseHome.toShortForm(file));
+ return FS.ensureDirectoryExists(file);
+ }
+ else
+ {
+ // Warn on missing file (this has to be resolved manually by user)
+ String shortRef = baseHome.toShortForm(file);
+ if (startArgs.isTestingModeEnabled())
+ {
+ StartLog.log("TESTING MODE","Skipping required file check on: %s",shortRef);
+ return true;
+ }
+
+ StartLog.warn("Missing Required File: %s",baseHome.toShortForm(file));
+ startArgs.setRun(false);
+ if (arg.uri != null)
+ {
+ StartLog.warn(" Can be downloaded From: %s",arg.uri);
+ StartLog.warn(" Run start.jar --create-files to download");
+ }
+
+ return true;
+ }
+ }
+ }
+
+ /**
+ * Process the {@link FileArg} for startup, assume that all licenses have
+ * been acknowledged at this stage.
+ *
+ * @param files
+ * the list of {@link FileArg}s to process
+ * @return true if base directory modified, false if left untouched
+ */
+ private boolean processFileResources(List<FileArg> files) throws IOException
+ {
+ if ((files == null) || (files.isEmpty()))
+ {
+ return false;
+ }
+
+ boolean dirty = false;
+
+ List<String> failures = new ArrayList<String>();
+
+ for (FileArg arg : files)
+ {
+ Path file = baseHome.getBasePath(arg.location);
+ try
+ {
+ dirty |= processFileResource(arg,file);
+ }
+ catch (Throwable t)
+ {
+ StartLog.warn(t);
+ failures.add(String.format("[%s] %s - %s",t.getClass().getSimpleName(),t.getMessage(),file.toAbsolutePath().toString()));
+ }
+ }
+
+ if (!failures.isEmpty())
+ {
+ StringBuilder err = new StringBuilder();
+ err.append("Failed to process all file resources.");
+ for (String failure : failures)
+ {
+ err.append(System.lineSeparator()).append(" - ").append(failure);
+ }
+ StartLog.warn(err.toString());
+
+ throw new RuntimeException(err.toString());
+ }
+
+ return dirty;
+ }
+}
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/BaseHome.java b/jetty-start/src/main/java/org/eclipse/jetty/start/BaseHome.java
index 9ffb07bd14..002d8a7c63 100644
--- a/jetty-start/src/main/java/org/eclipse/jetty/start/BaseHome.java
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/BaseHome.java
@@ -130,7 +130,6 @@ public class BaseHome
public BaseHome(CommandLineConfigSource cmdLineSource) throws IOException
{
-
sources = new ConfigSources();
sources.add(cmdLineSource);
this.homeDir = cmdLineSource.getHomePath();
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/FS.java b/jetty-start/src/main/java/org/eclipse/jetty/start/FS.java
index d303412f1a..bbb5cf62ee 100644
--- a/jetty-start/src/main/java/org/eclipse/jetty/start/FS.java
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/FS.java
@@ -67,14 +67,15 @@ public class FS
return Files.exists(ret);
}
- public static void ensureDirectoryExists(Path dir) throws IOException
+ public static boolean ensureDirectoryExists(Path dir) throws IOException
{
if (exists(dir))
{
// exists already, nothing to do
- return;
+ return false;
}
Files.createDirectories(dir);
+ return true;
}
public static void ensureDirectoryWritable(Path dir) throws IOException
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/FileInitializer.java b/jetty-start/src/main/java/org/eclipse/jetty/start/FileInitializer.java
new file mode 100644
index 0000000000..7de4011392
--- /dev/null
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/FileInitializer.java
@@ -0,0 +1,43 @@
+//
+// ========================================================================
+// 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;
+
+import java.io.IOException;
+import java.net.URI;
+import java.nio.file.Path;
+
+/**
+ * Interface for initializing a file resource.
+ */
+public interface FileInitializer
+{
+ /**
+ * Initialize a file resource
+ *
+ * @param uri
+ * the remote URI of the resource acting as its source
+ * @param file
+ * the local file resource to initialize
+ * @return true if local file is initialized (resulted in a change on disk), false if this
+ * {@link FileInitializer} did nothing.
+ * @throws IOException
+ * if there was an attempt to initialize, but an error occurred.
+ */
+ public boolean init(URI uri, Path file) throws IOException;
+}
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/Licensing.java b/jetty-start/src/main/java/org/eclipse/jetty/start/Licensing.java
new file mode 100644
index 0000000000..eb5149bc81
--- /dev/null
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/Licensing.java
@@ -0,0 +1,104 @@
+//
+// ========================================================================
+// 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;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.List;
+import java.util.Map;
+import java.util.TreeMap;
+
+/**
+ * Handles basic license presentation and acknowledgement.
+ */
+public class Licensing
+{
+ private static final String PROP_ACK_LICENSES = "org.eclipse.jetty.start.ack.licenses";
+ public Map<String, List<String>> licenseMap = new TreeMap<>(new NaturalSort.Strings());
+
+ public void addModule(Module module)
+ {
+ if (!module.hasLicense())
+ {
+ // skip, no license
+ return;
+ }
+
+ if (licenseMap.containsKey(module.getName()))
+ {
+ // skip, already being tracked
+ return;
+ }
+
+ licenseMap.put(module.getName(),module.getLicense());
+ }
+
+ public boolean hasLicenses()
+ {
+ return !licenseMap.isEmpty();
+ }
+
+ public boolean acknowledgeLicenses() throws IOException
+ {
+ if (!hasLicenses())
+ {
+ return true;
+ }
+
+ System.err.printf("%nALERT: There are enabled module(s) with licenses.%n");
+ System.err.printf("The following %d module(s):%n", licenseMap.size());
+ System.err.printf(" + contains software not provided by the Eclipse Foundation!%n");
+ System.err.printf(" + contains software not covered by the Eclipse Public License!%n");
+ System.err.printf(" + has not been audited for compliance with its license%n");
+
+ for (String key : licenseMap.keySet())
+ {
+ System.err.printf("%n Module: %s%n",key);
+ for (String line : licenseMap.get(key))
+ {
+ System.err.printf(" + %s%n",line);
+ }
+ }
+
+ boolean licenseAck = false;
+
+ String propBasedAckValue = System.getProperty(PROP_ACK_LICENSES);
+ if (propBasedAckValue != null)
+ {
+ StartLog.log("TESTING MODE","Programmatic ACK - %s=%s",PROP_ACK_LICENSES,propBasedAckValue);
+ licenseAck = Boolean.parseBoolean(propBasedAckValue);
+ }
+ else
+ {
+ if (Boolean.getBoolean("org.eclipse.jetty.start.testing"))
+ {
+ throw new RuntimeException("Test Configuration Missing - Pre-specify answer to (" + PROP_ACK_LICENSES + ") in test case");
+ }
+
+ BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
+ System.err.printf("%nProceed (y/N)? ");
+ String response = input.readLine();
+
+ licenseAck = (Utils.isNotBlank(response) && response.toLowerCase().startsWith("y"));
+ }
+
+ return licenseAck;
+ }
+}
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/Main.java b/jetty-start/src/main/java/org/eclipse/jetty/start/Main.java
index e1faf56e6b..62926ea2ec 100644
--- a/jetty-start/src/main/java/org/eclipse/jetty/start/Main.java
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/Main.java
@@ -21,35 +21,25 @@ package org.eclipse.jetty.start;
import static org.eclipse.jetty.start.UsageException.*;
import java.io.BufferedReader;
-import java.io.BufferedWriter;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.LineNumberReader;
import java.io.OutputStream;
-import java.io.PrintWriter;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.net.ConnectException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.SocketTimeoutException;
-import java.net.URL;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
import java.nio.file.Path;
-import java.nio.file.StandardOpenOption;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashSet;
import java.util.List;
import java.util.Locale;
-import java.util.Set;
-import java.util.regex.Pattern;
import org.eclipse.jetty.start.config.CommandLineConfigSource;
+import org.eclipse.jetty.start.graph.GraphException;
+import org.eclipse.jetty.start.graph.Selection;
/**
* Main start class.
@@ -80,29 +70,8 @@ import org.eclipse.jetty.start.config.CommandLineConfigSource;
*/
public class Main
{
- private static final String EXITING_LICENSE_NOT_ACKNOWLEDGED = "Exiting: license not acknowledged!";
private static final int EXIT_USAGE = 1;
- public static String join(Collection<?> objs, String delim)
- {
- if (objs==null)
- {
- return "";
- }
- StringBuilder str = new StringBuilder();
- boolean needDelim = false;
- for (Object obj : objs)
- {
- if (needDelim)
- {
- str.append(delim);
- }
- str.append(obj);
- needDelim = true;
- }
- return str.toString();
- }
-
public static void main(String[] args)
{
try
@@ -172,76 +141,6 @@ public class Main
}).start();
}
- private void initFile(StartArgs args, FileArg farg)
- {
- try
- {
- Path file = baseHome.getBasePath(farg.location);
-
- StartLog.debug("[init-file] %s module specified file %s",file.toAbsolutePath(),(FS.exists(file)?"[Exists!]":""));
- if (FS.exists(file))
- {
- // file already initialized / downloaded, skip it
- return;
- }
-
- if (farg.uri!=null)
- {
- URL url = new URL(farg.uri);
-
- StartLog.log("DOWNLOAD", "%s to %s", url, farg.location);
-
- FS.ensureDirectoryExists(file.getParent());
-
- if (args.isTestingModeEnabled())
- {
- StartLog.log("TESTING MODE", "Skipping download of " + url);
- return;
- }
-
- byte[] buf = new byte[8192];
- try (InputStream in = url.openStream();
- OutputStream out = Files.newOutputStream(file,StandardOpenOption.CREATE_NEW,StandardOpenOption.WRITE))
- {
- while (true)
- {
- int len = in.read(buf);
-
- if (len > 0)
- {
- out.write(buf,0,len);
- }
- if (len < 0)
- {
- break;
- }
- }
- }
- }
- else if (farg.location.endsWith("/"))
- {
- StartLog.log("MKDIR",baseHome.toShortForm(file));
- FS.ensureDirectoryExists(file);
- }
- else
- {
- String shortRef = baseHome.toShortForm(file);
- if (args.isTestingModeEnabled())
- {
- StartLog.log("TESTING MODE","Skipping required file check on: %s",shortRef);
- return;
- }
- StartLog.warn("MISSING: Required file %s",shortRef);
- }
- }
- catch (Exception e)
- {
- StartLog.warn("ERROR: processing %s%n%s",farg,e);
- StartLog.warn(e);
- usageExit(EXIT_USAGE);
- }
- }
-
private void dumpClasspathWithVersions(Classpath classpath)
{
StartLog.endStartLog();
@@ -354,223 +253,10 @@ public class Main
// Dump Enabled Modules
System.out.println();
- System.out.println("Jetty Active Module Tree:");
- System.out.println("-------------------------");
+ System.out.println("Jetty Selected Module Ordering:");
+ System.out.println("-------------------------------");
Modules modules = args.getAllModules();
- modules.dumpEnabledTree();
- }
-
- /**
- * Build out INI file.
- * <p>
- * This applies equally for either <code>${jetty.base}/start.ini</code> or
- * <code>${jetty.base}/start.d/${name}.ini</code>
- *
- * @param args the arguments of what modules are enabled
- * @param name the name of the module to based the build of the ini
- * @param topLevel
- * @param appendStartIni true to append to <code>${jetty.base}/start.ini</code>,
- * false to create a <code>${jetty.base}/start.d/${name}.ini</code> entry instead.
- * @throws IOException
- */
- private void buildIni(StartArgs args, String name, boolean topLevel, boolean appendStartIni) throws IOException
- {
- // Find the start.d relative to the base directory only.
- Path start_d = baseHome.getBasePath("start.d");
-
- // Is this a module?
- Modules modules = args.getAllModules();
- Module module = modules.get(name);
- if (module == null)
- {
- StartLog.warn("ERROR: No known module for %s",name);
- return;
- }
-
- boolean transitive = module.isEnabled() && (module.getSources().size() == 0);
-
- // Find any named ini file and check it follows the convention
- Path start_ini = baseHome.getBasePath("start.ini");
- String short_start_ini = baseHome.toShortForm(start_ini);
- Path startd_ini = start_d.resolve(name + ".ini");
- String short_startd_ini = baseHome.toShortForm(startd_ini);
- StartIni module_ini = null;
- if (FS.exists(startd_ini))
- {
- module_ini = new StartIni(startd_ini);
- if (module_ini.getLineMatches(Pattern.compile("--module=(.*, *)*" + name)).size() == 0)
- {
- StartLog.warn("ERROR: %s is not enabled in %s!",name,short_startd_ini);
- return;
- }
- }
-
- if (!args.isApproveAllLicenses())
- {
- if (!module.hasFiles(baseHome) && !module.acknowledgeLicense())
- {
- StartLog.warn(EXITING_LICENSE_NOT_ACKNOWLEDGED);
- System.exit(1);
- }
- }
-
- boolean buildIni=false;
- if (module.isEnabled())
- {
- // is it an explicit request to create an ini file?
- if (topLevel && !FS.exists(startd_ini) && !appendStartIni)
- {
- buildIni=true;
- }
- // else is it transitive
- else if (transitive)
- {
- if (module.hasDefaultConfig())
- {
- buildIni = true;
- StartLog.info("%-15s initialised transitively",name);
- }
- }
- // else must be initialized explicitly
- else
- {
- for (String source : module.getSources())
- {
- StartLog.info("%-15s initialised in %s",name,baseHome.toShortForm(source));
- }
- }
- }
- else
- {
- buildIni=true;
- }
-
- String source = "<transitive>";
-
- // If we need an ini
- if (buildIni)
- {
- // File BufferedWriter
- BufferedWriter writer = null;
- PrintWriter out = null;
- try
- {
- if (appendStartIni)
- {
- source = short_start_ini;
- StartLog.info("%-15s initialised in %s (appended)",name,source);
- writer = Files.newBufferedWriter(start_ini,StandardCharsets.UTF_8,StandardOpenOption.CREATE,StandardOpenOption.APPEND);
- out = new PrintWriter(writer);
- }
- else
- {
- // Create the directory if needed
- FS.ensureDirectoryExists(start_d);
- FS.ensureDirectoryWritable(start_d);
- source = short_startd_ini;
- StartLog.info("%-15s initialised in %s (created)",name,source);
- writer = Files.newBufferedWriter(startd_ini,StandardCharsets.UTF_8,StandardOpenOption.CREATE_NEW,StandardOpenOption.WRITE);
- out = new PrintWriter(writer);
- }
-
- if (appendStartIni)
- {
- out.println();
- }
- out.println("# --------------------------------------- ");
- out.println("# Module: " + name);
-
- out.println("--module=" + name);
-
- args.parse("--module=" + name,source);
- args.parseModule(module);
-
- for (String line : module.getDefaultConfig())
- {
- out.println(line);
- }
- }
- finally
- {
- if (out != null)
- {
- out.close();
- }
- }
- }
-
- modules.enable(name,Collections.singletonList(source));
-
- // Also list other places this module is enabled
- for (String src : module.getSources())
- {
- StartLog.debug("also enabled in: %s",src);
- if (!short_start_ini.equals(src))
- {
- StartLog.info("%-15s enabled in %s",name,baseHome.toShortForm(src));
- }
- }
-
- // Do downloads now
- for (String file : module.getFiles())
- {
- initFile(args, new FileArg(module,file));
- }
-
- // Process dependencies
- module.expandProperties(args.getProperties());
- modules.registerParentsIfMissing(module);
- modules.buildGraph();
-
- // process new ini modules
- if (topLevel)
- {
- List<Module> depends = new ArrayList<>();
- for (String depend : modules.resolveParentModulesOf(name))
- {
- if (!name.equals(depend))
- {
- Module m = modules.get(depend);
- m.setEnabled(true);
- depends.add(m);
- }
- }
- Collections.sort(depends,Collections.reverseOrder(new Module.DepthComparator()));
-
- Set<String> done = new HashSet<>(0);
- while (true)
- {
- // initialize known dependencies
- boolean complete=true;
- for (Module m : depends)
- {
- if (!done.contains(m.getName()))
- {
- complete=false;
- buildIni(args,m.getName(),false,appendStartIni);
- done.add(m.getName());
- }
- }
-
- if (complete)
- {
- break;
- }
-
- // look for any new ones resolved via expansion
- depends.clear();
- for (String depend : modules.resolveParentModulesOf(name))
- {
- if (!name.equals(depend))
- {
- Module m = modules.get(depend);
- m.setEnabled(true);
- depends.add(m);
- }
- }
- Collections.sort(depends,Collections.reverseOrder(new Module.DepthComparator()));
- }
- }
+ modules.dumpSelected();
}
/**
@@ -601,30 +287,41 @@ public class Main
StartArgs args = new StartArgs();
args.parse(baseHome.getConfigSources());
- // ------------------------------------------------------------
- // 3) Module Registration
- Modules modules = new Modules(baseHome,args);
- StartLog.debug("Registering all modules");
- modules.registerAll();
+ try
+ {
+ // ------------------------------------------------------------
+ // 3) Module Registration
+ Modules modules = new Modules(baseHome,args);
+ StartLog.debug("Registering all modules");
+ modules.registerAll();
- // ------------------------------------------------------------
- // 4) Active Module Resolution
- for (String enabledModule : args.getEnabledModules())
+ // ------------------------------------------------------------
+ // 4) Active Module Resolution
+ for (String enabledModule : args.getEnabledModules())
+ {
+ for (String source : args.getSources(enabledModule))
+ {
+ String shortForm = baseHome.toShortForm(source);
+ modules.selectNode(enabledModule,new Selection(shortForm));
+ }
+ }
+
+ StartLog.debug("Building Module Graph");
+ modules.buildGraph();
+
+ args.setAllModules(modules);
+ List<Module> activeModules = modules.getSelected();
+
+ // ------------------------------------------------------------
+ // 5) Lib & XML Expansion / Resolution
+ args.expandLibs(baseHome);
+ args.expandModules(baseHome,activeModules);
+
+ }
+ catch (GraphException e)
{
- List<String> msources = args.getSources(enabledModule);
- modules.enable(enabledModule,msources);
+ throw new UsageException(ERR_BAD_GRAPH,e);
}
-
- StartLog.debug("Building Module Graph");
- modules.buildGraph();
-
- args.setAllModules(modules);
- List<Module> activeModules = modules.resolveEnabled();
-
- // ------------------------------------------------------------
- // 5) Lib & XML Expansion / Resolution
- args.expandLibs(baseHome);
- args.expandModules(baseHome,activeModules);
// ------------------------------------------------------------
// 6) Resolve Extra XMLs
@@ -636,7 +333,7 @@ public class Main
return args;
}
-
+
public void start(StartArgs args) throws IOException, InterruptedException
{
StartLog.debug("StartArgs: %s",args);
@@ -692,83 +389,12 @@ public class Main
doStop(args);
}
- boolean rebuildGraph = false;
-
- // Initialize start.ini
- for (String module : args.getAddToStartIni())
- {
- buildIni(args,module,true,true);
- rebuildGraph = true;
- }
-
- // Initialize start.d
- for (String module : args.getAddToStartdIni())
- {
- buildIni(args,module,true,false);
- rebuildGraph = true;
- }
-
- if (rebuildGraph)
- {
- args.getAllModules().clearMissing();
- args.getAllModules().buildGraph();
- }
-
- // If in --create-files, check licenses
- if(args.isDownload())
- {
- if (!args.isApproveAllLicenses())
- {
- for (Module module : args.getAllModules().resolveEnabled())
- {
- if (!module.hasFiles(baseHome) && !module.acknowledgeLicense())
- {
- StartLog.warn(EXITING_LICENSE_NOT_ACKNOWLEDGED);
- System.exit(1);
- }
- }
- }
- }
-
- // Check ini files for download possibilities
- for (FileArg arg : args.getFiles())
+ BaseBuilder baseBuilder = new BaseBuilder(baseHome,args);
+ if(baseBuilder.build())
{
- Path file = baseHome.getBasePath(arg.location);
- if (!FS.exists(file) && args.isDownload())
- {
- initFile(args, arg);
- }
-
- if (!FS.exists(file))
- {
- boolean isDir = arg.location.endsWith("/");
- if (isDir)
- {
- StartLog.log("MKDIR", baseHome.toShortForm(file));
- FS.ensureDirectoryExists(file);
- /* Startup should not fail to run on missing directories.
- * See Bug #427204
- */
- // args.setRun(false);
- }
- else
- {
- String shortRef = baseHome.toShortForm(file);
- if (args.isTestingModeEnabled())
- {
- StartLog.log("TESTING MODE","Skipping required file check on: %s",shortRef);
- return;
- }
-
- StartLog.warn("Missing Required File: %s",baseHome.toShortForm(file));
- args.setRun(false);
- if (arg.uri != null)
- {
- StartLog.warn(" Can be downloaded From: %s",arg.uri);
- StartLog.warn(" Run start.jar --create-files to download");
- }
- }
- }
+ // base directory changed.
+ StartLog.info("Base directory was modified");
+ return;
}
// Informational command line, don't run jetty
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/Module.java b/jetty-start/src/main/java/org/eclipse/jetty/start/Module.java
index f1be5043aa..33d9a082e5 100644
--- a/jetty-start/src/main/java/org/eclipse/jetty/start/Module.java
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/Module.java
@@ -21,47 +21,25 @@ package org.eclipse.jetty.start;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.IOException;
-import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.text.CollationKey;
import java.text.Collator;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.Comparator;
-import java.util.HashSet;
import java.util.List;
import java.util.Locale;
-import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import org.eclipse.jetty.start.graph.Node;
+
/**
* Represents a Module metadata, as defined in Jetty.
*/
-public class Module
+public class Module extends Node<Module>
{
- public static class DepthComparator implements Comparator<Module>
- {
- private Collator collator = Collator.getInstance();
-
- @Override
- public int compare(Module o1, Module o2)
- {
- // order by depth first.
- int diff = o1.depth - o2.depth;
- if (diff != 0)
- {
- return diff;
- }
- // then by name (not really needed, but makes for predictable test cases)
- CollationKey k1 = collator.getCollationKey(o1.fileRef);
- CollationKey k2 = collator.getCollationKey(o2.fileRef);
- return k1.compareTo(k2);
- }
- }
-
public static class NameComparator implements Comparator<Module>
{
private Collator collator = Collator.getInstance();
@@ -80,20 +58,7 @@ public class Module
private Path file;
/** The name of this Module (as a filesystem reference) */
private String fileRef;
- /**
- * The logical name of this module (for property selected references), And to aid in duplicate detection.
- */
- private String logicalName;
- /** The depth of the module in the tree */
- private int depth = 0;
- /** Set of Modules, by name, that this Module depends on */
- private Set<String> parentNames;
- /** Set of Modules, by name, that this Module optionally depend on */
- private Set<String> optionalParentNames;
- /** The Edges to parent modules */
- private Set<Module> parentEdges;
- /** The Edges to child modules */
- private Set<Module> childEdges;
+
/** List of xml configurations for this Module */
private List<String> xmls;
/** List of ini template lines */
@@ -108,54 +73,19 @@ public class Module
/** License lines */
private List<String> license;
- /** Is this Module enabled via start.jar command line, start.ini, or start.d/*.ini ? */
- private boolean enabled = false;
- /** List of sources that enabled this module */
- private final Set<String> sources = new HashSet<>();
- private boolean licenseAck = false;
-
public Module(BaseHome basehome, Path file) throws FileNotFoundException, IOException
{
+ super();
this.file = file;
// Strip .mod
this.fileRef = Pattern.compile(".mod$",Pattern.CASE_INSENSITIVE).matcher(file.getFileName().toString()).replaceFirst("");
- this.logicalName = fileRef;
+ this.setName(fileRef);
init(basehome);
process(basehome);
}
- public void addChildEdge(Module child)
- {
- if (childEdges.contains(child))
- {
- // already present, skip
- return;
- }
- this.childEdges.add(child);
- }
-
- public void addParentEdge(Module parent)
- {
- if (parentEdges.contains(parent))
- {
- // already present, skip
- return;
- }
- this.parentEdges.add(parent);
- }
-
- public void addSources(List<String> sources)
- {
- this.sources.addAll(sources);
- }
-
- public void clearSources()
- {
- this.sources.clear();
- }
-
@Override
public boolean equals(Object obj)
{
@@ -189,23 +119,17 @@ public class Module
public void expandProperties(Props props)
{
// Expand Parents
- Set<String> parents = new HashSet<>();
- for (String parent : parentNames)
+ List<String> parents = new ArrayList<>();
+ for (String parent : getParentNames())
{
parents.add(props.expand(parent));
}
- parentNames.clear();
- parentNames.addAll(parents);
- }
-
- public Set<Module> getChildEdges()
- {
- return childEdges;
+ setParentNames(parents);
}
- public int getDepth()
+ public List<String> getDefaultConfig()
{
- return depth;
+ return defaultConfig;
}
public List<String> getFiles()
@@ -218,14 +142,9 @@ public class Module
return fileRef;
}
- public List<String> getDefaultConfig()
- {
- return defaultConfig;
- }
-
- public boolean hasDefaultConfig()
+ public List<String> getJvmArgs()
{
- return hasDefaultConfig;
+ return jvmArgs;
}
public List<String> getLibs()
@@ -233,29 +152,9 @@ public class Module
return libs;
}
- public String getName()
- {
- return logicalName;
- }
-
- public Set<String> getOptionalParentNames()
- {
- return optionalParentNames;
- }
-
- public Set<Module> getParentEdges()
- {
- return parentEdges;
- }
-
- public Set<String> getParentNames()
- {
- return parentNames;
- }
-
- public Set<String> getSources()
+ public List<String> getLicense()
{
- return Collections.unmodifiableSet(sources);
+ return license;
}
public List<String> getXmls()
@@ -263,62 +162,9 @@ public class Module
return xmls;
}
- public List<String> getJvmArgs()
- {
- return jvmArgs;
- }
-
- public boolean hasLicense()
- {
- return license != null && license.size() > 0;
- }
-
- public boolean acknowledgeLicense() throws IOException
- {
- if (!hasLicense() || licenseAck)
- {
- return true;
- }
-
- System.err.printf("%nModule %s:%n",getName());
- System.err.printf(" + contains software not provided by the Eclipse Foundation!%n");
- System.err.printf(" + contains software not covered by the Eclipse Public License!%n");
- System.err.printf(" + has not been audited for compliance with its license%n");
- System.err.printf("%n");
- for (String l : getLicense())
- {
- System.err.printf(" %s%n",l);
- }
-
- String propBasedAckName = "org.eclipse.jetty.start.ack.license." + getName();
- String propBasedAckValue = System.getProperty(propBasedAckName);
- if (propBasedAckValue != null)
- {
- StartLog.log("TESTING MODE", "Programmatic ACK - %s=%s",propBasedAckName,propBasedAckValue);
- licenseAck = Boolean.parseBoolean(propBasedAckValue);
- }
- else
- {
- if (Boolean.getBoolean("org.eclipse.jetty.start.testing"))
- {
- throw new RuntimeException("Test Configuration Missing - Pre-specify answer to (" + propBasedAckName + ") in test case");
- }
-
- try (BufferedReader input = new BufferedReader(new InputStreamReader(System.in)))
- {
- System.err.printf("%nProceed (y/N)? ");
- String line = input.readLine();
-
- licenseAck = !(line == null || line.length() == 0 || !line.toLowerCase().startsWith("y"));
- }
- }
-
- return licenseAck;
- }
-
- public List<String> getLicense()
+ public boolean hasDefaultConfig()
{
- return license;
+ return hasDefaultConfig;
}
@Override
@@ -330,12 +176,13 @@ public class Module
return result;
}
+ public boolean hasLicense()
+ {
+ return (license != null) && (license.size() > 0);
+ }
+
private void init(BaseHome basehome)
{
- parentNames = new HashSet<>();
- optionalParentNames = new HashSet<>();
- parentEdges = new HashSet<>();
- childEdges = new HashSet<>();
xmls = new ArrayList<>();
defaultConfig = new ArrayList<>();
libs = new ArrayList<>();
@@ -353,12 +200,12 @@ public class Module
throw new RuntimeException("Invalid Module location (must be located under /modules/ directory): " + name);
}
this.fileRef = mat.group(1).replace('\\','/');
- this.logicalName = this.fileRef;
+ setName(this.fileRef);
}
- public boolean isEnabled()
+ public boolean isVirtual()
{
- return enabled;
+ return !getName().equals(fileRef);
}
public boolean hasFiles(BaseHome baseHome)
@@ -417,7 +264,7 @@ public class Module
// ignore (this would be entries before first section)
break;
case "DEPEND":
- parentNames.add(line);
+ addParentName(line);
break;
case "FILES":
files.add(line);
@@ -435,10 +282,10 @@ public class Module
license.add(line);
break;
case "NAME":
- logicalName = line;
+ setName(line);
break;
case "OPTIONAL":
- optionalParentNames.add(line);
+ addOptionalParentName(line);
break;
case "EXEC":
jvmArgs.add(line);
@@ -455,38 +302,23 @@ public class Module
}
}
- public void setDepth(int depth)
- {
- this.depth = depth;
- }
-
public void setEnabled(boolean enabled)
{
- this.enabled = enabled;
- }
-
- public void setParentNames(Set<String> parents)
- {
- this.parentNames.clear();
- this.parentEdges.clear();
- if (parents != null)
- {
- this.parentNames.addAll(parents);
- }
+ throw new RuntimeException("Don't enable directly");
}
@Override
public String toString()
{
StringBuilder str = new StringBuilder();
- str.append("Module[").append(logicalName);
- if (!logicalName.equals(fileRef))
+ str.append("Module[").append(getName());
+ if (isVirtual())
{
str.append(",file=").append(fileRef);
}
- if (enabled)
+ if (isSelected())
{
- str.append(",enabled");
+ str.append(",selected");
}
str.append(']');
return str.toString();
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/ModuleGraphWriter.java b/jetty-start/src/main/java/org/eclipse/jetty/start/ModuleGraphWriter.java
index b98a39275a..30b904cc1e 100644
--- a/jetty-start/src/main/java/org/eclipse/jetty/start/ModuleGraphWriter.java
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/ModuleGraphWriter.java
@@ -28,6 +28,10 @@ import java.nio.file.StandardOpenOption;
import java.util.Collection;
import java.util.List;
+import org.eclipse.jetty.start.graph.Graph;
+import org.eclipse.jetty.start.graph.Node;
+import org.eclipse.jetty.start.graph.Selection;
+
/**
* Generate a graphviz dot graph of the modules found
*/
@@ -103,7 +107,7 @@ public class ModuleGraphWriter
out.println(" ssize = \"20,40\"");
out.println(" ];");
- List<Module> enabled = modules.resolveEnabled();
+ List<Module> enabled = modules.getSelected();
// Module Nodes
writeModules(out,modules,enabled);
@@ -164,7 +168,7 @@ public class ModuleGraphWriter
private void writeModuleNode(PrintWriter out, Module module, boolean resolved)
{
String color = colorModuleBg;
- if (module.isEnabled())
+ if (module.isSelected())
{
// specifically enabled by config
color = colorEnabledBg;
@@ -179,12 +183,12 @@ public class ModuleGraphWriter
out.printf("<TABLE BORDER=\"0\" CELLBORDER=\"0\" CELLSPACING=\"0\" CELLPADDING=\"2\">%n");
out.printf(" <TR><TD ALIGN=\"LEFT\"><B>%s</B></TD></TR>%n",module.getName());
- if (module.isEnabled())
+ if (module.isSelected())
{
writeModuleDetailHeader(out,"ENABLED");
- for (String source : module.getSources())
+ for (Selection selection : module.getSelections())
{
- writeModuleDetailLine(out,"via: " + source);
+ writeModuleDetailLine(out,"via: " + selection);
}
}
else if (resolved)
@@ -247,11 +251,11 @@ public class ModuleGraphWriter
}
}
- private void writeRelationships(PrintWriter out, Modules modules, List<Module> enabled)
+ private void writeRelationships(PrintWriter out, Graph<Module> modules, List<Module> enabled)
{
for (Module module : modules)
{
- for (Module parent : module.getParentEdges())
+ for (Node<?> parent : module.getParentEdges())
{
out.printf(" \"%s\" -> \"%s\";%n",module.getName(),parent.getName());
}
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/Modules.java b/jetty-start/src/main/java/org/eclipse/jetty/start/Modules.java
index 9a566249ad..6b7150eb52 100644
--- a/jetty-start/src/main/java/org/eclipse/jetty/start/Modules.java
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/Modules.java
@@ -18,409 +18,127 @@
package org.eclipse.jetty.start;
-import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.file.Path;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.Stack;
-import java.util.regex.Pattern;
+
+import org.eclipse.jetty.start.graph.Graph;
+import org.eclipse.jetty.start.graph.GraphException;
+import org.eclipse.jetty.start.graph.OnlyTransitivePredicate;
+import org.eclipse.jetty.start.graph.Selection;
/**
* Access for all modules declared, as well as what is enabled.
*/
-public class Modules implements Iterable<Module>
+public class Modules extends Graph<Module>
{
private final BaseHome baseHome;
private final StartArgs args;
-
- private Map<String, Module> modules = new HashMap<>();
- /*
- * modules that may appear in the resolved graph but are undefined in the module system
- *
- * ex: modules/npn/npn-1.7.0_01.mod (property expansion resolves to non-existent file)
- */
- private Set<String> missingModules = new HashSet<String>();
- private int maxDepth = -1;
-
public Modules(BaseHome basehome, StartArgs args)
{
this.baseHome = basehome;
this.args = args;
- }
-
- private Set<String> asNameSet(Set<Module> moduleSet)
- {
- Set<String> ret = new HashSet<>();
- for (Module module : moduleSet)
- {
- ret.add(module.getName());
- }
- return ret;
- }
-
- private void assertNoCycle(Module module, Stack<String> refs)
- {
- for (Module parent : module.getParentEdges())
- {
- if (refs.contains(parent.getName()))
- {
- // Cycle detected.
- StringBuilder err = new StringBuilder();
- err.append("A cyclic reference in the modules has been detected: ");
- for (int i = 0; i < refs.size(); i++)
- {
- if (i > 0)
- {
- err.append(" -> ");
- }
- err.append(refs.get(i));
- }
- err.append(" -> ").append(parent.getName());
- throw new IllegalStateException(err.toString());
- }
-
- refs.push(parent.getName());
- assertNoCycle(parent,refs);
- refs.pop();
- }
- }
-
- private void bfsCalculateDepth(final Module module, final int depthNow)
- {
- int depth = depthNow + 1;
-
- // Set depth on every child first
- for (Module child : module.getChildEdges())
- {
- child.setDepth(Math.max(depth,child.getDepth()));
- this.maxDepth = Math.max(this.maxDepth,child.getDepth());
- }
-
- // Dive down
- for (Module child : module.getChildEdges())
- {
- bfsCalculateDepth(child,depth);
- }
- }
-
- /**
- * Using the provided dependencies, build the module graph
- */
- public void buildGraph() throws FileNotFoundException, IOException
- {
- normalizeDependencies();
-
- // Connect edges
- for (Module module : modules.values())
- {
- for (String parentName : module.getParentNames())
- {
- Module parent = get(parentName);
-
- if (parent == null)
- {
- if (Props.hasPropertyKey(parentName))
- {
- StartLog.debug("Module property not expandable (yet) [%s]",parentName);
- }
- else
- {
- StartLog.warn("Module not found [%s]",parentName);
- }
- }
- else
- {
- module.addParentEdge(parent);
- parent.addChildEdge(module);
- }
- }
-
- for (String optionalParentName : module.getOptionalParentNames())
- {
- Module optional = get(optionalParentName);
- if (optional == null)
- {
- StartLog.debug("Optional module not found [%s]",optionalParentName);
- }
- else if (optional.isEnabled())
- {
- module.addParentEdge(optional);
- optional.addChildEdge(module);
- }
- }
- }
-
- // Verify there is no cyclic references
- Stack<String> refs = new Stack<>();
- for (Module module : modules.values())
- {
- refs.push(module.getName());
- assertNoCycle(module,refs);
- refs.pop();
- }
-
- // Calculate depth of all modules for sorting later
- for (Module module : modules.values())
- {
- if (module.getParentEdges().isEmpty())
- {
- bfsCalculateDepth(module,0);
- }
- }
- }
-
- public void clearMissing()
- {
- missingModules.clear();
- }
-
- public Integer count()
- {
- return modules.size();
+ this.setSelectionTerm("enable");
+ this.setNodeTerm("module");
}
public void dump()
{
List<Module> ordered = new ArrayList<>();
- ordered.addAll(modules.values());
+ ordered.addAll(getNodes());
Collections.sort(ordered,new Module.NameComparator());
- List<Module> active = resolveEnabled();
+ List<Module> active = getSelected();
for (Module module : ordered)
{
boolean activated = active.contains(module);
- boolean enabled = module.isEnabled();
- boolean transitive = activated && !enabled;
+ boolean selected = module.isSelected();
+ boolean transitive = selected && module.matches(OnlyTransitivePredicate.INSTANCE);
- char status = '-';
- if (enabled)
+ String status = "[ ]";
+ if (transitive)
{
- status = '*';
+ status = "[t]";
}
- else if (transitive)
+ else if (selected)
{
- status = '+';
+ status = "[x]";
}
System.out.printf("%n %s Module: %s%n",status,module.getName());
if (!module.getName().equals(module.getFilesystemRef()))
{
- System.out.printf(" Ref: %s%n",module.getFilesystemRef());
+ System.out.printf(" Ref: %s%n",module.getFilesystemRef());
}
for (String parent : module.getParentNames())
{
- System.out.printf(" Depend: %s%n",parent);
+ System.out.printf(" Depend: %s%n",parent);
}
for (String lib : module.getLibs())
{
- System.out.printf(" LIB: %s%n",lib);
+ System.out.printf(" LIB: %s%n",lib);
}
for (String xml : module.getXmls())
{
- System.out.printf(" XML: %s%n",xml);
+ System.out.printf(" XML: %s%n",xml);
}
if (StartLog.isDebugEnabled())
{
- System.out.printf(" depth: %d%n",module.getDepth());
+ System.out.printf(" depth: %d%n",module.getDepth());
}
if (activated)
{
- for (String source : module.getSources())
+ for (Selection selection : module.getSelections())
{
- System.out.printf(" Enabled: <via> %s%n",source);
- }
- if (transitive)
- {
- System.out.printf(" Enabled: <via transitive reference>%n");
+ System.out.printf(" Enabled: <via> %s%n",selection);
}
}
else
{
- System.out.printf(" Enabled: <not enabled in this configuration>%n");
+ System.out.printf(" Enabled: <not enabled in this configuration>%n");
}
}
}
- public void dumpEnabledTree()
+ @Override
+ public Module resolveNode(String name)
{
- List<Module> ordered = new ArrayList<>();
- ordered.addAll(modules.values());
- Collections.sort(ordered,new Module.DepthComparator());
-
- List<Module> active = resolveEnabled();
+ String expandedName = args.getProperties().expand(name);
- for (Module module : ordered)
+ if (Props.hasPropertyKey(expandedName))
{
- if (active.contains(module))
- {
- // Show module name
- String indent = toIndent(module.getDepth());
- System.out.printf("%s + Module: %s [%s]%n",indent,module.getName(),module.isEnabled()?"enabled":"transitive");
- }
+ StartLog.debug("Not yet able to expand property in: %s",name);
+ return null;
}
- }
- public void enable(String name) throws IOException
- {
- List<String> empty = Collections.emptyList();
- enable(name,empty);
- }
-
- public void enable(String name, List<String> sources) throws IOException
- {
- if (name.contains("*"))
+ Path file = baseHome.getPath("modules/" + expandedName + ".mod");
+ if (FS.canReadFile(file))
{
- // A regex!
- Pattern pat = Pattern.compile(name);
- List<Module> matching = new ArrayList<>();
- do
- {
- matching.clear();
-
- // find matching entries that are not enabled
- for (Map.Entry<String, Module> entry : modules.entrySet())
- {
- if (pat.matcher(entry.getKey()).matches())
- {
- if (!entry.getValue().isEnabled())
- {
- matching.add(entry.getValue());
- }
- }
- }
-
- // enable them
- for (Module module : matching)
- {
- enableModule(module,sources);
- }
- }
- while (!matching.isEmpty());
+ Module parent = registerModule(file);
+ parent.expandProperties(args.getProperties());
+ updateParentReferencesTo(parent);
+ return parent;
}
else
{
- Module module = modules.get(name);
- if (module == null)
- {
- System.err.printf("WARNING: Cannot enable requested module [%s]: not a valid module name.%n",name);
- return;
- }
- enableModule(module,sources);
- }
- }
-
- private void enableModule(Module module, List<String> sources) throws IOException
- {
- String via = "<transitive>";
-
- // Always add the sources
- if (sources != null)
- {
- module.addSources(sources);
- via = Main.join(sources, ", ");
- }
-
- // If already enabled, nothing else to do
- if (module.isEnabled())
- {
- StartLog.debug("Enabled module: %s (via %s)",module.getName(),via);
- return;
- }
-
- StartLog.debug("Enabling module: %s (via %s)",module.getName(),via);
- module.setEnabled(true);
- args.parseModule(module);
- module.expandProperties(args.getProperties());
-
- // enable any parents that haven't been enabled (yet)
- Set<String> parentNames = new HashSet<>();
- parentNames.addAll(module.getParentNames());
- for(String name: parentNames)
- {
- StartLog.debug("Enable parent '%s' of module: %s",name,module.getName());
- Module parent = modules.get(name);
- if (parent == null)
- {
- // parent module doesn't exist, yet
- Path file = baseHome.getPath("modules/" + name + ".mod");
- if (FS.canReadFile(file))
- {
- parent = registerModule(file);
- parent.expandProperties(args.getProperties());
- updateParentReferencesTo(parent);
- }
- else
- {
- if (!Props.hasPropertyKey(name))
- {
- StartLog.debug("Missing module definition: [ Mod: %s | File: %s ]",name,file);
- missingModules.add(name);
- }
- }
- }
- if (parent != null)
+ if (!Props.hasPropertyKey(name))
{
- enableModule(parent,null);
+ StartLog.debug("Missing module definition: [ Mod: %s | File: %s ]",name,file);
}
+ return null;
}
}
- private void findChildren(Module module, Set<Module> ret)
- {
- ret.add(module);
- for (Module child : module.getChildEdges())
- {
- ret.add(child);
- }
- }
-
- private void findParents(Module module, Map<String, Module> ret)
- {
- ret.put(module.getName(),module);
- for (Module parent : module.getParentEdges())
- {
- ret.put(parent.getName(),parent);
- findParents(parent,ret);
- }
- }
-
- public Module get(String name)
- {
- return modules.get(name);
- }
-
- public int getMaxDepth()
- {
- return maxDepth;
- }
-
- public Set<Module> getModulesAtDepth(int depth)
- {
- Set<Module> ret = new HashSet<>();
- for (Module module : modules.values())
- {
- if (module.getDepth() == depth)
- {
- ret.add(module);
- }
- }
- return ret;
- }
-
@Override
- public Iterator<Module> iterator()
+ public void onNodeSelected(Module module)
{
- return modules.values().iterator();
+ StartLog.debug("on node selected: [%s] (%s.mod)",module.getName(),module.getFilesystemRef());
+ args.parseModule(module);
+ module.expandProperties(args.getProperties());
}
public List<String> normalizeLibs(List<Module> active)
@@ -455,30 +173,6 @@ public class Modules implements Iterable<Module>
return xmls;
}
- public Module register(Module module)
- {
- modules.put(module.getName(),module);
- return module;
- }
-
- public void registerParentsIfMissing(Module module) throws IOException
- {
- Set<String> parents = new HashSet<>(module.getParentNames());
- for (String name : parents)
- {
- if (!modules.containsKey(name))
- {
- Path file = baseHome.getPath("modules/" + name + ".mod");
- if (FS.canReadFile(file))
- {
- Module parent = registerModule(file);
- updateParentReferencesTo(parent);
- registerParentsIfMissing(parent);
- }
- }
- }
- }
-
public void registerAll() throws IOException
{
for (Path path : baseHome.getPaths("modules/*.mod"))
@@ -486,140 +180,29 @@ public class Modules implements Iterable<Module>
registerModule(path);
}
}
-
- // load missing post-expanded dependent modules
- private void normalizeDependencies() throws FileNotFoundException, IOException
- {
- Set<String> expandedModules = new HashSet<>();
- boolean done = false;
- while (!done)
- {
- done = true;
- Set<String> missingParents = new HashSet<>();
- for (Module m : modules.values())
- {
- for (String parent : m.getParentNames())
- {
- String expanded = args.getProperties().expand(parent);
- if (modules.containsKey(expanded) || missingModules.contains(parent) || expandedModules.contains(parent))
- {
- continue; // found. skip it.
- }
- done = false;
- StartLog.debug("Missing parent module %s == %s for %s",parent,expanded,m);
- missingParents.add(parent);
- }
- }
-
- for (String missingParent : missingParents)
- {
- String expanded = args.getProperties().expand(missingParent);
- Path file = baseHome.getPath("modules/" + expanded + ".mod");
- if (FS.canReadFile(file))
- {
- Module module = registerModule(file);
- updateParentReferencesTo(module);
- if (!expanded.equals(missingParent))
- {
- expandedModules.add(missingParent);
- }
- }
- else
- {
- if (Props.hasPropertyKey(expanded))
- {
- StartLog.debug("Module property not expandable (yet) [%s]",expanded);
- expandedModules.add(missingParent);
- }
- else
- {
- StartLog.debug("Missing module definition: %s expanded to %s",missingParent,expanded);
- missingModules.add(missingParent);
- }
- }
- }
- }
- }
-
- private Module registerModule(Path file) throws FileNotFoundException, IOException
+ private Module registerModule(Path file)
{
if (!FS.canReadFile(file))
{
- throw new IOException("Cannot read file: " + file);
+ throw new GraphException("Cannot read file: " + file);
}
- StartLog.debug("Registering Module: %s",baseHome.toShortForm(file));
- Module module = new Module(baseHome,file);
- return register(module);
- }
-
- public Set<String> resolveChildModulesOf(String moduleName)
- {
- Set<Module> ret = new HashSet<>();
- Module module = get(moduleName);
- findChildren(module,ret);
- return asNameSet(ret);
- }
-
- /**
- * Resolve the execution order of the enabled modules, and all dependant modules, based on depth first transitive reduction.
- *
- * @return the list of active modules (plus dependant modules), in execution order.
- */
- public List<Module> resolveEnabled()
- {
- Map<String, Module> active = new HashMap<String, Module>();
-
- for (Module module : modules.values())
+ String shortName = baseHome.toShortForm(file);
+ try
{
- if (module.isEnabled())
- {
- findParents(module,active);
- }
+ StartLog.debug("Registering Module: %s",shortName);
+ Module module = new Module(baseHome,file);
+ return register(module);
}
-
- /*
- * check against the missing modules
- *
- * Ex: npn should match anything under npn/
- */
- for (String missing : missingModules)
+ catch (Throwable t)
{
- for (String activeModule : active.keySet())
- {
- if (missing.startsWith(activeModule))
- {
- StartLog.warn("** Unable to continue, required dependency missing. [%s]",missing);
- StartLog.warn("** As configured, Jetty is unable to start due to a missing enabled module dependency.");
- StartLog.warn("** This may be due to a transitive dependency akin to spdy on npn, which resolves based on the JDK in use.");
- throw new UsageException(UsageException.ERR_BAD_ARG, "Missing referenced dependency: " + missing);
- }
- }
+ throw new GraphException("Unable to register module: " + shortName,t);
}
-
- List<Module> ordered = new ArrayList<>();
- ordered.addAll(active.values());
- Collections.sort(ordered,new Module.DepthComparator());
- return ordered;
- }
-
- public Set<String> resolveParentModulesOf(String moduleName)
- {
- Map<String, Module> ret = new HashMap<>();
- Module module = get(moduleName);
- findParents(module,ret);
- return ret.keySet();
- }
-
- private String toIndent(int depth)
- {
- char indent[] = new char[depth * 2];
- Arrays.fill(indent,' ');
- return new String(indent);
}
/**
- * Modules can have a different logical name than to their filesystem reference. This updates existing references to the filesystem form to use the logical
+ * Modules can have a different logical name than to their filesystem reference. This updates existing references to
+ * the filesystem form to use the logical
* name form.
*
* @param module
@@ -633,9 +216,9 @@ public class Modules implements Iterable<Module>
return;
}
- for (Module m : modules.values())
+ for (Module m : getNodes())
{
- Set<String> resolvedParents = new HashSet<>();
+ List<String> resolvedParents = new ArrayList<>();
for (String parent : m.getParentNames())
{
if (parent.equals(module.getFilesystemRef()))
@@ -658,10 +241,10 @@ public class Modules implements Iterable<Module>
{
StringBuilder str = new StringBuilder();
str.append("Modules[");
- str.append("count=").append(modules.size());
+ str.append("count=").append(count());
str.append(",<");
boolean delim = false;
- for (String name : modules.keySet())
+ for (String name : getNodeNames())
{
if (delim)
{
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/README.TXT b/jetty-start/src/main/java/org/eclipse/jetty/start/README.TXT
deleted file mode 100644
index fc569bc44a..0000000000
--- a/jetty-start/src/main/java/org/eclipse/jetty/start/README.TXT
+++ /dev/null
@@ -1,48 +0,0 @@
-Jetty start
------------
-
-The run directory is either the top-level of a distribution
-or jetty-distribution/target/distribution directory when built from
-source.
-
-Jetty start.jar provides a cross platform replacement for startup scripts.
-It makes use of executable JAR that builds the classpath and then executes
-jetty.
-
-To run with the demo:
-
- java -jar start.jar --enable=demo
- java -jar start.jar
-
-To run with the default modules:
-
- java -jar start.jar
-
-The default options may be specified in the start.ini file, or if
-that is not present, they are defined in the start.config file that
-is within the start.jar.
-
-To run with specific configuration file(s)
-
- java -jar start.jar etc/jetty.xml
-
-To see the available options
-
- java -jar start.jar --help
-
-To run with JSP support (if available)
-
- java -jar start.jar --module=jsp
-
-To run with JMX support
-
- java -jar start.jar --module=jmx
-
-To run with JSP & JMX support
-
- java -jar start.jar --module=jsp,jmx
-
-Note that JSP requires the jasper jars to be within $JETTY/lib/jsp These
-are currently not distributed with the eclipse release and must be
-obtained from a jetty-hightide release from codehaus.
-
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/StartArgs.java b/jetty-start/src/main/java/org/eclipse/jetty/start/StartArgs.java
index 43d9bee3f8..6f809bc93c 100644
--- a/jetty-start/src/main/java/org/eclipse/jetty/start/StartArgs.java
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/StartArgs.java
@@ -23,6 +23,7 @@ import static org.eclipse.jetty.start.UsageException.*;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
+import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collections;
@@ -112,7 +113,12 @@ public class StartArgs
private Modules allModules;
/** Should the server be run? */
private boolean run = true;
+
+ /** Download related args */
private boolean download = false;
+ private boolean licenseCheckRequired = false;
+ private boolean testingMode = false;
+
private boolean help = false;
private boolean stopCommand = false;
private boolean listModules = false;
@@ -123,7 +129,6 @@ public class StartArgs
private boolean exec = false;
private boolean approveAllLicenses = false;
- private boolean testingMode = false;
public StartArgs()
{
@@ -429,6 +434,7 @@ public class StartArgs
for (String xmlRef : module.getXmls())
{
// Straight Reference
+ xmlRef=properties.expand(xmlRef);
Path xmlfile = baseHome.getPath(xmlRef);
addUniqueXmlFile(xmlRef,xmlfile);
}
@@ -547,6 +553,46 @@ public class StartArgs
return System.getProperty("main.class",mainclass);
}
+ public Path getMavenLocalRepoDir()
+ {
+ // Try property first
+ String localRepo = getProperties().getString("maven.local.repo");
+
+ if (Utils.isBlank(localRepo))
+ {
+ // Try jetty specific env variable
+ localRepo = System.getenv("JETTY_MAVEN_LOCAL_REPO");
+ }
+
+ if (Utils.isBlank(localRepo))
+ {
+ // Try generic env variable
+ localRepo = System.getenv("MAVEN_LOCAL_REPO");
+ }
+
+ // TODO: load & use $HOME/.m2/settings.xml ?
+ // TODO: possibly use Eclipse Aether to manage it ?
+ // TODO: see https://bugs.eclipse.org/bugs/show_bug.cgi?id=449511
+
+ // Still blank? then its not specified
+ if (Utils.isBlank(localRepo))
+ {
+ return null;
+ }
+
+ Path localRepoDir = new File(localRepo).toPath();
+ localRepoDir = localRepoDir.normalize().toAbsolutePath();
+ if (Files.exists(localRepoDir) && Files.isDirectory(localRepoDir))
+ {
+ return localRepoDir;
+ }
+
+ StartLog.warn("Not a valid maven local repository directory: %s",localRepoDir);
+
+ // Not a valid repository directory, skip it
+ return null;
+ }
+
public String getModuleGraphFilename()
{
return moduleGraphFilename;
@@ -607,6 +653,11 @@ public class StartArgs
return exec;
}
+ public boolean isLicenseCheckRequired()
+ {
+ return licenseCheckRequired;
+ }
+
public boolean isNormalMainClass()
{
return SERVER_MAIN.equals(getMainClassname());
@@ -743,6 +794,7 @@ public class StartArgs
{
run = false;
download = true;
+ licenseCheckRequired = true;
return;
}
@@ -812,6 +864,7 @@ public class StartArgs
addToStartdIni.addAll(moduleNames);
run = false;
download = true;
+ licenseCheckRequired = true;
return;
}
@@ -822,6 +875,7 @@ public class StartArgs
addToStartIni.addAll(moduleNames);
run = false;
download = true;
+ licenseCheckRequired = true;
return;
}
@@ -1042,5 +1096,4 @@ public class StartArgs
builder.append("]");
return builder.toString();
}
-
}
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/UsageException.java b/jetty-start/src/main/java/org/eclipse/jetty/start/UsageException.java
index d42794d8a5..c78aa9d324 100644
--- a/jetty-start/src/main/java/org/eclipse/jetty/start/UsageException.java
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/UsageException.java
@@ -27,8 +27,9 @@ public class UsageException extends RuntimeException
public static final int ERR_LOGGING = -1;
public static final int ERR_INVOKE_MAIN = -2;
public static final int ERR_NOT_STOPPED = -4;
- public static final int ERR_UNKNOWN = -5;
- public static final int ERR_BAD_ARG = -6;
+ public static final int ERR_BAD_ARG = -5;
+ public static final int ERR_BAD_GRAPH = -6;
+ public static final int ERR_UNKNOWN = -9;
private int exitCode;
public UsageException(int exitCode, String format, Object... objs)
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/Utils.java b/jetty-start/src/main/java/org/eclipse/jetty/start/Utils.java
new file mode 100644
index 0000000000..89ec61eb3e
--- /dev/null
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/Utils.java
@@ -0,0 +1,122 @@
+//
+// ========================================================================
+// 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;
+
+import java.util.Collection;
+
+public final class Utils
+{
+ public static String join(Object[] arr, String delim)
+ {
+ if (arr == null)
+ {
+ return "";
+ }
+
+ return join(arr,0,arr.length,delim);
+ }
+
+ public static String join(Object[] arr, int start, int end, String delim)
+ {
+ if (arr == null)
+ {
+ return "";
+ }
+ StringBuilder str = new StringBuilder();
+ for (int i = start; i < end; i++)
+ {
+ if (i > start)
+ {
+ str.append(delim);
+ }
+ str.append(arr[i]);
+ }
+ return str.toString();
+ }
+
+ public static String join(Collection<?> objs, String delim)
+ {
+ if (objs == null)
+ {
+ return "";
+ }
+ StringBuilder str = new StringBuilder();
+ boolean needDelim = false;
+ for (Object obj : objs)
+ {
+ if (needDelim)
+ {
+ str.append(delim);
+ }
+ str.append(obj);
+ needDelim = true;
+ }
+ return str.toString();
+ }
+
+ /**
+ * Is String null, empty, or consisting of only whitespace.
+ *
+ * @param value
+ * the value to test
+ * @return true if null, empty, or consisting of only whitespace
+ */
+ public static boolean isBlank(String value)
+ {
+ if (value == null)
+ {
+ return true;
+ }
+ int len = value.length();
+ for (int i = 0; i < len; i++)
+ {
+ int c = value.codePointAt(i);
+ if (!Character.isWhitespace(c))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ /**
+ * Is String valid and has something other than whitespace
+ *
+ * @param value
+ * the value to test
+ * @return true if String has something other than whitespace
+ */
+ public static boolean isNotBlank(String value)
+ {
+ if (value == null)
+ {
+ return false;
+ }
+ int len = value.length();
+ for (int i = 0; i < len; i++)
+ {
+ int c = value.codePointAt(i);
+ if (!Character.isWhitespace(c))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+}
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/builders/StartDirBuilder.java b/jetty-start/src/main/java/org/eclipse/jetty/start/builders/StartDirBuilder.java
new file mode 100644
index 0000000000..491869c011
--- /dev/null
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/builders/StartDirBuilder.java
@@ -0,0 +1,98 @@
+//
+// ========================================================================
+// 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.builders;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.StandardOpenOption;
+
+import org.eclipse.jetty.start.BaseBuilder;
+import org.eclipse.jetty.start.BaseHome;
+import org.eclipse.jetty.start.FS;
+import org.eclipse.jetty.start.Module;
+import org.eclipse.jetty.start.StartLog;
+import org.eclipse.jetty.start.graph.OnlyTransitivePredicate;
+
+/**
+ * Management of the <code>${jetty.base}/start.d/</code> based configuration.
+ * <p>
+ * Implementation of the <code>--add-to-startd=[name]</code> command line behavior
+ */
+public class StartDirBuilder implements BaseBuilder.Config
+{
+ private final BaseHome baseHome;
+ private final Path startDir;
+
+ public StartDirBuilder(BaseBuilder baseBuilder) throws IOException
+ {
+ this.baseHome = baseBuilder.getBaseHome();
+ this.startDir = baseHome.getBasePath("start.d");
+ FS.ensureDirectoryExists(startDir);
+ }
+
+ @Override
+ public boolean addModule(Module module) throws IOException
+ {
+ if (module.isVirtual())
+ {
+ // skip, no need to reference
+ StartLog.info("%-15s skipping (virtual module)",module.getName());
+ return false;
+ }
+
+ String mode = "";
+ if (module.matches(OnlyTransitivePredicate.INSTANCE))
+ {
+ mode = "(transitively) ";
+ }
+
+ // Create start.d/{name}.ini
+ Path ini = startDir.resolve(module.getName() + ".ini");
+ StartLog.info("%-15s initialised %sin %s",module.getName(),mode,baseHome.toShortForm(ini));
+
+ try (BufferedWriter writer = Files.newBufferedWriter(ini,StandardCharsets.UTF_8,StandardOpenOption.CREATE,StandardOpenOption.TRUNCATE_EXISTING))
+ {
+ writeModuleSection(writer,module);
+ }
+
+ return true;
+ }
+
+ protected void writeModuleSection(BufferedWriter writer, Module module)
+ {
+ PrintWriter out = new PrintWriter(writer);
+
+ out.println("# --------------------------------------- ");
+ out.println("# Module: " + module.getName());
+
+ out.println("--module=" + module.getName());
+
+ for (String line : module.getDefaultConfig())
+ {
+ out.println(line);
+ }
+
+ out.println();
+ out.flush();
+ }
+}
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/builders/StartIniBuilder.java b/jetty-start/src/main/java/org/eclipse/jetty/start/builders/StartIniBuilder.java
new file mode 100644
index 0000000000..0440beb292
--- /dev/null
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/builders/StartIniBuilder.java
@@ -0,0 +1,142 @@
+//
+// ========================================================================
+// 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.builders;
+
+import java.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.StandardOpenOption;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.jetty.start.BaseBuilder;
+import org.eclipse.jetty.start.BaseHome;
+import org.eclipse.jetty.start.Module;
+import org.eclipse.jetty.start.Props;
+import org.eclipse.jetty.start.StartLog;
+import org.eclipse.jetty.start.graph.OnlyTransitivePredicate;
+
+/**
+ * Management of the <code>${jetty.base}/start.ini</code> based configuration.
+ * <p>
+ * Implementation of the <code>--add-to-start=[name]</code> command line
+ * behavior
+ */
+public class StartIniBuilder implements BaseBuilder.Config
+{
+ private final BaseHome baseHome;
+ private final Path startIni;
+
+ /* List of modules already present in start.ini */
+ private Set<String> modulesPresent = new HashSet<>();
+
+ /* List of properties (keys only) already present in start.ini */
+ private Set<String> propsPresent = new HashSet<>();
+
+ public StartIniBuilder(BaseBuilder baseBuilder) throws IOException
+ {
+ this.baseHome = baseBuilder.getBaseHome();
+ this.startIni = baseHome.getBasePath("start.ini");
+
+ if (Files.exists(startIni))
+ {
+ parseIni();
+ }
+ }
+
+ private void parseIni() throws IOException
+ {
+ try (BufferedReader reader = Files.newBufferedReader(startIni,StandardCharsets.UTF_8))
+ {
+ String line;
+ while ((line = reader.readLine()) != null)
+ {
+ line = line.trim();
+ if (line.startsWith("--module="))
+ {
+ List<String> moduleNames = Props.getValues(line);
+ this.modulesPresent.addAll(moduleNames);
+ }
+ else if (!line.startsWith("-") && line.contains("="))
+ {
+ String key = line.substring(0,line.indexOf('='));
+ this.propsPresent.add(key);
+ }
+ }
+ }
+ }
+
+ @Override
+ public boolean addModule(Module module) throws IOException
+ {
+ if (modulesPresent.contains(module.getName()))
+ {
+ StartLog.info("%-15s already initialised in %s",module.getName(),baseHome.toShortForm(startIni));
+ // skip, already present
+ return false;
+ }
+
+ if (module.isVirtual())
+ {
+ // skip, no need to reference
+ StartLog.info("%-15s skipping (virtual module)",module.getName());
+ return false;
+ }
+
+ String mode = "";
+ if (module.matches(OnlyTransitivePredicate.INSTANCE))
+ {
+ mode = "(transitively) ";
+ }
+
+ StartLog.info("%-15s initialised %sin %s",module.getName(),mode,baseHome.toShortForm(startIni));
+
+ // Append to start.ini
+ try (BufferedWriter writer = Files.newBufferedWriter(startIni,StandardCharsets.UTF_8,StandardOpenOption.APPEND,StandardOpenOption.CREATE))
+ {
+ writeModuleSection(writer,module);
+ }
+
+ return true;
+ }
+
+ protected void writeModuleSection(BufferedWriter writer, Module module)
+ {
+ PrintWriter out = new PrintWriter(writer);
+
+ out.println("# --------------------------------------- ");
+ out.println("# Module: " + module.getName());
+
+ out.println("--module=" + module.getName());
+
+ for (String line : module.getDefaultConfig())
+ {
+ // TODO: validate property keys
+ out.println(line);
+ }
+
+ out.println();
+ out.flush();
+ }
+}
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/config/CommandLineConfigSource.java b/jetty-start/src/main/java/org/eclipse/jetty/start/config/CommandLineConfigSource.java
index 5adc475ff1..c6f2368a23 100644
--- a/jetty-start/src/main/java/org/eclipse/jetty/start/config/CommandLineConfigSource.java
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/config/CommandLineConfigSource.java
@@ -32,6 +32,7 @@ import org.eclipse.jetty.start.Props;
import org.eclipse.jetty.start.Props.Prop;
import org.eclipse.jetty.start.RawArgs;
import org.eclipse.jetty.start.UsageException;
+import org.eclipse.jetty.start.Utils;
/**
* Configuration Source representing the Command Line arguments.
@@ -69,14 +70,14 @@ public class CommandLineConfigSource implements ConfigSource
{
// If a jetty property is defined, use it
Prop prop = this.props.getProp(BaseHome.JETTY_BASE,false);
- if (prop != null && !isEmpty(prop.value))
+ if (prop != null && !Utils.isBlank(prop.value))
{
return FS.toPath(prop.value);
}
// If a system property is defined, use it
String val = System.getProperty(BaseHome.JETTY_BASE);
- if (!isEmpty(val))
+ if (!Utils.isBlank(val))
{
return FS.toPath(val);
}
@@ -91,14 +92,14 @@ public class CommandLineConfigSource implements ConfigSource
{
// If a jetty property is defined, use it
Prop prop = this.props.getProp(BaseHome.JETTY_HOME,false);
- if (prop != null && !isEmpty(prop.value))
+ if (prop != null && !Utils.isBlank(prop.value))
{
return FS.toPath(prop.value);
}
// If a system property is defined, use it
String val = System.getProperty(BaseHome.JETTY_HOME);
- if (!isEmpty(val))
+ if (!Utils.isBlank(val))
{
return FS.toPath(val);
}
@@ -130,24 +131,6 @@ public class CommandLineConfigSource implements ConfigSource
return home;
}
- private boolean isEmpty(String value)
- {
- if (value == null)
- {
- return true;
- }
- int len = value.length();
- for (int i = 0; i < len; i++)
- {
- int c = value.codePointAt(i);
- if (!Character.isWhitespace(c))
- {
- return false;
- }
- }
- return true;
- }
-
@Override
public boolean equals(Object obj)
{
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/fileinits/MavenLocalRepoFileInitializer.java b/jetty-start/src/main/java/org/eclipse/jetty/start/fileinits/MavenLocalRepoFileInitializer.java
new file mode 100644
index 0000000000..c2555a08fa
--- /dev/null
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/fileinits/MavenLocalRepoFileInitializer.java
@@ -0,0 +1,194 @@
+//
+// ========================================================================
+// 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.fileinits;
+
+import java.io.IOException;
+import java.net.URI;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+import org.eclipse.jetty.start.BaseHome;
+import org.eclipse.jetty.start.FS;
+import org.eclipse.jetty.start.FileInitializer;
+import org.eclipse.jetty.start.StartLog;
+import org.eclipse.jetty.start.Utils;
+
+/**
+ * Attempt to download a <code>maven://</code> URI, by first attempting to find
+ * the resource in the maven repository system (starting with local, then
+ * central)
+ * <p>
+ * Valid URI Formats:
+ * <dl>
+ * <dt><code>maven://&lt;groupId>/&lt;artifactId>/&lt;version></code></dt>
+ * <dd>minimum requirement (type defaults to <code>jar</code>, with no
+ * classifier)</dd>
+ * <dt><code>maven://&lt;groupId>/&lt;artifactId>/&lt;version>/&lt;type></code></dt>
+ * <dd>optional type requirement</dd>
+ * <dt>
+ * <code>maven://&lt;groupId>/&lt;artifactId>/&lt;version>/&lt;type>/&lt;classifier></code>
+ * </dt>
+ * <dd>optional type and classifier requirement</dd>
+ * </dl>
+ */
+public class MavenLocalRepoFileInitializer extends UriFileInitializer implements FileInitializer
+{
+ public static class Coordinates
+ {
+ public String groupId;
+ public String artifactId;
+ public String version;
+ public String type;
+ public String classifier;
+
+ public String toPath()
+ {
+ StringBuilder pathlike = new StringBuilder();
+ pathlike.append(groupId.replace('.','/'));
+ pathlike.append('/').append(artifactId);
+ pathlike.append('/').append(version);
+ pathlike.append('/').append(artifactId);
+ pathlike.append('-').append(version);
+ if (classifier != null)
+ {
+ pathlike.append('-').append(classifier);
+ }
+ pathlike.append('.').append(type);
+ return pathlike.toString();
+ }
+
+ public URI toCentralURI()
+ {
+ return URI.create("http://central.maven.org/maven2/" + toPath());
+ }
+ }
+
+ private Path localRepositoryDir;
+
+ public MavenLocalRepoFileInitializer(BaseHome baseHome)
+ {
+ this(baseHome,null);
+ }
+
+ public MavenLocalRepoFileInitializer(BaseHome baseHome, Path localRepoDir)
+ {
+ super(baseHome);
+ this.localRepositoryDir = localRepoDir;
+ }
+
+ @Override
+ public boolean init(URI uri, Path file) throws IOException
+ {
+ Coordinates coords = getCoordinates(uri);
+ if (coords == null)
+ {
+ // Skip, not a maven:// URI
+ return false;
+ }
+
+ if (isFilePresent(file))
+ {
+ // All done
+ return true;
+ }
+
+ // If using local repository
+ if (this.localRepositoryDir != null)
+ {
+ // Grab copy from local repository (download if needed to local
+ // repository)
+ Path localRepoFile = getLocalRepoFile(coords);
+ StartLog.log("COPY","%s to %s",localRepoFile,baseHome.toShortForm(file));
+ Files.copy(localRepoFile,file);
+ }
+ else
+ {
+ // normal non-local repo version
+ download(coords.toCentralURI(),file);
+ }
+ return true;
+ }
+
+ private Path getLocalRepoFile(Coordinates coords) throws IOException
+ {
+ Path localFile = localRepositoryDir.resolve(coords.toPath());
+ if (FS.canReadFile(localFile))
+ {
+ return localFile;
+ }
+
+ // Download, if needed
+ download(coords.toCentralURI(),localFile);
+ return localFile;
+ }
+
+ public Coordinates getCoordinates(URI uri)
+ {
+ if (!"maven".equalsIgnoreCase(uri.getScheme()))
+ {
+ return null;
+ }
+
+ String ssp = uri.getSchemeSpecificPart();
+
+ if (ssp.startsWith("//"))
+ {
+ ssp = ssp.substring(2);
+ }
+
+ String parts[] = ssp.split("/");
+
+ if (StartLog.isDebugEnabled())
+ {
+ StartLog.debug("ssp = %s",ssp);
+ StartLog.debug("parts = %d",parts.length);
+ for (int i = 0; i < parts.length; i++)
+ {
+ StartLog.debug(" part[%2d]: [%s]",i,parts[i]);
+ }
+ }
+
+ if (parts.length < 3)
+ {
+ throw new RuntimeException("Not a valid maven:// uri - " + uri);
+ }
+
+ Coordinates coords = new Coordinates();
+ coords.groupId = parts[0];
+ coords.artifactId = parts[1];
+ coords.version = parts[2];
+ coords.type = "jar";
+ coords.classifier = null;
+
+ if (parts.length >= 4)
+ {
+ if (Utils.isNotBlank(parts[3]))
+ {
+ coords.type = parts[3];
+ }
+
+ if ((parts.length == 5) && (Utils.isNotBlank(parts[4])))
+ {
+ coords.classifier = parts[4];
+ }
+ }
+
+ return coords;
+ }
+}
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/fileinits/TestFileInitializer.java b/jetty-start/src/main/java/org/eclipse/jetty/start/fileinits/TestFileInitializer.java
new file mode 100644
index 0000000000..f9eb87deb2
--- /dev/null
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/fileinits/TestFileInitializer.java
@@ -0,0 +1,44 @@
+//
+// ========================================================================
+// 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.fileinits;
+
+import java.io.IOException;
+import java.net.URI;
+import java.nio.file.Path;
+
+import org.eclipse.jetty.start.FS;
+import org.eclipse.jetty.start.FileInitializer;
+import org.eclipse.jetty.start.StartLog;
+
+/**
+ * In a start testing scenario, it is often not important to actually download
+ * or initialize a file, this implementation is merely a no-op for the
+ * {@link FileInitializer}
+ */
+public class TestFileInitializer implements FileInitializer
+{
+ @Override
+ public boolean init(URI uri, Path file) throws IOException
+ {
+ FS.ensureDirectoryExists(file.getParent());
+
+ StartLog.log("TESTING MODE","Skipping download of " + uri);
+ return true;
+ }
+}
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/fileinits/UriFileInitializer.java b/jetty-start/src/main/java/org/eclipse/jetty/start/fileinits/UriFileInitializer.java
new file mode 100644
index 0000000000..5fa1db4468
--- /dev/null
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/fileinits/UriFileInitializer.java
@@ -0,0 +1,137 @@
+//
+// ========================================================================
+// 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.fileinits;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.URI;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.StandardOpenOption;
+
+import org.eclipse.jetty.start.BaseHome;
+import org.eclipse.jetty.start.FS;
+import org.eclipse.jetty.start.FileInitializer;
+import org.eclipse.jetty.start.StartLog;
+
+public class UriFileInitializer implements FileInitializer
+{
+ private final static String[] SUPPORTED_SCHEMES = { "http", "https" };
+ protected final BaseHome baseHome;
+
+ public UriFileInitializer(BaseHome baseHome)
+ {
+ this.baseHome = baseHome;
+ }
+
+ @Override
+ public boolean init(URI uri, Path file) throws IOException
+ {
+ if (!isSupportedScheme(uri))
+ {
+ // Not a supported scheme.
+ return false;
+ }
+
+ if(isFilePresent(file))
+ {
+ // All done
+ return true;
+ }
+
+ download(uri,file);
+
+ return true;
+ }
+
+ protected void download(URI uri, Path file) throws IOException
+ {
+ StartLog.log("DOWNLOAD","%s to %s",uri,baseHome.toShortForm(file));
+
+ FS.ensureDirectoryExists(file.getParent());
+
+ HttpURLConnection http = (HttpURLConnection)uri.toURL().openConnection();
+ http.setInstanceFollowRedirects(true);
+ http.setAllowUserInteraction(false);
+
+ int status = http.getResponseCode();
+
+ if(status != HttpURLConnection.HTTP_OK)
+ {
+ throw new IOException("URL GET Failure [" + status + "/" + http.getResponseMessage() + "] on " + uri);
+ }
+
+ byte[] buf = new byte[8192];
+ try (InputStream in = http.getInputStream(); OutputStream out = Files.newOutputStream(file,StandardOpenOption.CREATE_NEW,StandardOpenOption.WRITE))
+ {
+ while (true)
+ {
+ int len = in.read(buf);
+
+ if (len > 0)
+ {
+ out.write(buf,0,len);
+ }
+ if (len < 0)
+ {
+ break;
+ }
+ }
+ }
+ }
+
+ protected boolean isFilePresent(Path file) throws IOException
+ {
+ if (Files.exists(file))
+ {
+ if (Files.isDirectory(file))
+ {
+ throw new IOException("Directory in the way: " + file.toAbsolutePath());
+ }
+
+ if (!Files.isReadable(file))
+ {
+ throw new IOException("File not readable: " + file.toAbsolutePath());
+ }
+
+ return true;
+ }
+
+ return false;
+ }
+
+ private boolean isSupportedScheme(URI uri)
+ {
+ String scheme = uri.getScheme();
+ if (scheme == null)
+ {
+ return false;
+ }
+ for (String supported : SUPPORTED_SCHEMES)
+ {
+ if (supported.equalsIgnoreCase(scheme))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+}
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/graph/AllPredicate.java b/jetty-start/src/main/java/org/eclipse/jetty/start/graph/AllPredicate.java
new file mode 100644
index 0000000000..85ea61cb60
--- /dev/null
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/graph/AllPredicate.java
@@ -0,0 +1,31 @@
+//
+// ========================================================================
+// 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.graph;
+
+/**
+ * Match on everything.
+ */
+public class AllPredicate implements Predicate
+{
+ @Override
+ public boolean match(Node<?> node)
+ {
+ return true;
+ }
+} \ No newline at end of file
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/graph/AndPredicate.java b/jetty-start/src/main/java/org/eclipse/jetty/start/graph/AndPredicate.java
new file mode 100644
index 0000000000..2234c4f1f2
--- /dev/null
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/graph/AndPredicate.java
@@ -0,0 +1,46 @@
+//
+// ========================================================================
+// 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.graph;
+
+/**
+ * Match on multiple predicates.
+ */
+public class AndPredicate implements Predicate
+{
+ private final Predicate predicates[];
+
+ public AndPredicate(Predicate... predicates)
+ {
+ this.predicates = predicates;
+ }
+
+ @Override
+ public boolean match(Node<?> node)
+ {
+ for (Predicate predicate : this.predicates)
+ {
+ if (!predicate.match(node))
+ {
+ return false;
+ }
+ }
+
+ return true;
+ }
+} \ No newline at end of file
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/graph/AnySelectionPredicate.java b/jetty-start/src/main/java/org/eclipse/jetty/start/graph/AnySelectionPredicate.java
new file mode 100644
index 0000000000..667edbc00d
--- /dev/null
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/graph/AnySelectionPredicate.java
@@ -0,0 +1,28 @@
+//
+// ========================================================================
+// 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.graph;
+
+public class AnySelectionPredicate implements Predicate
+{
+ @Override
+ public boolean match(Node<?> input)
+ {
+ return !input.getSelections().isEmpty();
+ }
+}
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/graph/Graph.java b/jetty-start/src/main/java/org/eclipse/jetty/start/graph/Graph.java
new file mode 100644
index 0000000000..031cb2219f
--- /dev/null
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/graph/Graph.java
@@ -0,0 +1,499 @@
+//
+// ========================================================================
+// 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.graph;
+
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.Stack;
+
+import org.eclipse.jetty.start.Props;
+import org.eclipse.jetty.start.StartLog;
+import org.eclipse.jetty.start.Utils;
+
+/**
+ * Basic Graph
+ */
+public abstract class Graph<T extends Node<T>> implements Iterable<T>
+{
+ private String selectionTerm = "select";
+ private String nodeTerm = "node";
+ private Map<String, T> nodes = new LinkedHashMap<>();
+ private int maxDepth = -1;
+
+ protected Set<String> asNameSet(Set<T> nodeSet)
+ {
+ Set<String> ret = new HashSet<>();
+ for (T node : nodeSet)
+ {
+ ret.add(node.getName());
+ }
+ return ret;
+ }
+
+ private void assertNoCycle(T node, Stack<String> refs)
+ {
+ for (T parent : node.getParentEdges())
+ {
+ if (refs.contains(parent.getName()))
+ {
+ // Cycle detected.
+ StringBuilder err = new StringBuilder();
+ err.append("A cyclic reference in the ");
+ err.append(this.getClass().getSimpleName());
+ err.append(" has been detected: ");
+ for (int i = 0; i < refs.size(); i++)
+ {
+ if (i > 0)
+ {
+ err.append(" -> ");
+ }
+ err.append(refs.get(i));
+ }
+ err.append(" -> ").append(parent.getName());
+ throw new IllegalStateException(err.toString());
+ }
+
+ refs.push(parent.getName());
+ assertNoCycle(parent,refs);
+ refs.pop();
+ }
+ }
+
+ private void bfsCalculateDepth(final T node, final int depthNow)
+ {
+ int depth = depthNow + 1;
+
+ // Set depth on every child first
+ for (T child : node.getChildEdges())
+ {
+ child.setDepth(Math.max(depth,child.getDepth()));
+ this.maxDepth = Math.max(this.maxDepth,child.getDepth());
+ }
+
+ // Dive down
+ for (T child : node.getChildEdges())
+ {
+ bfsCalculateDepth(child,depth);
+ }
+ }
+
+ public void buildGraph() throws FileNotFoundException, IOException
+ {
+ // Connect edges
+ // Make a copy of nodes.values() as the list could be modified
+ List<T> nodeList = new ArrayList<>(nodes.values());
+ for (T node : nodeList)
+ {
+ for (String parentName : node.getParentNames())
+ {
+ T parent = get(parentName);
+
+ if (parent == null)
+ {
+ parent = resolveNode(parentName);
+ }
+
+ if (parent == null)
+ {
+ if (Props.hasPropertyKey(parentName))
+ {
+ StartLog.debug("Module property not expandable (yet) [%s]",parentName);
+ }
+ else
+ {
+ StartLog.warn("Module not found [%s]",parentName);
+ }
+ }
+ else
+ {
+ node.addParentEdge(parent);
+ parent.addChildEdge(node);
+ }
+ }
+
+ for (String optionalParentName : node.getOptionalParentNames())
+ {
+ T optional = get(optionalParentName);
+ if (optional == null)
+ {
+ StartLog.debug("Optional module not found [%s]",optionalParentName);
+ }
+ else if (optional.isSelected())
+ {
+ node.addParentEdge(optional);
+ optional.addChildEdge(node);
+ }
+ }
+ }
+
+ // Verify there is no cyclic references
+ Stack<String> refs = new Stack<>();
+ for (T module : nodes.values())
+ {
+ refs.push(module.getName());
+ assertNoCycle(module,refs);
+ refs.pop();
+ }
+
+ // Calculate depth of all modules for sorting later
+ for (T module : nodes.values())
+ {
+ if (module.getParentEdges().isEmpty())
+ {
+ bfsCalculateDepth(module,0);
+ }
+ }
+ }
+
+ public boolean containsNode(String name)
+ {
+ return nodes.containsKey(name);
+ }
+
+ public int count()
+ {
+ return nodes.size();
+ }
+
+ public void dumpSelectedTree()
+ {
+ List<T> ordered = new ArrayList<>();
+ ordered.addAll(nodes.values());
+ Collections.sort(ordered,new NodeDepthComparator());
+
+ List<T> active = getSelected();
+
+ for (T module : ordered)
+ {
+ if (active.contains(module))
+ {
+ // Show module name
+ String indent = toIndent(module.getDepth());
+ boolean transitive = module.matches(OnlyTransitivePredicate.INSTANCE);
+ System.out.printf("%s + %s: %s [%s]%n",indent,toCap(nodeTerm),module.getName(),transitive?"transitive":"selected");
+ }
+ }
+ }
+
+ public void dumpSelected()
+ {
+ List<T> ordered = new ArrayList<>();
+ ordered.addAll(nodes.values());
+ Collections.sort(ordered,new NodeDepthComparator());
+
+ List<T> active = getSelected();
+
+ for (T module : ordered)
+ {
+ if (active.contains(module))
+ {
+ // Show module name
+ boolean transitive = module.matches(OnlyTransitivePredicate.INSTANCE);
+ System.out.printf(" %3d) %-15s ",module.getDepth() + 1,module.getName());
+ if (transitive)
+ {
+ System.out.println("<transitive> ");
+ }
+ else
+ {
+ List<String> hows = new ArrayList<>();
+ for (Selection selection : module.getSelections())
+ {
+ if (selection.isExplicit())
+ {
+ hows.add(selection.getHow());
+ }
+ }
+ Collections.sort(hows);
+ System.out.println(Utils.join(hows,", "));
+ }
+ }
+ }
+ }
+
+ protected void findChildren(T module, Set<T> ret)
+ {
+ ret.add(module);
+ for (T child : module.getChildEdges())
+ {
+ ret.add(child);
+ }
+ }
+
+ protected void findParents(T module, Map<String, T> ret)
+ {
+ ret.put(module.getName(),module);
+ for (T parent : module.getParentEdges())
+ {
+ ret.put(parent.getName(),parent);
+ findParents(parent,ret);
+ }
+ }
+
+ public T get(String name)
+ {
+ return nodes.get(name);
+ }
+
+ /**
+ * Get the list of Selected nodes.
+ */
+ public List<T> getSelected()
+ {
+ return getMatching(new AnySelectionPredicate());
+ }
+
+ /**
+ * Get the Nodes from the tree that match the provided predicate.
+ *
+ * @param predicate
+ * the way to match nodes
+ * @return the list of matching nodes in execution order.
+ */
+ public List<T> getMatching(Predicate predicate)
+ {
+ List<T> selected = new ArrayList<T>();
+
+ for (T node : nodes.values())
+ {
+ if (predicate.match(node))
+ {
+ selected.add(node);
+ }
+ }
+
+ Collections.sort(selected,new NodeDepthComparator());
+ return selected;
+ }
+
+ public int getMaxDepth()
+ {
+ return maxDepth;
+ }
+
+ public Set<T> getModulesAtDepth(int depth)
+ {
+ Set<T> ret = new HashSet<>();
+ for (T node : nodes.values())
+ {
+ if (node.getDepth() == depth)
+ {
+ ret.add(node);
+ }
+ }
+ return ret;
+ }
+
+ public Collection<String> getNodeNames()
+ {
+ return nodes.keySet();
+ }
+
+ public Collection<T> getNodes()
+ {
+ return nodes.values();
+ }
+
+ public String getNodeTerm()
+ {
+ return nodeTerm;
+ }
+
+ public String getSelectionTerm()
+ {
+ return selectionTerm;
+ }
+
+ @Override
+ public Iterator<T> iterator()
+ {
+ return nodes.values().iterator();
+ }
+
+ public abstract void onNodeSelected(T node);
+
+ public T register(T node)
+ {
+ StartLog.debug("Registering Node: [%s] %s",node.getName(),node);
+ nodes.put(node.getName(),node);
+ return node;
+ }
+
+ public Set<String> resolveChildNodesOf(String nodeName)
+ {
+ Set<T> ret = new HashSet<>();
+ T module = get(nodeName);
+ findChildren(module,ret);
+ return asNameSet(ret);
+ }
+
+ /**
+ * Resolve a node just in time.
+ * <p>
+ * Useful for nodes that are virtual/transient in nature (such as the jsp/jstl/alpn modules)
+ */
+ public abstract T resolveNode(String name);
+
+ public Set<String> resolveParentModulesOf(String nodeName)
+ {
+ Map<String, T> ret = new HashMap<>();
+ T node = get(nodeName);
+ findParents(node,ret);
+ return ret.keySet();
+ }
+
+ public int selectNode(Predicate nodePredicate, Selection selection)
+ {
+ int count = 0;
+ List<T> matches = getMatching(nodePredicate);
+ if (matches.isEmpty())
+ {
+ StringBuilder err = new StringBuilder();
+ err.append("WARNING: Cannot ").append(selectionTerm);
+ err.append(" requested ").append(nodeTerm);
+ err.append("s. ").append(nodePredicate);
+ err.append(" returned no matches.");
+ StartLog.warn(err.toString());
+ return count;
+ }
+
+ // select them
+ for (T node : matches)
+ {
+ count += selectNode(node,selection);
+ }
+
+ return count;
+ }
+
+ public int selectNode(String name, Selection selection)
+ {
+ int count = 0;
+ T node = get(name);
+ if (node == null)
+ {
+ StringBuilder err = new StringBuilder();
+ err.append("Cannot ").append(selectionTerm);
+ err.append(" requested ").append(nodeTerm);
+ err.append(" [").append(name).append("]: not a valid ");
+ err.append(nodeTerm).append(" name.");
+ StartLog.warn(err.toString());
+ return count;
+ }
+
+ count += selectNode(node,selection);
+
+ return count;
+ }
+
+ private int selectNode(T node, Selection selection)
+ {
+ int count = 0;
+
+ if (node.getSelections().contains(selection))
+ {
+ // Already enabled with this selection.
+ return count;
+ }
+
+ StartLog.debug("%s %s: %s (via %s)",toCap(selectionTerm),nodeTerm,node.getName(),selection);
+
+ boolean newlySelected = node.getSelections().isEmpty();
+
+ // Add self
+ node.addSelection(selection);
+ if (newlySelected)
+ {
+ onNodeSelected(node);
+ }
+ count++;
+
+ // Walk transitive
+ Selection transitive = selection.asTransitive();
+ List<String> parentNames = new ArrayList<>();
+ parentNames.addAll(node.getParentNames());
+
+ count += selectNodes(parentNames,transitive);
+
+ return count;
+ }
+
+ public int selectNodes(Collection<String> names, Selection selection)
+ {
+ StartLog.debug("%s [%s] (via %s)",toCap(selectionTerm),Utils.join(names,", "),selection);
+
+ int count = 0;
+
+ for (String name : names)
+ {
+ T node = get(name);
+ // Node doesn't exist yet (try to resolve it it just-in-time)
+ if (node == null)
+ {
+ StartLog.debug("resolving node [%s]",name);
+ node = resolveNode(name);
+ }
+ // Node still doesn't exist? this is now an invalid graph.
+ if (node == null)
+ {
+ throw new GraphException("Missing referenced dependency: " + name);
+ }
+
+ count += selectNode(node.getName(),selection);
+ }
+
+ return count;
+ }
+
+ public void setNodeTerm(String nodeTerm)
+ {
+ this.nodeTerm = nodeTerm;
+ }
+
+ public void setSelectionTerm(String selectionTerm)
+ {
+ this.selectionTerm = selectionTerm;
+ }
+
+ private String toCap(String str)
+ {
+ StringBuilder cap = new StringBuilder();
+ cap.append(Character.toUpperCase(str.charAt(0)));
+ cap.append(str.substring(1));
+ return cap.toString();
+ }
+
+ private String toIndent(int depth)
+ {
+ char indent[] = new char[depth * 2];
+ Arrays.fill(indent,' ');
+ return new String(indent);
+ }
+}
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/graph/GraphException.java b/jetty-start/src/main/java/org/eclipse/jetty/start/graph/GraphException.java
new file mode 100644
index 0000000000..b616432ff1
--- /dev/null
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/graph/GraphException.java
@@ -0,0 +1,36 @@
+//
+// ========================================================================
+// 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.graph;
+
+/**
+ * A non-recoverable graph exception
+ */
+@SuppressWarnings("serial")
+public class GraphException extends RuntimeException
+{
+ public GraphException(String message, Throwable cause)
+ {
+ super(message,cause);
+ }
+
+ public GraphException(String message)
+ {
+ super(message);
+ }
+}
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/graph/HowPredicate.java b/jetty-start/src/main/java/org/eclipse/jetty/start/graph/HowPredicate.java
new file mode 100644
index 0000000000..1e977d01c9
--- /dev/null
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/graph/HowPredicate.java
@@ -0,0 +1,45 @@
+//
+// ========================================================================
+// 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.graph;
+
+/**
+ * Predicate against a specific {@link Selection#getHow()}
+ */
+public class HowPredicate implements Predicate
+{
+ private final String how;
+
+ public HowPredicate(String how)
+ {
+ this.how = how;
+ }
+
+ @Override
+ public boolean match(Node<?> node)
+ {
+ for (Selection selection : node.getSelections())
+ {
+ if (how.equalsIgnoreCase(selection.getHow()))
+ {
+ return true;
+ }
+ }
+ return false;
+ }
+} \ No newline at end of file
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/graph/HowSetPredicate.java b/jetty-start/src/main/java/org/eclipse/jetty/start/graph/HowSetPredicate.java
new file mode 100644
index 0000000000..ac189674cf
--- /dev/null
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/graph/HowSetPredicate.java
@@ -0,0 +1,71 @@
+//
+// ========================================================================
+// 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.graph;
+
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * Should match against the provided set of {@link Selection#getHow()} values.
+ * <p>
+ * Incomplete set is considered to be no-match.
+ */
+public class HowSetPredicate implements Predicate
+{
+ private final Set<String> howSet;
+
+ public HowSetPredicate(String... hows)
+ {
+ this.howSet = new HashSet<>();
+
+ for (String name : hows)
+ {
+ this.howSet.add(name);
+ }
+ }
+
+ @Override
+ public boolean match(Node<?> node)
+ {
+ Set<Selection> selections = node.getSelections();
+ if (selections == null)
+ {
+ // empty sources list
+ return false;
+ }
+
+ Set<String> actualHows = node.getSelectedHowSet();
+
+ if (actualHows.size() != howSet.size())
+ {
+ // non-equal sized set
+ return false;
+ }
+
+ for (String how : actualHows)
+ {
+ if (!this.howSet.contains(how))
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+
+} \ No newline at end of file
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/graph/HowUniquePredicate.java b/jetty-start/src/main/java/org/eclipse/jetty/start/graph/HowUniquePredicate.java
new file mode 100644
index 0000000000..d5d9e075ac
--- /dev/null
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/graph/HowUniquePredicate.java
@@ -0,0 +1,63 @@
+//
+// ========================================================================
+// 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.graph;
+
+/**
+ * Match against a specific {@link Selection#getHow()}, where
+ * there are no other {@link Selection#isExplicit()} specified.
+ */
+public class HowUniquePredicate implements Predicate
+{
+ private final String how;
+
+ public HowUniquePredicate(String how)
+ {
+ this.how = how;
+ }
+
+ @Override
+ public boolean match(Node<?> node)
+ {
+ if (node.getSelections().isEmpty())
+ {
+ // Empty selection list (no uniqueness to it)
+ return false;
+ }
+
+ // Assume no match
+ boolean ret = false;
+
+ for (Selection selection : node.getSelections())
+ {
+ if (how.equalsIgnoreCase(selection.getHow()))
+ {
+ // Found a match
+ ret = true;
+ continue; // this 'how' is always valid.
+ }
+ else if (selection.isExplicit())
+ {
+ // Automatic failure
+ return false;
+ }
+ }
+
+ return ret;
+ }
+} \ No newline at end of file
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/graph/NamePredicate.java b/jetty-start/src/main/java/org/eclipse/jetty/start/graph/NamePredicate.java
new file mode 100644
index 0000000000..db1755991d
--- /dev/null
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/graph/NamePredicate.java
@@ -0,0 +1,35 @@
+//
+// ========================================================================
+// 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.graph;
+
+public class NamePredicate implements Predicate
+{
+ private final String name;
+
+ public NamePredicate(String name)
+ {
+ this.name = name;
+ }
+
+ @Override
+ public boolean match(Node<?> input)
+ {
+ return input.getName().equalsIgnoreCase(this.name);
+ }
+}
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/graph/Node.java b/jetty-start/src/main/java/org/eclipse/jetty/start/graph/Node.java
new file mode 100644
index 0000000000..b5eb2b36c2
--- /dev/null
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/graph/Node.java
@@ -0,0 +1,178 @@
+//
+// ========================================================================
+// 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.graph;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Basic Graph Node
+ */
+public abstract class Node<T>
+{
+ /** The logical name of this Node */
+ private String logicalName;
+ /** The depth of the Node in the tree */
+ private int depth = 0;
+ /** The set of selections for how this node was selected */
+ private Set<Selection> selections = new LinkedHashSet<>();
+ /** Set of Nodes, by name, that this Node depends on */
+ private List<String> parentNames = new ArrayList<>();
+ /** Set of Nodes, by name, that this Node optionally depend on */
+ private List<String> optionalParentNames = new ArrayList<>();
+
+ /** The Edges to parent Nodes */
+ private Set<T> parentEdges = new LinkedHashSet<>();
+ /** The Edges to child Nodes */
+ private Set<T> childEdges = new LinkedHashSet<>();
+
+ public void addChildEdge(T child)
+ {
+ if (childEdges.contains(child))
+ {
+ // already present, skip
+ return;
+ }
+ this.childEdges.add(child);
+ }
+
+ public void addOptionalParentName(String name)
+ {
+ if (this.optionalParentNames.contains(name))
+ {
+ // skip, name already exists
+ return;
+ }
+ this.optionalParentNames.add(name);
+ }
+
+ public void addParentEdge(T parent)
+ {
+ if (parentEdges.contains(parent))
+ {
+ // already present, skip
+ return;
+ }
+ this.parentEdges.add(parent);
+ }
+
+ public void addParentName(String name)
+ {
+ if (this.parentNames.contains(name))
+ {
+ // skip, name already exists
+ return;
+ }
+ this.parentNames.add(name);
+ }
+
+ public void addSelection(Selection selection)
+ {
+ this.selections.add(selection);
+ }
+
+ public Set<T> getChildEdges()
+ {
+ return childEdges;
+ }
+
+ public int getDepth()
+ {
+ return depth;
+ }
+
+ @Deprecated
+ public String getLogicalName()
+ {
+ return logicalName;
+ }
+
+ public String getName()
+ {
+ return logicalName;
+ }
+
+ public List<String> getOptionalParentNames()
+ {
+ return optionalParentNames;
+ }
+
+ public Set<T> getParentEdges()
+ {
+ return parentEdges;
+ }
+
+ public List<String> getParentNames()
+ {
+ return parentNames;
+ }
+
+ public Set<Selection> getSelections()
+ {
+ return selections;
+ }
+
+ public Set<String> getSelectedHowSet()
+ {
+ Set<String> hows = new HashSet<>();
+ for (Selection selection : selections)
+ {
+ hows.add(selection.getHow());
+ }
+ return hows;
+ }
+
+ public boolean isSelected()
+ {
+ return !selections.isEmpty();
+ }
+
+ public boolean matches(Predicate predicate)
+ {
+ return predicate.match(this);
+ }
+
+ public void setDepth(int depth)
+ {
+ this.depth = depth;
+ }
+
+ public void setName(String name)
+ {
+ this.logicalName = name;
+ }
+
+ public void setParentNames(List<String> parents)
+ {
+ this.parentNames.clear();
+ this.parentEdges.clear();
+ if (parents != null)
+ {
+ this.parentNames.addAll(parents);
+ }
+ }
+
+ public void setSelections(Set<Selection> selection)
+ {
+ this.selections = selection;
+ }
+}
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/graph/NodeDepthComparator.java b/jetty-start/src/main/java/org/eclipse/jetty/start/graph/NodeDepthComparator.java
new file mode 100644
index 0000000000..3ae0bd884a
--- /dev/null
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/graph/NodeDepthComparator.java
@@ -0,0 +1,43 @@
+//
+// ========================================================================
+// 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.graph;
+
+import java.text.CollationKey;
+import java.text.Collator;
+import java.util.Comparator;
+
+public class NodeDepthComparator implements Comparator<Node<?>>
+{
+ private Collator collator = Collator.getInstance();
+
+ @Override
+ public int compare(Node<?> o1, Node<?> o2)
+ {
+ // order by depth first.
+ int diff = o1.getDepth() - o2.getDepth();
+ if (diff != 0)
+ {
+ return diff;
+ }
+ // then by name (not really needed, but makes for predictable test cases)
+ CollationKey k1 = collator.getCollationKey(o1.getName());
+ CollationKey k2 = collator.getCollationKey(o2.getName());
+ return k1.compareTo(k2);
+ }
+} \ No newline at end of file
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/graph/OnlyTransitivePredicate.java b/jetty-start/src/main/java/org/eclipse/jetty/start/graph/OnlyTransitivePredicate.java
new file mode 100644
index 0000000000..8c91c40ff1
--- /dev/null
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/graph/OnlyTransitivePredicate.java
@@ -0,0 +1,41 @@
+//
+// ========================================================================
+// 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.graph;
+
+/**
+ * Predicate for a node that has no explicitly set selections.
+ * (They are all transitive)
+ */
+public class OnlyTransitivePredicate implements Predicate
+{
+ public static final Predicate INSTANCE = new OnlyTransitivePredicate();
+
+ @Override
+ public boolean match(Node<?> input)
+ {
+ for (Selection selection : input.getSelections())
+ {
+ if (selection.isExplicit())
+ {
+ return false;
+ }
+ }
+ return true;
+ }
+}
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/graph/Predicate.java b/jetty-start/src/main/java/org/eclipse/jetty/start/graph/Predicate.java
new file mode 100644
index 0000000000..b995932391
--- /dev/null
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/graph/Predicate.java
@@ -0,0 +1,27 @@
+//
+// ========================================================================
+// 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.graph;
+
+/**
+ * Matcher of Nodes
+ */
+public interface Predicate
+{
+ public boolean match(Node<?> input);
+}
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/graph/RegexNamePredicate.java b/jetty-start/src/main/java/org/eclipse/jetty/start/graph/RegexNamePredicate.java
new file mode 100644
index 0000000000..2adbb31a84
--- /dev/null
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/graph/RegexNamePredicate.java
@@ -0,0 +1,40 @@
+//
+// ========================================================================
+// 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.graph;
+
+import java.util.regex.Pattern;
+
+/**
+ * Match a node based on name
+ */
+public class RegexNamePredicate implements Predicate
+{
+ private final Pattern pat;
+
+ public RegexNamePredicate(String regex)
+ {
+ this.pat = Pattern.compile(regex);
+ }
+
+ @Override
+ public boolean match(Node<?> node)
+ {
+ return pat.matcher(node.getName()).matches();
+ }
+} \ No newline at end of file
diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/graph/Selection.java b/jetty-start/src/main/java/org/eclipse/jetty/start/graph/Selection.java
new file mode 100644
index 0000000000..04f0166b3d
--- /dev/null
+++ b/jetty-start/src/main/java/org/eclipse/jetty/start/graph/Selection.java
@@ -0,0 +1,111 @@
+//
+// ========================================================================
+// 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.graph;
+
+public class Selection
+{
+ private final boolean explicit;
+ private final String how;
+
+ public Selection(String how)
+ {
+ this(how,true);
+ }
+
+ public Selection(String how, boolean explicit)
+ {
+ this.how = how;
+ this.explicit = explicit;
+ }
+
+ public Selection asTransitive()
+ {
+ if (this.explicit)
+ {
+ return new Selection(how,false);
+ }
+ return this;
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (this == obj)
+ {
+ return true;
+ }
+ if (obj == null)
+ {
+ return false;
+ }
+ if (getClass() != obj.getClass())
+ {
+ return false;
+ }
+ Selection other = (Selection)obj;
+ if (explicit != other.explicit)
+ {
+ return false;
+ }
+ if (how == null)
+ {
+ if (other.how != null)
+ {
+ return false;
+ }
+ }
+ else if (!how.equals(other.how))
+ {
+ return false;
+ }
+ return true;
+ }
+
+ public String getHow()
+ {
+ return how;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ final int prime = 31;
+ int result = 1;
+ result = (prime * result) + (explicit?1231:1237);
+ result = (prime * result) + ((how == null)?0:how.hashCode());
+ return result;
+ }
+
+ public boolean isExplicit()
+ {
+ return explicit;
+ }
+
+ @Override
+ public String toString()
+ {
+ StringBuilder str = new StringBuilder();
+ if (!explicit)
+ {
+ str.append("<transitive from> ");
+ }
+ str.append(how);
+ return str.toString();
+ }
+}
diff --git a/jetty-start/src/test/java/org/eclipse/jetty/start/BaseHomeTest.java b/jetty-start/src/test/java/org/eclipse/jetty/start/BaseHomeTest.java
index 0592633728..ed728a039b 100644
--- a/jetty-start/src/test/java/org/eclipse/jetty/start/BaseHomeTest.java
+++ b/jetty-start/src/test/java/org/eclipse/jetty/start/BaseHomeTest.java
@@ -57,7 +57,7 @@ public class BaseHomeTest
System.out.printf(" %s%n",path);
}
}
- Assert.assertThat(message + ": " + Main.join(actual,", "),actual,containsInAnyOrder(expected.toArray()));
+ Assert.assertThat(message + ": " + Utils.join(actual,", "),actual,containsInAnyOrder(expected.toArray()));
}
public static void assertPathList(BaseHome hb, String message, List<String> expected, List<Path> paths)
@@ -81,7 +81,7 @@ public class BaseHomeTest
System.out.printf(" %s%n",path);
}
}
- Assert.assertThat(message + ": " + Main.join(actual,", "),actual,containsInAnyOrder(expected.toArray()));
+ Assert.assertThat(message + ": " + Utils.join(actual,", "),actual,containsInAnyOrder(expected.toArray()));
}
public static void assertFileList(BaseHome hb, String message, List<String> expected, List<File> files)
@@ -91,7 +91,7 @@ public class BaseHomeTest
{
actual.add(hb.toShortForm(file));
}
- Assert.assertThat(message + ": " + Main.join(actual,", "),actual,containsInAnyOrder(expected.toArray()));
+ Assert.assertThat(message + ": " + Utils.join(actual,", "),actual,containsInAnyOrder(expected.toArray()));
}
@Test
diff --git a/jetty-start/src/test/java/org/eclipse/jetty/start/DistTest.java b/jetty-start/src/test/java/org/eclipse/jetty/start/DistTest.java
new file mode 100644
index 0000000000..76f00df45f
--- /dev/null
+++ b/jetty-start/src/test/java/org/eclipse/jetty/start/DistTest.java
@@ -0,0 +1,187 @@
+//
+// ========================================================================
+// 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;
+
+import static org.eclipse.jetty.start.StartMatchers.*;
+import static org.junit.Assert.*;
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jetty.toolchain.test.MavenTestingUtils;
+import org.eclipse.jetty.toolchain.test.TestingDir;
+import org.junit.Ignore;
+import org.junit.Rule;
+import org.junit.Test;
+
+/**
+ * Test various things with a semi-valid src/test/resources/dist-home/
+ */
+public class DistTest
+{
+ @Rule
+ public TestingDir testdir = new TestingDir();
+
+ @Rule
+ public SystemExitAsException exitrule = new SystemExitAsException();
+
+ private void execMain(List<String> cmds) throws Exception
+ {
+ int len = cmds.size();
+ String args[] = cmds.toArray(new String[len]);
+
+ Main main = new Main();
+ StartArgs startArgs = main.processCommandLine(args);
+ main.start(startArgs);
+ }
+
+ public List<String> getBaseCommandLine(Path basePath)
+ {
+ List<String> cmds = new ArrayList<String>();
+ cmds.add("-Djava.io.tmpdir=" + MavenTestingUtils.getTargetDir().getAbsolutePath());
+ cmds.add("-Djetty.home=" + MavenTestingUtils.getTestResourceDir("dist-home").getAbsolutePath());
+ cmds.add("-Djetty.base=" + basePath.normalize().toAbsolutePath().toString());
+ cmds.add("--testing-mode");
+
+ return cmds;
+ }
+
+ @Test
+ public void testLikeDistro_SetupHome() throws Exception
+ {
+ Path basePath = testdir.getEmptyDir().toPath();
+
+ List<String> cmds = getBaseCommandLine(basePath);
+
+ cmds.add("--add-to-start=deploy,websocket,ext,resources,jsp,jstl,http");
+
+ execMain(cmds);
+ }
+
+ @Test
+ public void testAddJstl() throws Exception
+ {
+ Path basePath = testdir.getEmptyDir().toPath();
+
+ List<String> cmds = getBaseCommandLine(basePath);
+
+ cmds.add("--add-to-start=jstl");
+
+ execMain(cmds);
+ }
+
+ /**
+ * Test for https://bugs.eclipse.org/452329
+ */
+ @Test
+ public void testReAddServerModule() throws Exception
+ {
+ Path basePath = testdir.getEmptyDir().toPath();
+
+ List<String> cmds = getBaseCommandLine(basePath);
+ cmds.add("--add-to-startd=http");
+ execMain(cmds);
+
+ Path httpIni = basePath.resolve("start.d/http.ini");
+ Path serverIni = basePath.resolve("start.d/server.ini");
+
+ assertThat("start.d/http.ini", httpIni, fileExists());
+ assertThat("start.d/server.ini", serverIni, fileExists());
+
+ // Delete server.ini
+ Files.deleteIfExists(serverIni);
+
+ // Attempt to re-add via 'server' module reference
+ cmds = getBaseCommandLine(basePath);
+ cmds.add("--add-to-startd=server");
+ execMain(cmds);
+
+ assertThat("start.d/server.ini", serverIni, fileExists());
+ }
+
+ /**
+ * Test for https://bugs.eclipse.org/452329
+ */
+ @Test
+ public void testReAddServerViaHttpModule() throws Exception
+ {
+ Path basePath = testdir.getEmptyDir().toPath();
+
+ List<String> cmds = getBaseCommandLine(basePath);
+ cmds.add("--add-to-startd=http");
+ execMain(cmds);
+
+ Path httpIni = basePath.resolve("start.d/http.ini");
+ Path serverIni = basePath.resolve("start.d/server.ini");
+
+ assertThat("start.d/http.ini", httpIni, fileExists());
+ assertThat("start.d/server.ini", serverIni, fileExists());
+
+ // Delete server.ini
+ Files.deleteIfExists(serverIni);
+
+ // Attempt to re-add via 'http' module reference
+ cmds = getBaseCommandLine(basePath);
+ cmds.add("--add-to-startd=http");
+ execMain(cmds);
+
+ assertThat("start.d/server.ini", serverIni, fileExists());
+ }
+
+ /**
+ * Test for https://bugs.eclipse.org/452329
+ */
+ @Test
+ public void testReAddHttpThenDeployViaStartD() throws Exception
+ {
+ Path basePath = testdir.getEmptyDir().toPath();
+
+ List<String> cmds = getBaseCommandLine(basePath);
+ cmds.add("--add-to-start=http");
+ execMain(cmds);
+
+ Path startIni = basePath.resolve("start.ini");
+ assertThat("start.ini", startIni, fileExists());
+
+ // Now add 'deploy' module.
+ cmds = getBaseCommandLine(basePath);
+ cmds.add("--add-to-startd=deploy");
+ execMain(cmds);
+
+ // The following files should not exist (as its already defined in /start.ini)
+ Path serverIni = basePath.resolve("start.d/server.ini");
+ assertThat("start.d/server.ini", serverIni, notPathExists());
+ }
+
+ @Test
+ @Ignore("See https://bugs.eclipse.org/451973")
+ public void testLikeDistro_SetupDemoBase() throws Exception
+ {
+ Path basePath = testdir.getEmptyDir().toPath();
+
+ List<String> cmds = getBaseCommandLine(basePath);
+
+ cmds.add("--add-to-start=continuation,deploy,websocket,ext,resources,client,annotations,jndi,servlets");
+ cmds.add("--add-to-startd=jsp,jstl,http,https");
+
+ execMain(cmds);
+ }
+}
diff --git a/jetty-start/src/test/java/org/eclipse/jetty/start/IncludeJettyDirTest.java b/jetty-start/src/test/java/org/eclipse/jetty/start/IncludeJettyDirTest.java
index a197d64408..082fed8adb 100644
--- a/jetty-start/src/test/java/org/eclipse/jetty/start/IncludeJettyDirTest.java
+++ b/jetty-start/src/test/java/org/eclipse/jetty/start/IncludeJettyDirTest.java
@@ -89,7 +89,7 @@ public class IncludeJettyDirTest
// Create home
File home = testdir.getFile("home");
FS.ensureEmpty(home);
- TestEnv.copyTestDir("usecases/home",home);
+ TestEnv.copyTestDir("dist-home",home);
// Create base
File base = testdir.getFile("base");
@@ -114,7 +114,7 @@ public class IncludeJettyDirTest
// Create home
File home = testdir.getFile("home");
FS.ensureEmpty(home);
- TestEnv.copyTestDir("usecases/home",home);
+ TestEnv.copyTestDir("dist-home",home);
// Create common
File common = testdir.getFile("common");
@@ -148,7 +148,7 @@ public class IncludeJettyDirTest
// Create home
File home = testdir.getFile("home");
FS.ensureEmpty(home);
- TestEnv.copyTestDir("usecases/home",home);
+ TestEnv.copyTestDir("dist-home",home);
// Create common
File common = testdir.getFile("common");
@@ -184,7 +184,7 @@ public class IncludeJettyDirTest
// Create home
File home = testdir.getFile("home");
FS.ensureEmpty(home);
- TestEnv.copyTestDir("usecases/home",home);
+ TestEnv.copyTestDir("dist-home",home);
// Create opt
File opt = testdir.getFile("opt");
@@ -226,7 +226,7 @@ public class IncludeJettyDirTest
// Create home
File home = testdir.getFile("home");
FS.ensureEmpty(home);
- TestEnv.copyTestDir("usecases/home",home);
+ TestEnv.copyTestDir("dist-home",home);
// Create opt
File opt = testdir.getFile("opt");
@@ -270,7 +270,7 @@ public class IncludeJettyDirTest
// Create home
File home = testdir.getFile("home");
FS.ensureEmpty(home);
- TestEnv.copyTestDir("usecases/home",home);
+ TestEnv.copyTestDir("dist-home",home);
// Create common
File common = testdir.getFile("common");
@@ -302,7 +302,7 @@ public class IncludeJettyDirTest
// Create home
File home = testdir.getFile("home");
FS.ensureEmpty(home);
- TestEnv.copyTestDir("usecases/home",home);
+ TestEnv.copyTestDir("dist-home",home);
// Create common
File common = testdir.getFile("common");
@@ -340,7 +340,7 @@ public class IncludeJettyDirTest
// Create home
File home = testdir.getFile("home");
FS.ensureEmpty(home);
- TestEnv.copyTestDir("usecases/home",home);
+ TestEnv.copyTestDir("dist-home",home);
// Create corp
File corp = testdir.getFile("corp");
@@ -380,7 +380,7 @@ public class IncludeJettyDirTest
// Create home
File home = testdir.getFile("home");
FS.ensureEmpty(home);
- TestEnv.copyTestDir("usecases/home",home);
+ TestEnv.copyTestDir("dist-home",home);
// Create corp
File corp = testdir.getFile("corp");
@@ -423,7 +423,7 @@ public class IncludeJettyDirTest
// Create home
File home = testdir.getFile("home");
FS.ensureEmpty(home);
- TestEnv.copyTestDir("usecases/home",home);
+ TestEnv.copyTestDir("dist-home",home);
// Create devops
File devops = testdir.getFile("devops");
@@ -474,7 +474,7 @@ public class IncludeJettyDirTest
// Create home
File home = testdir.getFile("home");
FS.ensureEmpty(home);
- TestEnv.copyTestDir("usecases/home",home);
+ TestEnv.copyTestDir("dist-home",home);
// Create corp
File corp = testdir.getFile("corp");
@@ -517,7 +517,7 @@ public class IncludeJettyDirTest
// Create home
File home = testdir.getFile("home");
FS.ensureEmpty(home);
- TestEnv.copyTestDir("usecases/home",home);
+ TestEnv.copyTestDir("dist-home",home);
// Create common
File common = testdir.getFile("common");
diff --git a/jetty-start/src/test/java/org/eclipse/jetty/start/LicenseTest.java b/jetty-start/src/test/java/org/eclipse/jetty/start/LicensingTest.java
index 5422aa169c..f57d258323 100644
--- a/jetty-start/src/test/java/org/eclipse/jetty/start/LicenseTest.java
+++ b/jetty-start/src/test/java/org/eclipse/jetty/start/LicensingTest.java
@@ -38,7 +38,7 @@ import org.junit.Test;
/**
* Test various license handling.
*/
-public class LicenseTest
+public class LicensingTest
{
@Rule
public TestingDir testdir = new TestingDir();
@@ -58,7 +58,7 @@ public class LicenseTest
int len = cmds.size();
String args[] = cmds.toArray(new String[len]);
- System.err.printf("%n## Exec: %s%n", Main.join(cmds,", "));
+ System.err.printf("%n## Exec: %s%n", Utils.join(cmds,", "));
Main main = new Main();
StartArgs startArgs = main.processCommandLine(args);
main.start(startArgs);
@@ -94,43 +94,43 @@ public class LicenseTest
List<String> cmds = getBaseCommandLine(basePath);
- cmds.add("-Dorg.eclipse.jetty.start.ack.license.cdi=true");
+ cmds.add("-Dorg.eclipse.jetty.start.ack.licenses=true");
cmds.add("--add-to-start=cdi");
execMain(cmds);
}
@Test
- public void testAdd_SPDY_Licensed() throws Exception
+ public void testAdd_HTTP2_Licensed() throws Exception
{
File basePath = testdir.getEmptyDir();
List<String> cmds = getBaseCommandLine(basePath);
- cmds.add("-Dorg.eclipse.jetty.start.ack.license.protonego-impl=true");
- cmds.add("--add-to-start=spdy");
+ cmds.add("-Dorg.eclipse.jetty.start.ack.licenses=true");
+ cmds.add("--add-to-start=http2");
execMain(cmds);
String contents = assertFileExists(basePath, "start.ini");
- assertThat("Contents",contents,containsString("--module=spdy"+System.lineSeparator()));
+ assertThat("Contents",contents,containsString("--module=http2"+System.lineSeparator()));
}
@Test
- public void testAdd_HttpSpdy_Then_Deploy() throws Exception
+ public void testAdd_Http_Http2_Then_Deploy() throws Exception
{
File basePath = testdir.getEmptyDir();
List<String> cmds = getBaseCommandLine(basePath);
cmds.add("-Dorg.eclipse.jetty.start.ack.license.protonego-impl=true");
- cmds.add("--add-to-start=http,spdy");
+ cmds.add("--add-to-start=http,http2");
execMain(cmds);
String contents = assertFileExists(basePath, "start.ini");
assertThat("Contents",contents,containsString("--module=http"+System.lineSeparator()));
- assertThat("Contents",contents,containsString("--module=spdy"+System.lineSeparator()));
+ assertThat("Contents",contents,containsString("--module=http2"+System.lineSeparator()));
// now request deploy (no license check should occur)
List<String> cmds2 = getBaseCommandLine(basePath);
@@ -139,19 +139,19 @@ public class LicenseTest
contents = assertFileExists(basePath, "start.ini");
assertThat("Contents",contents,containsString("--module=deploy"+System.lineSeparator()));
- assertThat("Contents",contents,containsString("--module=spdy"+System.lineSeparator()));
}
@Test
- public void testCreate_SPDY_Licensed() throws Exception
+ public void testCreate_HTTP2_Licensed() throws Exception
{
File basePath = testdir.getEmptyDir();
List<String> cmds = getBaseCommandLine(basePath);
- cmds.add("-Dorg.eclipse.jetty.start.ack.license.protonego-impl=true");
+ cmds.add("-Dorg.eclipse.jetty.start.ack.licenses=true");
+ cmds.add("--dry-run");
- StringReader startIni = new StringReader("--module=spdy\n");
+ StringReader startIni = new StringReader("--module=http2\n");
try (FileWriter writer = new FileWriter(new File(basePath,"start.ini")))
{
IO.copy(startIni,writer);
@@ -167,7 +167,7 @@ public class LicenseTest
List<String> cmds = getBaseCommandLine(basePath);
- cmds.add("-Dorg.eclipse.jetty.start.ack.license.cdi=true");
+ cmds.add("-Dorg.eclipse.jetty.start.ack.licenses=true");
cmds.add("--create-files");
StringReader startIni = new StringReader("--module=cdi\n");
diff --git a/jetty-start/src/test/java/org/eclipse/jetty/start/MainTest.java b/jetty-start/src/test/java/org/eclipse/jetty/start/MainTest.java
index 8de153f636..706429ff7b 100644
--- a/jetty-start/src/test/java/org/eclipse/jetty/start/MainTest.java
+++ b/jetty-start/src/test/java/org/eclipse/jetty/start/MainTest.java
@@ -50,7 +50,7 @@ public class MainTest
public void testBasicProcessing() throws Exception
{
List<String> cmdLineArgs = new ArrayList<>();
- File testJettyHome = MavenTestingUtils.getTestResourceDir("usecases/home").getAbsoluteFile();
+ File testJettyHome = MavenTestingUtils.getTestResourceDir("dist-home").getAbsoluteFile();
cmdLineArgs.add("user.dir=" + testJettyHome);
cmdLineArgs.add("jetty.home=" + testJettyHome);
cmdLineArgs.add("jetty.port=9090");
@@ -87,7 +87,7 @@ public class MainTest
public void testListConfig() throws Exception
{
List<String> cmdLineArgs = new ArrayList<>();
- File testJettyHome = MavenTestingUtils.getTestResourceDir("usecases/home");
+ File testJettyHome = MavenTestingUtils.getTestResourceDir("dist-home");
cmdLineArgs.add("jetty.home=" + testJettyHome);
cmdLineArgs.add("jetty.port=9090");
cmdLineArgs.add("--list-config");
@@ -111,7 +111,7 @@ public class MainTest
{
List<String> cmdLineArgs = new ArrayList<>();
- File homePath = MavenTestingUtils.getTestResourceDir("usecases/home").getAbsoluteFile();
+ File homePath = MavenTestingUtils.getTestResourceDir("dist-home").getAbsoluteFile();
cmdLineArgs.add("jetty.home=" + homePath);
cmdLineArgs.add("user.dir=" + homePath);
@@ -155,19 +155,18 @@ public class MainTest
}
@Test
- public void testWithSpdy() throws Exception
+ public void testWithHttp2() throws Exception
{
List<String> cmdLineArgs = new ArrayList<>();
- File homePath = MavenTestingUtils.getTestResourceDir("usecases/home").getAbsoluteFile();
+ File homePath = MavenTestingUtils.getTestResourceDir("dist-home").getAbsoluteFile();
cmdLineArgs.add("jetty.home=" + homePath);
cmdLineArgs.add("user.dir=" + homePath);
cmdLineArgs.add("java.version=1.7.0_60");
// Modules
- cmdLineArgs.add("--module=server");
cmdLineArgs.add("--module=deploy");
- cmdLineArgs.add("--module=spdy");
+ cmdLineArgs.add("--module=http2");
Main main = new Main();
@@ -177,7 +176,7 @@ public class MainTest
assertThat("jetty.home",baseHome.getHome(),is(homePath.getAbsolutePath()));
assertThat("jetty.base",baseHome.getBase(),is(homePath.getAbsolutePath()));
- ConfigurationAssert.assertConfiguration(baseHome,args,"assert-home-with-spdy.txt");
+ ConfigurationAssert.assertConfiguration(baseHome,args,"assert-home-with-http2.txt");
}
@Test
diff --git a/jetty-start/src/test/java/org/eclipse/jetty/start/ModuleGraphWriterTest.java b/jetty-start/src/test/java/org/eclipse/jetty/start/ModuleGraphWriterTest.java
index 4e82d0dc7a..84c8c8521e 100644
--- a/jetty-start/src/test/java/org/eclipse/jetty/start/ModuleGraphWriterTest.java
+++ b/jetty-start/src/test/java/org/eclipse/jetty/start/ModuleGraphWriterTest.java
@@ -43,7 +43,7 @@ public class ModuleGraphWriterTest
public void testGenerate_NothingEnabled() throws IOException
{
// Test Env
- File homeDir = MavenTestingUtils.getTestResourceDir("usecases/home");
+ File homeDir = MavenTestingUtils.getTestResourceDir("dist-home");
File baseDir = testdir.getEmptyDir();
String cmdLine[] = new String[] {"jetty.version=TEST"};
diff --git a/jetty-start/src/test/java/org/eclipse/jetty/start/ModuleTest.java b/jetty-start/src/test/java/org/eclipse/jetty/start/ModuleTest.java
index 65dc94bca8..e793682799 100644
--- a/jetty-start/src/test/java/org/eclipse/jetty/start/ModuleTest.java
+++ b/jetty-start/src/test/java/org/eclipse/jetty/start/ModuleTest.java
@@ -42,7 +42,7 @@ public class ModuleTest
public void testLoadWebSocket() throws IOException
{
// Test Env
- File homeDir = MavenTestingUtils.getTestResourceDir("usecases/home");
+ File homeDir = MavenTestingUtils.getTestResourceDir("dist-home");
File baseDir = testdir.getEmptyDir();
String cmdLine[] = new String[] {"jetty.version=TEST"};
@@ -56,14 +56,13 @@ public class ModuleTest
// Initialize
BaseHome basehome = new BaseHome(config);
- File file = MavenTestingUtils.getTestResourceFile("usecases/home/modules/websocket.mod");
+ File file = MavenTestingUtils.getTestResourceFile("dist-home/modules/websocket.mod");
Module module = new Module(basehome,file.toPath());
Assert.assertThat("Module Name",module.getName(),is("websocket"));
- Assert.assertThat("Module Parents Size",module.getParentNames().size(),is(2));
- Assert.assertThat("Module Parents",module.getParentNames(),containsInAnyOrder("annotations","server"));
- Assert.assertThat("Module Xmls Size",module.getXmls().size(),is(1));
- Assert.assertThat("Module Xmls",module.getXmls(),contains("etc/jetty-websockets.xml"));
+ Assert.assertThat("Module Parents Size",module.getParentNames().size(),is(1));
+ Assert.assertThat("Module Parents",module.getParentNames(),containsInAnyOrder("annotations"));
+ Assert.assertThat("Module Xmls Size",module.getXmls().size(),is(0));
Assert.assertThat("Module Options Size",module.getLibs().size(),is(1));
Assert.assertThat("Module Options",module.getLibs(),contains("lib/websocket/*.jar"));
}
diff --git a/jetty-start/src/test/java/org/eclipse/jetty/start/ModulesTest.java b/jetty-start/src/test/java/org/eclipse/jetty/start/ModulesTest.java
index 5256f07711..63d8a82381 100644
--- a/jetty-start/src/test/java/org/eclipse/jetty/start/ModulesTest.java
+++ b/jetty-start/src/test/java/org/eclipse/jetty/start/ModulesTest.java
@@ -18,27 +18,31 @@
package org.eclipse.jetty.start;
-import static org.hamcrest.Matchers.contains;
+import static org.hamcrest.Matchers.*;
+import static org.junit.Assert.*;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
+import java.util.Set;
import org.eclipse.jetty.start.config.CommandLineConfigSource;
import org.eclipse.jetty.start.config.ConfigSources;
import org.eclipse.jetty.start.config.JettyBaseConfigSource;
import org.eclipse.jetty.start.config.JettyHomeConfigSource;
+import org.eclipse.jetty.start.graph.HowSetPredicate;
+import org.eclipse.jetty.start.graph.Predicate;
+import org.eclipse.jetty.start.graph.RegexNamePredicate;
+import org.eclipse.jetty.start.graph.Selection;
import org.eclipse.jetty.toolchain.test.MavenTestingUtils;
import org.eclipse.jetty.toolchain.test.TestingDir;
-import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
public class ModulesTest
{
- private final static List<String> TEST_SOURCE = Collections.singletonList("<test>");
+ private final static String TEST_SOURCE = "<test>";
@Rule
public TestingDir testdir = new TestingDir();
@@ -47,20 +51,20 @@ public class ModulesTest
public void testLoadAllModules() throws IOException
{
// Test Env
- File homeDir = MavenTestingUtils.getTestResourceDir("usecases/home");
+ File homeDir = MavenTestingUtils.getTestResourceDir("dist-home");
File baseDir = testdir.getEmptyDir();
- String cmdLine[] = new String[] {"jetty.version=TEST"};
-
+ String cmdLine[] = new String[] { "jetty.version=TEST" };
+
// Configuration
CommandLineConfigSource cmdLineSource = new CommandLineConfigSource(cmdLine);
ConfigSources config = new ConfigSources();
config.add(cmdLineSource);
config.add(new JettyHomeConfigSource(homeDir.toPath()));
config.add(new JettyBaseConfigSource(baseDir.toPath()));
-
+
// Initialize
BaseHome basehome = new BaseHome(config);
-
+
StartArgs args = new StartArgs();
args.parse(config);
@@ -71,8 +75,8 @@ public class ModulesTest
List<String> moduleNames = new ArrayList<>();
for (Module mod : modules)
{
- // skip npn-boot in this test (as its behavior is jdk specific)
- if (mod.getName().equals("npn-boot"))
+ // skip alpn-boot in this test (as its behavior is jdk specific)
+ if (mod.getName().equals("alpn-boot"))
{
continue;
}
@@ -80,91 +84,163 @@ public class ModulesTest
}
List<String> expected = new ArrayList<>();
- expected.add("jmx");
+ expected.add("alpn");
+ expected.add("annotations");
+ expected.add("apache-jsp");
+ expected.add("apache-jstl");
+ expected.add("cdi");
expected.add("client");
- expected.add("stats");
- expected.add("spdy");
- expected.add("deploy");
+ expected.add("continuation");
expected.add("debug");
- expected.add("security");
+ expected.add("deploy");
expected.add("ext");
- expected.add("websocket");
- expected.add("rewrite");
+ expected.add("fcgi");
+ expected.add("gzip");
+ expected.add("hawtio");
+ expected.add("home-base-warning");
+ expected.add("http");
+ expected.add("http2");
+ expected.add("http2c");
+ expected.add("https");
expected.add("ipaccess");
- expected.add("xinetd");
- expected.add("proxy");
- expected.add("webapp");
+ expected.add("jaas");
+ expected.add("jamon");
+ expected.add("jaspi");
+ expected.add("jminix");
+ expected.add("jmx");
+ expected.add("jmx-remote");
expected.add("jndi");
+ expected.add("jolokia");
+ expected.add("jsp");
+ expected.add("jstl");
+ expected.add("jvm");
+ expected.add("logging");
expected.add("lowresources");
- expected.add("https");
+ expected.add("monitor");
expected.add("plus");
+ expected.add("proxy");
+ expected.add("quickstart");
expected.add("requestlog");
- expected.add("jsp");
- // (only present if enabled) expected.add("jsp-impl");
- expected.add("monitor");
- expected.add("xml");
- expected.add("ssl");
- expected.add("protonego");
- expected.add("servlet");
- expected.add("jaas");
- expected.add("http");
- expected.add("base");
- expected.add("server");
- expected.add("annotations");
expected.add("resources");
- expected.add("logging");
+ expected.add("rewrite");
+ expected.add("security");
+ expected.add("server");
+ expected.add("servlet");
+ expected.add("servlets");
+ expected.add("setuid");
+ expected.add("spring");
+ expected.add("ssl");
+ expected.add("stats");
+ expected.add("webapp");
+ expected.add("websocket");
+ expected.add("xinetd");
ConfigurationAssert.assertContainsUnordered("All Modules",expected,moduleNames);
}
+ /**
+ * Test loading of only shallow modules, not deep references.
+ * In other words. ${search-dir}/modules/*.mod should be the only
+ * valid references, but ${search-dir}/alt/foo/modules/*.mod should
+ * not be considered valid.
+ */
+ @Test
+ public void testLoadShallowModulesOnly() throws IOException
+ {
+ // Test Env
+ File homeDir = MavenTestingUtils.getTestResourceDir("jetty home with spaces");
+ // intentionally setup top level resources dir (as this would have many
+ // deep references)
+ File baseDir = MavenTestingUtils.getTestResourcesDir();
+ String cmdLine[] = new String[] { "jetty.version=TEST" };
+
+ // Configuration
+ CommandLineConfigSource cmdLineSource = new CommandLineConfigSource(cmdLine);
+ ConfigSources config = new ConfigSources();
+ config.add(cmdLineSource);
+ config.add(new JettyHomeConfigSource(homeDir.toPath()));
+ config.add(new JettyBaseConfigSource(baseDir.toPath()));
+
+ // Initialize
+ BaseHome basehome = new BaseHome(config);
+
+ StartArgs args = new StartArgs();
+ args.parse(config);
+
+ // Test Modules
+ Modules modules = new Modules(basehome,args);
+ modules.registerAll();
+
+ List<String> moduleNames = new ArrayList<>();
+ for (Module mod : modules)
+ {
+ moduleNames.add(mod.getName());
+ }
+
+ List<String> expected = new ArrayList<>();
+ expected.add("base");
+
+ ConfigurationAssert.assertContainsUnordered("All Modules",expected,moduleNames);
+ }
+
@Test
public void testEnableRegexSimple() throws IOException
{
// Test Env
- File homeDir = MavenTestingUtils.getTestResourceDir("usecases/home");
+ File homeDir = MavenTestingUtils.getTestResourceDir("dist-home");
File baseDir = testdir.getEmptyDir();
- String cmdLine[] = new String[] {"jetty.version=TEST", "java.version=1.7.0_60"};
-
+ String cmdLine[] = new String[] { "jetty.version=TEST", "java.version=1.7.0_60" };
+
// Configuration
CommandLineConfigSource cmdLineSource = new CommandLineConfigSource(cmdLine);
ConfigSources config = new ConfigSources();
config.add(cmdLineSource);
config.add(new JettyHomeConfigSource(homeDir.toPath()));
config.add(new JettyBaseConfigSource(baseDir.toPath()));
-
+
// Initialize
BaseHome basehome = new BaseHome(config);
-
+
StartArgs args = new StartArgs();
args.parse(config);
// Test Modules
Modules modules = new Modules(basehome,args);
modules.registerAll();
- modules.enable("[sj]{1}.*",TEST_SOURCE);
+ Predicate sjPredicate = new RegexNamePredicate("[sj]{1}.*");
+ modules.selectNode(sjPredicate,new Selection(TEST_SOURCE));
modules.buildGraph();
List<String> expected = new ArrayList<>();
expected.add("jmx");
expected.add("stats");
- expected.add("spdy");
expected.add("security");
expected.add("jndi");
expected.add("jsp");
expected.add("servlet");
+ expected.add("servlets");
expected.add("jaas");
expected.add("server");
+ expected.add("setuid");
+ expected.add("spring");
+ expected.add("jaspi");
+ expected.add("jminix");
+ expected.add("jolokia");
+ expected.add("jamon");
+ expected.add("jstl");
+ expected.add("jmx-remote");
+ expected.add("jvm");
// transitive
- expected.add("base");
expected.add("ssl");
- expected.add("protonego");
- expected.add("protonego-boot");
- expected.add("protonego-impl");
- expected.add("xml");
- expected.add("jsp-impl");
-
+ expected.add("apache-jsp");
+ expected.add("apache-jstl");
+ expected.add("webapp");
+ expected.add("deploy");
+ expected.add("plus");
+ expected.add("annotations");
+
List<String> resolved = new ArrayList<>();
- for (Module module : modules.resolveEnabled())
+ for (Module module : modules.getSelected())
{
resolved.add(module.getName());
}
@@ -176,40 +252,38 @@ public class ModulesTest
public void testResolve_ServerHttp() throws IOException
{
// Test Env
- File homeDir = MavenTestingUtils.getTestResourceDir("usecases/home");
+ File homeDir = MavenTestingUtils.getTestResourceDir("dist-home");
File baseDir = testdir.getEmptyDir();
- String cmdLine[] = new String[] {"jetty.version=TEST"};
-
+ String cmdLine[] = new String[] { "jetty.version=TEST" };
+
// Configuration
CommandLineConfigSource cmdLineSource = new CommandLineConfigSource(cmdLine);
ConfigSources config = new ConfigSources();
config.add(cmdLineSource);
config.add(new JettyHomeConfigSource(homeDir.toPath()));
config.add(new JettyBaseConfigSource(baseDir.toPath()));
-
+
// Initialize
BaseHome basehome = new BaseHome(config);
-
+
StartArgs args = new StartArgs();
args.parse(config);
// Test Modules
- Modules modules = new Modules(basehome, args);
+ Modules modules = new Modules(basehome,args);
modules.registerAll();
// Enable 2 modules
- modules.enable("server",TEST_SOURCE);
- modules.enable("http",TEST_SOURCE);
+ modules.selectNode("server",new Selection(TEST_SOURCE));
+ modules.selectNode("http",new Selection(TEST_SOURCE));
modules.buildGraph();
// Collect active module list
- List<Module> active = modules.resolveEnabled();
+ List<Module> active = modules.getSelected();
// Assert names are correct, and in the right order
List<String> expectedNames = new ArrayList<>();
- expectedNames.add("base");
- expectedNames.add("xml");
expectedNames.add("server");
expectedNames.add("http");
@@ -219,21 +293,20 @@ public class ModulesTest
actualNames.add(actual.getName());
}
- Assert.assertThat("Resolved Names: " + actualNames,actualNames,contains(expectedNames.toArray()));
+ assertThat("Resolved Names: " + actualNames,actualNames,contains(expectedNames.toArray()));
// Assert Library List
List<String> expectedLibs = new ArrayList<>();
- expectedLibs.add("lib/jetty-util-${jetty.version}.jar");
- expectedLibs.add("lib/jetty-io-${jetty.version}.jar");
- expectedLibs.add("lib/jetty-xml-${jetty.version}.jar");
expectedLibs.add("lib/servlet-api-3.1.jar");
expectedLibs.add("lib/jetty-schemas-3.1.jar");
expectedLibs.add("lib/jetty-http-${jetty.version}.jar");
- expectedLibs.add("lib/jetty-continuation-${jetty.version}.jar");
expectedLibs.add("lib/jetty-server-${jetty.version}.jar");
+ expectedLibs.add("lib/jetty-xml-${jetty.version}.jar");
+ expectedLibs.add("lib/jetty-util-${jetty.version}.jar");
+ expectedLibs.add("lib/jetty-io-${jetty.version}.jar");
List<String> actualLibs = modules.normalizeLibs(active);
- Assert.assertThat("Resolved Libs: " + actualLibs,actualLibs,contains(expectedLibs.toArray()));
+ assertThat("Resolved Libs: " + actualLibs,actualLibs,contains(expectedLibs.toArray()));
// Assert XML List
List<String> expectedXmls = new ArrayList<>();
@@ -241,27 +314,27 @@ public class ModulesTest
expectedXmls.add("etc/jetty-http.xml");
List<String> actualXmls = modules.normalizeXmls(active);
- Assert.assertThat("Resolved XMLs: " + actualXmls,actualXmls,contains(expectedXmls.toArray()));
+ assertThat("Resolved XMLs: " + actualXmls,actualXmls,contains(expectedXmls.toArray()));
}
@Test
public void testResolve_WebSocket() throws IOException
{
// Test Env
- File homeDir = MavenTestingUtils.getTestResourceDir("usecases/home");
+ File homeDir = MavenTestingUtils.getTestResourceDir("dist-home");
File baseDir = testdir.getEmptyDir();
- String cmdLine[] = new String[] {"jetty.version=TEST"};
-
+ String cmdLine[] = new String[] { "jetty.version=TEST" };
+
// Configuration
CommandLineConfigSource cmdLineSource = new CommandLineConfigSource(cmdLine);
ConfigSources config = new ConfigSources();
config.add(cmdLineSource);
config.add(new JettyHomeConfigSource(homeDir.toPath()));
config.add(new JettyBaseConfigSource(baseDir.toPath()));
-
+
// Initialize
BaseHome basehome = new BaseHome(config);
-
+
StartArgs args = new StartArgs();
args.parse(config);
@@ -270,23 +343,23 @@ public class ModulesTest
modules.registerAll();
// Enable 2 modules
- modules.enable("websocket",TEST_SOURCE);
- modules.enable("http",TEST_SOURCE);
+ modules.selectNode("websocket",new Selection(TEST_SOURCE));
+ modules.selectNode("http",new Selection(TEST_SOURCE));
modules.buildGraph();
// modules.dump();
// Collect active module list
- List<Module> active = modules.resolveEnabled();
+ List<Module> active = modules.getSelected();
// Assert names are correct, and in the right order
List<String> expectedNames = new ArrayList<>();
- expectedNames.add("base");
- expectedNames.add("xml");
expectedNames.add("server");
expectedNames.add("http");
expectedNames.add("jndi");
expectedNames.add("security");
+ expectedNames.add("servlet");
+ expectedNames.add("webapp");
expectedNames.add("plus");
expectedNames.add("annotations");
expectedNames.add("websocket");
@@ -297,28 +370,29 @@ public class ModulesTest
actualNames.add(actual.getName());
}
- Assert.assertThat("Resolved Names: " + actualNames,actualNames,contains(expectedNames.toArray()));
+ assertThat("Resolved Names: " + actualNames,actualNames,contains(expectedNames.toArray()));
// Assert Library List
List<String> expectedLibs = new ArrayList<>();
- expectedLibs.add("lib/jetty-util-${jetty.version}.jar");
- expectedLibs.add("lib/jetty-io-${jetty.version}.jar");
- expectedLibs.add("lib/jetty-xml-${jetty.version}.jar");
expectedLibs.add("lib/servlet-api-3.1.jar");
expectedLibs.add("lib/jetty-schemas-3.1.jar");
expectedLibs.add("lib/jetty-http-${jetty.version}.jar");
- expectedLibs.add("lib/jetty-continuation-${jetty.version}.jar");
expectedLibs.add("lib/jetty-server-${jetty.version}.jar");
+ expectedLibs.add("lib/jetty-xml-${jetty.version}.jar");
+ expectedLibs.add("lib/jetty-util-${jetty.version}.jar");
+ expectedLibs.add("lib/jetty-io-${jetty.version}.jar");
expectedLibs.add("lib/jetty-jndi-${jetty.version}.jar");
expectedLibs.add("lib/jndi/*.jar");
expectedLibs.add("lib/jetty-security-${jetty.version}.jar");
+ expectedLibs.add("lib/jetty-servlet-${jetty.version}.jar");
+ expectedLibs.add("lib/jetty-webapp-${jetty.version}.jar");
expectedLibs.add("lib/jetty-plus-${jetty.version}.jar");
expectedLibs.add("lib/jetty-annotations-${jetty.version}.jar");
expectedLibs.add("lib/annotations/*.jar");
expectedLibs.add("lib/websocket/*.jar");
List<String> actualLibs = modules.normalizeLibs(active);
- Assert.assertThat("Resolved Libs: " + actualLibs,actualLibs,contains(expectedLibs.toArray()));
+ assertThat("Resolved Libs: " + actualLibs,actualLibs,contains(expectedLibs.toArray()));
// Assert XML List
List<String> expectedXmls = new ArrayList<>();
@@ -326,9 +400,98 @@ public class ModulesTest
expectedXmls.add("etc/jetty-http.xml");
expectedXmls.add("etc/jetty-plus.xml");
expectedXmls.add("etc/jetty-annotations.xml");
- expectedXmls.add("etc/jetty-websockets.xml");
List<String> actualXmls = modules.normalizeXmls(active);
- Assert.assertThat("Resolved XMLs: " + actualXmls,actualXmls,contains(expectedXmls.toArray()));
+ assertThat("Resolved XMLs: " + actualXmls,actualXmls,contains(expectedXmls.toArray()));
+ }
+
+ @Test
+ public void testResolve_Alt() throws IOException
+ {
+ // Test Env
+ File homeDir = MavenTestingUtils.getTestResourceDir("dist-home");
+ File baseDir = testdir.getEmptyDir();
+ String cmdLine[] = new String[] { "jetty.version=TEST" };
+
+ // Configuration
+ CommandLineConfigSource cmdLineSource = new CommandLineConfigSource(cmdLine);
+ ConfigSources config = new ConfigSources();
+ config.add(cmdLineSource);
+ config.add(new JettyHomeConfigSource(homeDir.toPath()));
+ config.add(new JettyBaseConfigSource(baseDir.toPath()));
+
+ // Initialize
+ BaseHome basehome = new BaseHome(config);
+
+ StartArgs args = new StartArgs();
+ args.parse(config);
+
+ // Test Modules
+ Modules modules = new Modules(basehome,args);
+ modules.registerAll();
+
+ // Enable test modules
+ modules.selectNode("http",new Selection(TEST_SOURCE));
+ modules.selectNode("annotations",new Selection(TEST_SOURCE));
+ modules.selectNode("deploy",new Selection(TEST_SOURCE));
+ // Enable alternate modules
+ String alt = "<alt>";
+ modules.selectNode("websocket",new Selection(alt));
+ modules.selectNode("jsp",new Selection(alt));
+
+ modules.buildGraph();
+ // modules.dump();
+
+ // Collect active module list
+ List<Module> active = modules.getSelected();
+
+ // Assert names are correct, and in the right order
+ List<String> expectedNames = new ArrayList<>();
+ expectedNames.add("apache-jsp");
+ expectedNames.add("server");
+ expectedNames.add("http");
+ expectedNames.add("jndi");
+ expectedNames.add("security");
+ expectedNames.add("servlet");
+ expectedNames.add("webapp");
+ expectedNames.add("deploy");
+ expectedNames.add("plus");
+ expectedNames.add("annotations");
+ expectedNames.add("jsp");
+ expectedNames.add("websocket");
+
+ List<String> actualNames = new ArrayList<>();
+ for (Module actual : active)
+ {
+ actualNames.add(actual.getName());
+ }
+
+ assertThat("Resolved Names: " + actualNames,actualNames,contains(expectedNames.toArray()));
+
+ // Now work with the 'alt' selected
+ List<String> expectedAlts = new ArrayList<>();
+ expectedAlts.add("apache-jsp");
+ expectedAlts.add("jsp");
+ expectedAlts.add("websocket");
+
+ for (String expectedAlt : expectedAlts)
+ {
+ Module altMod = modules.get(expectedAlt);
+ assertThat("Alt.mod[" + expectedAlt + "].selected",altMod.isSelected(),is(true));
+ Set<String> sources = altMod.getSelectedHowSet();
+ assertThat("Alt.mod[" + expectedAlt + "].sources: [" + Utils.join(sources,", ") + "]",sources,contains(alt));
+ }
+
+ // Now collect the unique source list
+ List<Module> alts = modules.getMatching(new HowSetPredicate(alt));
+
+ // Assert names are correct, and in the right order
+ actualNames = new ArrayList<>();
+ for (Module actual : alts)
+ {
+ actualNames.add(actual.getName());
+ }
+
+ assertThat("Resolved Alt (Sources) Names: " + actualNames,actualNames,contains(expectedAlts.toArray()));
}
}
diff --git a/jetty-start/src/test/java/org/eclipse/jetty/start/PathFinderTest.java b/jetty-start/src/test/java/org/eclipse/jetty/start/PathFinderTest.java
index 7815c72d79..4f7e60d2a5 100644
--- a/jetty-start/src/test/java/org/eclipse/jetty/start/PathFinderTest.java
+++ b/jetty-start/src/test/java/org/eclipse/jetty/start/PathFinderTest.java
@@ -28,15 +28,22 @@ import java.util.EnumSet;
import java.util.List;
import org.eclipse.jetty.toolchain.test.MavenTestingUtils;
+import org.eclipse.jetty.toolchain.test.TestingDir;
+import org.junit.Rule;
import org.junit.Test;
public class PathFinderTest
{
+ @Rule
+ public TestingDir testdir = new TestingDir();
+
@Test
public void testFindInis() throws IOException
{
File homeDir = MavenTestingUtils.getTestResourceDir("hb.1/home");
Path homePath = homeDir.toPath().toAbsolutePath();
+ File baseDir = testdir.getEmptyDir();
+ Path basePath = baseDir.toPath().toAbsolutePath();
PathFinder finder = new PathFinder();
finder.setFileMatcher("glob:**/*.ini");
@@ -53,15 +60,17 @@ public class PathFinderTest
expected.add("${jetty.home}/start.ini");
FSTest.toOsSeparators(expected);
- BaseHome hb = new BaseHome(new String[] { "jetty.home=" + homePath.toString() });
+ BaseHome hb = new BaseHome(new String[] { "jetty.home=" + homePath.toString(), "jetty.base=" + basePath.toString() });
BaseHomeTest.assertPathList(hb,"Files found",expected,finder);
}
@Test
public void testFindMods() throws IOException
{
- File homeDir = MavenTestingUtils.getTestResourceDir("usecases/home");
+ File homeDir = MavenTestingUtils.getTestResourceDir("dist-home");
Path homePath = homeDir.toPath().toAbsolutePath();
+ File baseDir = testdir.getEmptyDir();
+ Path basePath = baseDir.toPath().toAbsolutePath();
List<String> expected = new ArrayList<>();
File modulesDir = new File(homeDir,"modules");
@@ -82,7 +91,7 @@ public class PathFinderTest
Files.walkFileTree(modulesPath,EnumSet.of(FileVisitOption.FOLLOW_LINKS),1,finder);
- BaseHome hb = new BaseHome(new String[] { "jetty.home=" + homePath.toString() });
+ BaseHome hb = new BaseHome(new String[] { "jetty.home=" + homePath.toString(), "jetty.base=" + basePath.toString() });
BaseHomeTest.assertPathList(hb,"Files found",expected,finder);
}
}
diff --git a/jetty-start/src/test/java/org/eclipse/jetty/start/StartMatchers.java b/jetty-start/src/test/java/org/eclipse/jetty/start/StartMatchers.java
new file mode 100644
index 0000000000..367303bcee
--- /dev/null
+++ b/jetty-start/src/test/java/org/eclipse/jetty/start/StartMatchers.java
@@ -0,0 +1,104 @@
+//
+// ========================================================================
+// 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;
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+import org.hamcrest.BaseMatcher;
+import org.hamcrest.Description;
+import org.hamcrest.Matcher;
+
+public final class StartMatchers
+{
+ public static Matcher<Path> pathExists()
+ {
+ return new BaseMatcher<Path>()
+ {
+ @Override
+ public boolean matches(Object item)
+ {
+ final Path path = (Path)item;
+ return Files.exists(path);
+ }
+
+ @Override
+ public void describeTo(Description description)
+ {
+ description.appendText("Path should exist");
+ }
+
+ @Override
+ public void describeMismatch(Object item, Description description)
+ {
+ description.appendText("Path did not exist ").appendValue(item);
+ }
+ };
+ }
+
+ public static Matcher<Path> notPathExists()
+ {
+ return new BaseMatcher<Path>()
+ {
+ @Override
+ public boolean matches(Object item)
+ {
+ final Path path = (Path)item;
+ return !Files.exists(path);
+ }
+
+ @Override
+ public void describeTo(Description description)
+ {
+ description.appendText("Path should not exist");
+ }
+
+ @Override
+ public void describeMismatch(Object item, Description description)
+ {
+ description.appendText("Path exists ").appendValue(item);
+ }
+ };
+ }
+
+ public static Matcher<Path> fileExists()
+ {
+ return new BaseMatcher<Path>()
+ {
+ @Override
+ public boolean matches(Object item)
+ {
+ final Path path = (Path)item;
+ return Files.exists(path) && Files.isRegularFile(path);
+ }
+
+ @Override
+ public void describeTo(Description description)
+ {
+ description.appendText("File should exist");
+ }
+
+ @Override
+ public void describeMismatch(Object item, Description description)
+ {
+ description.appendText("File did not exist ").appendValue(item);
+ }
+ };
+ }
+}
diff --git a/jetty-start/src/test/java/org/eclipse/jetty/start/TestBadUseCases.java b/jetty-start/src/test/java/org/eclipse/jetty/start/TestBadUseCases.java
index f949fdea23..b94d52c45f 100644
--- a/jetty-start/src/test/java/org/eclipse/jetty/start/TestBadUseCases.java
+++ b/jetty-start/src/test/java/org/eclipse/jetty/start/TestBadUseCases.java
@@ -19,67 +19,72 @@
package org.eclipse.jetty.start;
import static org.hamcrest.Matchers.*;
-import static org.junit.Assert.*;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jetty.toolchain.test.MavenTestingUtils;
+import org.junit.Rule;
import org.junit.Test;
+import org.junit.rules.ExpectedException;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
+import org.junit.runners.Parameterized.Parameters;
/**
* Test bad configuration scenarios.
*/
+@RunWith(Parameterized.class)
public class TestBadUseCases
{
- private void assertBadConfig(String homeName, String baseName, String expectedErrorMessage, String... cmdLineArgs) throws Exception
+ @Parameters(name = "{0}")
+ public static List<Object[]> getCases()
{
- File homeDir = MavenTestingUtils.getTestResourceDir("usecases/" + homeName);
- File baseDir = MavenTestingUtils.getTestResourceDir("usecases/" + baseName);
+ List<Object[]> ret = new ArrayList<>();
+
+ ret.add(new Object[]{ "http2",
+ "Missing referenced dependency: alpn-impl/alpn-1.7.0_01",
+ new String[]{"java.version=1.7.0_01"}});
+
+ return ret;
+ }
+
+ @Rule
+ public ExpectedException expectedException = ExpectedException.none();
+
+ @Parameter(0)
+ public String caseName;
+
+ @Parameter(1)
+ public String expectedErrorMessage;
+
+ @Parameter(2)
+ public String[] commandLineArgs;
+
+ @Test
+ public void testBadConfig() throws Exception
+ {
+ File homeDir = MavenTestingUtils.getTestResourceDir("dist-home");
+ File baseDir = MavenTestingUtils.getTestResourceDir("usecases/" + caseName);
Main main = new Main();
List<String> cmdLine = new ArrayList<>();
cmdLine.add("jetty.home=" + homeDir.getAbsolutePath());
cmdLine.add("jetty.base=" + baseDir.getAbsolutePath());
// cmdLine.add("--debug");
- for (String arg : cmdLineArgs)
- {
- cmdLine.add(arg);
- }
-
- try
- {
- main.processCommandLine(cmdLine);
- fail("Expected " + UsageException.class.getName());
- }
- catch (UsageException e)
+
+ if (commandLineArgs != null)
{
- assertThat("Usage error",e.getMessage(),containsString(expectedErrorMessage));
+ for (String arg : commandLineArgs)
+ {
+ cmdLine.add(arg);
+ }
}
- }
- @Test
- public void testBadJspCommandLine() throws Exception
- {
- assertBadConfig("home","base.with.jsp.default",
- "Missing referenced dependency: jsp-impl/bad-jsp","jsp-impl=bad");
- }
-
- @Test
- public void testBadJspImplName() throws Exception
- {
- assertBadConfig("home","base.with.jsp.bad",
- "Missing referenced dependency: jsp-impl/bogus-jsp");
+ expectedException.expect(UsageException.class);
+ expectedException.expectMessage(containsString(expectedErrorMessage));
+ main.processCommandLine(cmdLine);
}
-
- @Test
- public void testWithSpdyBadNpnVersion() throws Exception
- {
- assertBadConfig("home","base.enable.spdy.bad.npn.version",
- "Missing referenced dependency: protonego-impl/npn-1.7.0_01",
- "java.version=1.7.0_01", "protonego=npn");
- }
-
-
}
diff --git a/jetty-start/src/test/java/org/eclipse/jetty/start/TestUseCases.java b/jetty-start/src/test/java/org/eclipse/jetty/start/TestUseCases.java
index 59df17ff79..c3685ce27d 100644
--- a/jetty-start/src/test/java/org/eclipse/jetty/start/TestUseCases.java
+++ b/jetty-start/src/test/java/org/eclipse/jetty/start/TestUseCases.java
@@ -24,112 +24,66 @@ import java.util.List;
import org.eclipse.jetty.toolchain.test.MavenTestingUtils;
import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameter;
+import org.junit.runners.Parameterized.Parameters;
/**
* Various Home + Base use cases
*/
+@RunWith(Parameterized.class)
public class TestUseCases
{
- private void assertUseCase(String homeName, String baseName, String assertName, String... cmdLineArgs) throws Exception
+ @Parameters(name = "{0}")
+ public static List<Object[]> getCases()
{
- File homeDir = MavenTestingUtils.getTestResourceDir("usecases/" + homeName);
- File baseDir = MavenTestingUtils.getTestResourceDir("usecases/" + baseName);
+ List<Object[]> ret = new ArrayList<>();
- Main main = new Main();
- List<String> cmdLine = new ArrayList<>();
- cmdLine.add("jetty.home=" + homeDir.getAbsolutePath());
- cmdLine.add("jetty.base=" + baseDir.getAbsolutePath());
- // cmdLine.add("--debug");
- for (String arg : cmdLineArgs)
- {
- cmdLine.add(arg);
- }
- StartArgs args = main.processCommandLine(cmdLine);
- BaseHome baseHome = main.getBaseHome();
- ConfigurationAssert.assertConfiguration(baseHome,args,"usecases/" + assertName);
- }
-
- @Test
- public void testBarebones() throws Exception
- {
- assertUseCase("home","base.barebones","assert-barebones.txt");
- }
-
- @Test
- public void testJMX() throws Exception
- {
- assertUseCase("home","base.jmx","assert-jmx.txt");
- }
-
- @Test
- public void testWithLogging() throws Exception
- {
- assertUseCase("home","base.logging","assert-logging.txt");
+ ret.add(new String[] {"barebones", null});
+ ret.add(new String[] {"include-jetty-dir-logging", null});
+ ret.add(new String[] {"jmx", null});
+ ret.add(new String[] {"logging", null});
+ ret.add(new String[] {"jsp", null});
+ ret.add(new String[] {"database", null});
+ ret.add(new String[] {"deep-ext", null});
+
+ // Ones with command lines
+ ret.add(new Object[] {"http2", new String[]{"java.version=1.7.0_60"}});
+ ret.add(new Object[] {"basic-properties", new String[]{"port=9090"}});
+ ret.add(new Object[] {"agent-properties", new String[]{"java.vm.specification.version=1.6"}});
+
+ return ret;
}
- @Test
- public void testWithIncludeJettyDir_Logging() throws Exception
- {
- assertUseCase("home","base.with.include.jetty.dirs","assert-include-jetty-dir-logging.txt");
- }
+ @Parameter(0)
+ public String caseName;
- @Test
- public void testWithJspDefault() throws Exception
- {
- assertUseCase("home","base.with.jsp.default","assert-jsp-apache.txt");
- }
+ @Parameter(1)
+ public String[] commandLineArgs;
@Test
- public void testWithJspApache() throws Exception
+ public void testUseCase() throws Exception
{
- assertUseCase("home","base.with.jsp.apache","assert-jsp-apache.txt");
- }
-
- @Test
- public void testWithJspGlassfish() throws Exception
- {
- assertUseCase("home","base.with.jsp.glassfish","assert-jsp-glassfish.txt");
- }
+ File homeDir = MavenTestingUtils.getTestResourceDir("dist-home");
+ File baseDir = MavenTestingUtils.getTestResourceDir("usecases/" + caseName);
- @Test
- public void testWithJspGlassfishCmdLine() throws Exception
- {
- assertUseCase("home","base.with.jsp.default","assert-jsp-glassfish.txt","jsp-impl=glassfish");
- }
+ Main main = new Main();
+ List<String> cmdLine = new ArrayList<>();
+ cmdLine.add("jetty.home=" + homeDir.getAbsolutePath());
+ cmdLine.add("jetty.base=" + baseDir.getAbsolutePath());
+ // cmdLine.add("--debug");
- @Test
- public void testWithMissingNpnVersion() throws Exception
- {
- assertUseCase("home","base.missing.npn.version","assert-missing-npn-version.txt","java.version=1.7.0_01");
- }
-
- @Test
- public void testWithSpdy() throws Exception
- {
- assertUseCase("home","base.enable.spdy","assert-enable-spdy.txt","java.version=1.7.0_60");
- }
-
- @Test
- public void testWithDatabase() throws Exception
- {
- assertUseCase("home","base.with.db","assert-with-db.txt");
- }
+ if (commandLineArgs != null)
+ {
+ for (String arg : commandLineArgs)
+ {
+ cmdLine.add(arg);
+ }
+ }
- @Test
- public void testWithDeepExt() throws Exception
- {
- assertUseCase("home","base.with.ext","assert-with.ext.txt");
- }
-
- @Test
- public void testWithPropsBasic() throws Exception
- {
- assertUseCase("home","base.props.basic","assert-props.basic.txt","port=9090");
- }
-
- @Test
- public void testWithPropsAgent() throws Exception
- {
- assertUseCase("home","base.props.agent","assert-props.agent.txt","java.vm.specification.version=1.6");
+ StartArgs args = main.processCommandLine(cmdLine);
+ BaseHome baseHome = main.getBaseHome();
+ ConfigurationAssert.assertConfiguration(baseHome,args,"usecases/" + caseName + ".assert.txt");
}
}
diff --git a/jetty-start/src/test/java/org/eclipse/jetty/start/config/ConfigSourcesTest.java b/jetty-start/src/test/java/org/eclipse/jetty/start/config/ConfigSourcesTest.java
index 7aad9a9892..1bf587dbbc 100644
--- a/jetty-start/src/test/java/org/eclipse/jetty/start/config/ConfigSourcesTest.java
+++ b/jetty-start/src/test/java/org/eclipse/jetty/start/config/ConfigSourcesTest.java
@@ -83,7 +83,7 @@ public class ConfigSourcesTest
// Create home
File home = testdir.getFile("home");
FS.ensureEmpty(home);
- TestEnv.copyTestDir("usecases/home",home);
+ TestEnv.copyTestDir("dist-home",home);
// Create base
File base = testdir.getFile("base");
@@ -107,7 +107,7 @@ public class ConfigSourcesTest
// Create home
File home = testdir.getFile("home");
FS.ensureEmpty(home);
- TestEnv.copyTestDir("usecases/home",home);
+ TestEnv.copyTestDir("dist-home",home);
// Create common
File common = testdir.getFile("common");
@@ -136,7 +136,7 @@ public class ConfigSourcesTest
// Create home
File home = testdir.getFile("home");
FS.ensureEmpty(home);
- TestEnv.copyTestDir("usecases/home",home);
+ TestEnv.copyTestDir("dist-home",home);
// Create common
File common = testdir.getFile("common");
@@ -177,7 +177,7 @@ public class ConfigSourcesTest
// Create home
File home = testdir.getFile("home");
FS.ensureEmpty(home);
- TestEnv.copyTestDir("usecases/home",home);
+ TestEnv.copyTestDir("dist-home",home);
// Create opt
File opt = testdir.getFile("opt");
@@ -223,7 +223,7 @@ public class ConfigSourcesTest
// Create home
File home = testdir.getFile("home");
FS.ensureEmpty(home);
- TestEnv.copyTestDir("usecases/home",home);
+ TestEnv.copyTestDir("dist-home",home);
// Create opt
File opt = testdir.getFile("opt");
@@ -272,7 +272,7 @@ public class ConfigSourcesTest
// Create home
File home = testdir.getFile("home");
FS.ensureEmpty(home);
- TestEnv.copyTestDir("usecases/home",home);
+ TestEnv.copyTestDir("dist-home",home);
// Create common
File common = testdir.getFile("common");
@@ -307,7 +307,7 @@ public class ConfigSourcesTest
// Create home
File home = testdir.getFile("home");
FS.ensureEmpty(home);
- TestEnv.copyTestDir("usecases/home",home);
+ TestEnv.copyTestDir("dist-home",home);
// Create common
File common = testdir.getFile("common");
@@ -350,7 +350,7 @@ public class ConfigSourcesTest
// Create home
File home = testdir.getFile("home");
FS.ensureEmpty(home);
- TestEnv.copyTestDir("usecases/home",home);
+ TestEnv.copyTestDir("dist-home",home);
// Create corp
File corp = testdir.getFile("corp");
@@ -396,7 +396,7 @@ public class ConfigSourcesTest
// Create home
File home = testdir.getFile("home");
FS.ensureEmpty(home);
- TestEnv.copyTestDir("usecases/home",home);
+ TestEnv.copyTestDir("dist-home",home);
// Create corp
File corp = testdir.getFile("corp");
@@ -445,7 +445,7 @@ public class ConfigSourcesTest
// Create home
File home = testdir.getFile("home");
FS.ensureEmpty(home);
- TestEnv.copyTestDir("usecases/home",home);
+ TestEnv.copyTestDir("dist-home",home);
// Create devops
File devops = testdir.getFile("devops");
@@ -502,7 +502,7 @@ public class ConfigSourcesTest
// Create home
File home = testdir.getFile("home");
FS.ensureEmpty(home);
- TestEnv.copyTestDir("usecases/home",home);
+ TestEnv.copyTestDir("dist-home",home);
// Create corp
File corp = testdir.getFile("corp");
@@ -551,7 +551,7 @@ public class ConfigSourcesTest
// Create home
File home = testdir.getFile("home");
FS.ensureEmpty(home);
- TestEnv.copyTestDir("usecases/home",home);
+ TestEnv.copyTestDir("dist-home",home);
// Create common
File common = testdir.getFile("common");
diff --git a/jetty-start/src/test/java/org/eclipse/jetty/start/fileinits/MavenLocalRepoFileInitializerTest.java b/jetty-start/src/test/java/org/eclipse/jetty/start/fileinits/MavenLocalRepoFileInitializerTest.java
new file mode 100644
index 0000000000..a755776e53
--- /dev/null
+++ b/jetty-start/src/test/java/org/eclipse/jetty/start/fileinits/MavenLocalRepoFileInitializerTest.java
@@ -0,0 +1,151 @@
+//
+// ========================================================================
+// 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.fileinits;
+
+import static org.hamcrest.Matchers.*;
+import static org.junit.Assert.*;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URI;
+
+import org.eclipse.jetty.start.BaseHome;
+import org.eclipse.jetty.start.config.ConfigSources;
+import org.eclipse.jetty.start.config.JettyBaseConfigSource;
+import org.eclipse.jetty.start.config.JettyHomeConfigSource;
+import org.eclipse.jetty.start.fileinits.MavenLocalRepoFileInitializer.Coordinates;
+import org.eclipse.jetty.toolchain.test.TestingDir;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+public class MavenLocalRepoFileInitializerTest
+{
+ @Rule
+ public ExpectedException expectedException = ExpectedException.none();
+
+ @Rule
+ public TestingDir testdir = new TestingDir();
+
+ private BaseHome baseHome;
+
+ @Before
+ public void setupBaseHome() throws IOException
+ {
+ File homeDir = testdir.getEmptyDir();
+
+ ConfigSources config = new ConfigSources();
+ config.add(new JettyHomeConfigSource(homeDir.toPath()));
+ config.add(new JettyBaseConfigSource(homeDir.toPath()));
+
+ this.baseHome = new BaseHome(config);
+ }
+
+ @Test
+ public void testGetCoordinate_NotMaven()
+ {
+ MavenLocalRepoFileInitializer repo = new MavenLocalRepoFileInitializer(baseHome);
+ String ref = "http://www.eclipse.org/jetty";
+ Coordinates coords = repo.getCoordinates(URI.create(ref));
+ assertThat("Coords",coords,nullValue());
+ }
+
+ @Test
+ public void testGetCoordinate_InvalidMaven()
+ {
+ MavenLocalRepoFileInitializer repo = new MavenLocalRepoFileInitializer(baseHome);
+ String ref = "maven://www.eclipse.org/jetty";
+ expectedException.expect(RuntimeException.class);
+ expectedException.expectMessage(containsString("Not a valid maven:// uri"));
+ repo.getCoordinates(URI.create(ref));
+ }
+
+ @Test
+ public void testGetCoordinate_Normal()
+ {
+ MavenLocalRepoFileInitializer repo = new MavenLocalRepoFileInitializer(baseHome);
+ String ref = "maven://org.eclipse.jetty/jetty-start/9.3.x";
+ Coordinates coords = repo.getCoordinates(URI.create(ref));
+ assertThat("Coordinates",coords,notNullValue());
+
+ assertThat("coords.groupId",coords.groupId,is("org.eclipse.jetty"));
+ assertThat("coords.artifactId",coords.artifactId,is("jetty-start"));
+ assertThat("coords.version",coords.version,is("9.3.x"));
+ assertThat("coords.type",coords.type,is("jar"));
+ assertThat("coords.classifier",coords.classifier,nullValue());
+
+ assertThat("coords.toCentralURI", coords.toCentralURI().toASCIIString(),
+ is("http://central.maven.org/maven2/org/eclipse/jetty/jetty-start/9.3.x/jetty-start-9.3.x.jar"));
+ }
+
+ @Test
+ public void testGetCoordinate_Zip()
+ {
+ MavenLocalRepoFileInitializer repo = new MavenLocalRepoFileInitializer(baseHome);
+ String ref = "maven://org.eclipse.jetty/jetty-distribution/9.3.x/zip";
+ Coordinates coords = repo.getCoordinates(URI.create(ref));
+ assertThat("Coordinates",coords,notNullValue());
+
+ assertThat("coords.groupId",coords.groupId,is("org.eclipse.jetty"));
+ assertThat("coords.artifactId",coords.artifactId,is("jetty-distribution"));
+ assertThat("coords.version",coords.version,is("9.3.x"));
+ assertThat("coords.type",coords.type,is("zip"));
+ assertThat("coords.classifier",coords.classifier,nullValue());
+
+ assertThat("coords.toCentralURI", coords.toCentralURI().toASCIIString(),
+ is("http://central.maven.org/maven2/org/eclipse/jetty/jetty-distribution/9.3.x/jetty-distribution-9.3.x.zip"));
+ }
+
+ @Test
+ public void testGetCoordinate_TestJar()
+ {
+ MavenLocalRepoFileInitializer repo = new MavenLocalRepoFileInitializer(baseHome);
+ String ref = "maven://org.eclipse.jetty/jetty-http/9.3.x/jar/tests";
+ Coordinates coords = repo.getCoordinates(URI.create(ref));
+ assertThat("Coordinates",coords,notNullValue());
+
+ assertThat("coords.groupId",coords.groupId,is("org.eclipse.jetty"));
+ assertThat("coords.artifactId",coords.artifactId,is("jetty-http"));
+ assertThat("coords.version",coords.version,is("9.3.x"));
+ assertThat("coords.type",coords.type,is("jar"));
+ assertThat("coords.classifier",coords.classifier,is("tests"));
+
+ assertThat("coords.toCentralURI", coords.toCentralURI().toASCIIString(),
+ is("http://central.maven.org/maven2/org/eclipse/jetty/jetty-http/9.3.x/jetty-http-9.3.x-tests.jar"));
+ }
+
+ @Test
+ public void testGetCoordinate_Test_UnspecifiedType()
+ {
+ MavenLocalRepoFileInitializer repo = new MavenLocalRepoFileInitializer(baseHome);
+ String ref = "maven://org.eclipse.jetty/jetty-http/9.3.x//tests";
+ Coordinates coords = repo.getCoordinates(URI.create(ref));
+ assertThat("Coordinates",coords,notNullValue());
+
+ assertThat("coords.groupId",coords.groupId,is("org.eclipse.jetty"));
+ assertThat("coords.artifactId",coords.artifactId,is("jetty-http"));
+ assertThat("coords.version",coords.version,is("9.3.x"));
+ assertThat("coords.type",coords.type,is("jar"));
+ assertThat("coords.classifier",coords.classifier,is("tests"));
+
+ assertThat("coords.toCentralURI", coords.toCentralURI().toASCIIString(),
+ is("http://central.maven.org/maven2/org/eclipse/jetty/jetty-http/9.3.x/jetty-http-9.3.x-tests.jar"));
+ }
+}
diff --git a/jetty-start/src/test/java/org/eclipse/jetty/start/graph/NodeTest.java b/jetty-start/src/test/java/org/eclipse/jetty/start/graph/NodeTest.java
new file mode 100644
index 0000000000..a8134a46eb
--- /dev/null
+++ b/jetty-start/src/test/java/org/eclipse/jetty/start/graph/NodeTest.java
@@ -0,0 +1,75 @@
+//
+// ========================================================================
+// 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.graph;
+
+import static org.hamcrest.Matchers.*;
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+public class NodeTest
+{
+ private static class TestNode extends Node<TestNode>
+ {
+ public TestNode(String name)
+ {
+ setName(name);
+ }
+
+ @Override
+ public String toString()
+ {
+ return String.format("TestNode[%s]",getName());
+ }
+ }
+
+ @Test
+ public void testNoNameMatch()
+ {
+ TestNode node = new TestNode("a");
+ Predicate predicate = new NamePredicate("b");
+ assertThat(node.toString(),node.matches(predicate),is(false));
+ }
+
+ @Test
+ public void testNameMatch()
+ {
+ TestNode node = new TestNode("a");
+ Predicate predicate = new NamePredicate("a");
+ assertThat(node.toString(),node.matches(predicate),is(true));
+ }
+
+ @Test
+ public void testAnySelectionMatch()
+ {
+ TestNode node = new TestNode("a");
+ node.addSelection(new Selection("test"));
+ Predicate predicate = new AnySelectionPredicate();
+ assertThat(node.toString(),node.matches(predicate),is(true));
+ }
+
+ @Test
+ public void testAnySelectionNoMatch()
+ {
+ TestNode node = new TestNode("a");
+ // NOT Selected - node.addSelection(new Selection("test"));
+ Predicate predicate = new AnySelectionPredicate();
+ assertThat(node.toString(),node.matches(predicate),is(false));
+ }
+}
diff --git a/jetty-start/src/test/java/org/eclipse/jetty/start/util/CorrectMavenCentralRefs.java b/jetty-start/src/test/java/org/eclipse/jetty/start/util/CorrectMavenCentralRefs.java
new file mode 100644
index 0000000000..def127738f
--- /dev/null
+++ b/jetty-start/src/test/java/org/eclipse/jetty/start/util/CorrectMavenCentralRefs.java
@@ -0,0 +1,256 @@
+//
+// ========================================================================
+// 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.io.BufferedReader;
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.FileVisitOption;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.PathMatcher;
+import java.nio.file.StandardOpenOption;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Locale;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.eclipse.jetty.start.PathFinder;
+import org.eclipse.jetty.start.PathMatchers;
+import org.eclipse.jetty.start.Utils;
+import org.eclipse.jetty.toolchain.test.MavenTestingUtils;
+
+/**
+ * Simple utility to scan all of the mod files and correct references
+ * to maven central URL in [files] sections to the new maven:// syntax
+ */
+public class CorrectMavenCentralRefs
+{
+ public static void main(String[] args)
+ {
+ Path buildRoot = MavenTestingUtils.getProjectDir("..").toPath();
+ buildRoot = buildRoot.normalize().toAbsolutePath();
+
+ // Test to make sure we are in right directory
+ Path rootPomXml = buildRoot.resolve("pom.xml");
+ Path distPomXml = buildRoot.resolve("jetty-distribution/pom.xml");
+ if (!Files.exists(rootPomXml) || !Files.exists(distPomXml))
+ {
+ System.err.println("Not build root directory: " + buildRoot);
+ System.exit(-1);
+ }
+
+ try
+ {
+ new CorrectMavenCentralRefs().fix(buildRoot);
+ }
+ catch (Throwable t)
+ {
+ t.printStackTrace(System.err);
+ }
+ }
+
+ public void fix(Path buildRoot) throws IOException
+ {
+ // Find all of the *.mod files
+ PathFinder finder = new PathFinder();
+ finder.setFileMatcher("glob:**/*.mod");
+ finder.setBase(buildRoot);
+
+ // Matcher for target directories
+ PathMatcher targetMatcher = PathMatchers.getMatcher("glob:**/target/**");
+ PathMatcher testMatcher = PathMatchers.getMatcher("glob:**/test/**");
+
+ System.out.printf("Walking path: %s%n",buildRoot);
+ Set<FileVisitOption> options = Collections.emptySet();
+ Files.walkFileTree(buildRoot,options,30,finder);
+
+ System.out.printf("Found: %d hits%n",finder.getHits().size());
+ int count = 0;
+ for (Path path : finder.getHits())
+ {
+ if (Files.isDirectory(path))
+ {
+ // skip
+ continue;
+ }
+
+ if (targetMatcher.matches(path))
+ {
+ // skip
+ continue;
+ }
+
+ if (testMatcher.matches(path))
+ {
+ // skip
+ continue;
+ }
+
+ if (processModFile(path))
+ {
+ count++;
+ }
+ }
+
+ System.out.printf("Processed %,d modules",count);
+ }
+
+ private boolean processFileRefs(List<String> lines)
+ {
+ Pattern section = Pattern.compile("\\s*\\[([^]]*)\\]\\s*");
+ int filesStart = -1;
+ int filesEnd = -1;
+
+ // Find [files] section
+ String sectionId = null;
+ int lineCount = lines.size();
+ for (int i = 0; i < lineCount; i++)
+ {
+ String line = lines.get(i).trim();
+
+ Matcher sectionMatcher = section.matcher(line);
+
+ if (sectionMatcher.matches())
+ {
+ sectionId = sectionMatcher.group(1).trim().toUpperCase(Locale.ENGLISH);
+ }
+ else
+ {
+ if ("FILES".equals(sectionId))
+ {
+ if (filesStart < 0)
+ {
+ filesStart = i;
+ }
+ filesEnd = i;
+ }
+ }
+ }
+
+ if (filesStart == (-1))
+ {
+ // no [files] section
+ return false;
+ }
+
+ // process lines, only in files section
+ int updated = 0;
+ for (int i = filesStart; i <= filesEnd; i++)
+ {
+ String line = lines.get(i);
+ String keyword = "maven.org/maven2/";
+ int idx = line.indexOf(keyword);
+ if (idx > 0)
+ {
+ int pipe = line.indexOf('|');
+ String rawpath = line.substring(idx + keyword.length(),pipe);
+ String destpath = line.substring(pipe + 1);
+
+ String parts[] = rawpath.split("/");
+ int rev = parts.length;
+ String filename = parts[--rev];
+
+ String type = "jar";
+ int ext = filename.lastIndexOf('.');
+ if (ext > 0)
+ {
+ type = filename.substring(ext + 1);
+ }
+ String version = parts[--rev];
+ String artifactId = parts[--rev];
+ String groupId = Utils.join(parts,0,rev,".");
+
+ String classifier = filename.replaceFirst(artifactId + '-' + version,"");
+ classifier = classifier.replaceFirst('.' + type + '$',"");
+ if (Utils.isNotBlank(classifier) && (classifier.charAt(0) == '-'))
+ {
+ classifier = classifier.substring(1);
+ }
+
+ StringBuilder murl = new StringBuilder();
+ murl.append("maven://");
+ murl.append(groupId).append('/');
+ murl.append(artifactId).append('/');
+ murl.append(version);
+ if (!"jar".equals(type) || Utils.isNotBlank(classifier))
+ {
+ murl.append('/').append(type);
+ if (Utils.isNotBlank(classifier))
+ {
+ murl.append('/').append(classifier);
+ }
+ }
+
+ lines.set(i,murl.toString()+'|'+destpath);
+
+ updated++;
+ }
+ }
+
+ return (updated > 0);
+ }
+
+ private boolean processModFile(Path path) throws IOException
+ {
+ List<String> lines = readLines(path);
+ if (processFileRefs(lines))
+ {
+ // the lines are now dirty, save them.
+ System.out.printf("Updating: %s%n",path);
+ saveLines(path,lines);
+ return true;
+ }
+
+ // no update performed
+ return false;
+ }
+
+ private List<String> readLines(Path path) throws IOException
+ {
+ List<String> lines = new ArrayList<>();
+
+ try (BufferedReader reader = Files.newBufferedReader(path,StandardCharsets.UTF_8))
+ {
+ String line;
+ while ((line = reader.readLine()) != null)
+ {
+ lines.add(line);
+ }
+ }
+
+ return lines;
+ }
+
+ private void saveLines(Path path, List<String> lines) throws IOException
+ {
+ try (BufferedWriter writer = Files.newBufferedWriter(path,StandardCharsets.UTF_8,StandardOpenOption.TRUNCATE_EXISTING))
+ {
+ for (String line : lines)
+ {
+ writer.write(line);
+ writer.write(System.lineSeparator());
+ }
+ }
+ }
+}
diff --git a/jetty-start/src/test/java/org/eclipse/jetty/start/RebuildTestResources.java b/jetty-start/src/test/java/org/eclipse/jetty/start/util/RebuildTestResources.java
index 4f2fe61400..25f5fa0ebf 100644
--- a/jetty-start/src/test/java/org/eclipse/jetty/start/RebuildTestResources.java
+++ b/jetty-start/src/test/java/org/eclipse/jetty/start/util/RebuildTestResources.java
@@ -16,7 +16,7 @@
// ========================================================================
//
-package org.eclipse.jetty.start;
+package org.eclipse.jetty.start.util;
import java.io.File;
import java.io.IOException;
@@ -71,6 +71,11 @@ public class RebuildTestResources
@Override
public void copy(Path from, Path to) throws IOException
{
+ if(Files.exists(to))
+ {
+ // skip if it exists
+ return;
+ }
Files.createFile(to);
}
}
@@ -124,7 +129,7 @@ public class RebuildTestResources
FS.ensureDirExists(libsDir.toFile());
PathMatcher matcher = getPathMatcher("glob:**.jar");
- Renamer renamer = new RegexRenamer("-9\\.[0-9.]*(v[0-9]*)?(-SNAPSHOT)?(RC[0-9])?(M[0-9])?","-TEST");
+ Renamer renamer = new RegexRenamer("-9\\.[0-9.]*(v[0-9-]*)?(-SNAPSHOT)?(RC[0-9])?(M[0-9])?","-TEST");
FileCopier copier = new TouchFileCopier();
copyDir(srcDir.resolve("lib"),libsDir,matcher,renamer,copier);
}
diff --git a/jetty-start/src/test/resources/assert-home-with-spdy.txt b/jetty-start/src/test/resources/assert-home-with-http2.txt
index aa5aea9789..b852b13650 100644
--- a/jetty-start/src/test/resources/assert-home-with-spdy.txt
+++ b/jetty-start/src/test/resources/assert-home-with-http2.txt
@@ -1,26 +1,40 @@
# The XMLs we expect (order is important)
-XML|${jetty.base}/etc/jetty-jmx.xml
-XML|${jetty.base}/etc/protonego-alpn.xml
+XML|${jetty.base}/etc/home-base-warning.xml
XML|${jetty.base}/etc/jetty.xml
XML|${jetty.base}/etc/jetty-http.xml
XML|${jetty.base}/etc/jetty-ssl.xml
+XML|${jetty.base}/etc/jetty-alpn.xml
+XML|${jetty.base}/etc/jetty-deploy.xml
+XML|${jetty.base}/etc/jetty-http2.xml
XML|${jetty.base}/etc/jetty-plus.xml
-XML|${jetty.base}/etc/jetty-spdy.xml
XML|${jetty.base}/etc/jetty-annotations.xml
-XML|${jetty.base}/etc/jetty-deploy.xml
-XML|${jetty.base}/etc/jetty-websockets.xml
# The LIBs we expect (order is irrelevant)
-LIB|${jetty.base}/lib/annotations/javax.annotation-api-1.2.jar
-LIB|${jetty.base}/lib/annotations/org.objectweb.asm-TEST.jar
+LIB|${jetty.base}/lib/apache-jsp/org.eclipse.jetty.apache-jsp-TEST.jar
+LIB|${jetty.base}/lib/apache-jsp/org.eclipse.jetty.orbit.org.eclipse.jdt.core-3.8.2.v20130121.jar
+LIB|${jetty.base}/lib/apache-jsp/org.mortbay.jasper.apache-el-8.0.9.M3.jar
+LIB|${jetty.base}/lib/apache-jsp/org.mortbay.jasper.apache-jsp-8.0.9.M3.jar
+LIB|${jetty.base}/lib/apache-jstl/org.apache.taglibs.taglibs-standard-impl-1.2.1.jar
+LIB|${jetty.base}/lib/apache-jstl/org.apache.taglibs.taglibs-standard-spec-1.2.1.jar
+LIB|${jetty.base}/lib/jetty-jndi-TEST.jar
+LIB|${jetty.base}/lib/jndi/javax.mail.glassfish-1.4.1.v201005082020.jar
+LIB|${jetty.base}/lib/jndi/javax.transaction-api-1.2.jar
+LIB|${jetty.base}/lib/jetty-plus-TEST.jar
LIB|${jetty.base}/lib/jetty-annotations-TEST.jar
-LIB|${jetty.base}/lib/jetty-continuation-TEST.jar
+LIB|${jetty.base}/lib/annotations/asm-5.0.1.jar
+LIB|${jetty.base}/lib/annotations/asm-commons-5.0.1.jar
+LIB|${jetty.base}/lib/annotations/javax.annotation-api-1.2.jar
+LIB|${jetty.base}/lib/websocket/javax.websocket-api-1.0.jar
+LIB|${jetty.base}/lib/websocket/javax-websocket-client-impl-TEST.jar
+LIB|${jetty.base}/lib/websocket/javax-websocket-server-impl-TEST.jar
+LIB|${jetty.base}/lib/websocket/websocket-api-TEST.jar
+LIB|${jetty.base}/lib/websocket/websocket-client-TEST.jar
+LIB|${jetty.base}/lib/websocket/websocket-common-TEST.jar
+LIB|${jetty.base}/lib/websocket/websocket-server-TEST.jar
+LIB|${jetty.base}/lib/websocket/websocket-servlet-TEST.jar
LIB|${jetty.base}/lib/jetty-http-TEST.jar
LIB|${jetty.base}/lib/jetty-io-TEST.jar
LIB|${jetty.base}/lib/jetty-deploy-TEST.jar
-LIB|${jetty.base}/lib/jetty-jmx-TEST.jar
-LIB|${jetty.base}/lib/jetty-jndi-TEST.jar
-LIB|${jetty.base}/lib/jetty-plus-TEST.jar
LIB|${jetty.base}/lib/jetty-schemas-3.1.jar
LIB|${jetty.base}/lib/jetty-security-TEST.jar
LIB|${jetty.base}/lib/jetty-server-TEST.jar
@@ -28,24 +42,14 @@ LIB|${jetty.base}/lib/jetty-servlet-TEST.jar
LIB|${jetty.base}/lib/jetty-util-TEST.jar
LIB|${jetty.base}/lib/jetty-webapp-TEST.jar
LIB|${jetty.base}/lib/jetty-xml-TEST.jar
-LIB|${jetty.base}/lib/spdy/spdy-client-TEST.jar
-LIB|${jetty.base}/lib/spdy/spdy-core-TEST.jar
-LIB|${jetty.base}/lib/spdy/spdy-http-common-TEST.jar
-LIB|${jetty.base}/lib/spdy/spdy-http-server-TEST.jar
-LIB|${jetty.base}/lib/spdy/spdy-server-TEST.jar
-LIB|${jetty.base}/lib/jndi/javax.activation-1.1.jar
-LIB|${jetty.base}/lib/jndi/javax.transaction-api-1.2.jar
+LIB|${jetty.base}/lib/jetty-alpn-server-TEST.jar
+LIB|${jetty.base}/lib/http2/http2-common-TEST.jar
+LIB|${jetty.base}/lib/http2/http2-hpack-TEST.jar
+LIB|${jetty.base}/lib/http2/http2-server-TEST.jar
LIB|${jetty.base}/lib/servlet-api-3.1.jar
-LIB|${jetty.base}/lib/websocket/javax.websocket-api-1.0.jar
-LIB|${jetty.base}/lib/websocket/javax-websocket-client-impl-TEST.jar
-LIB|${jetty.base}/lib/websocket/javax-websocket-server-impl-TEST.jar
-LIB|${jetty.base}/lib/websocket/websocket-api-TEST.jar
-LIB|${jetty.base}/lib/websocket/websocket-client-TEST.jar
-LIB|${jetty.base}/lib/websocket/websocket-common-TEST.jar
-LIB|${jetty.base}/lib/websocket/websocket-server-TEST.jar
-LIB|${jetty.base}/lib/websocket/websocket-servlet-TEST.jar
# The Properties we expect (order is irrelevant)
+# (these are the properties we actually set in the configuration)
PROP|java.version=1.7.0_60
PROP|jetty.keymanager.password=OBF:1u2u1wml1z7s1z7a1wnl1u2g
PROP|jetty.keystore=etc/keystore
@@ -53,20 +57,37 @@ PROP|jetty.keystore.password=OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4
PROP|jetty.secure.port=8443
PROP|jetty.truststore=etc/keystore
PROP|jetty.truststore.password=OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4
-PROP|protonego=alpn
-PROP|spdy.port=8443
-PROP|spdy.timeout=30000
+PROP|ssl.port=8443
+PROP|ssl.timeout=30000
+# (these are the ones set by default from jetty.home modules)
+PROP|jetty.port=8080
+PROP|http.timeout=30000
+PROP|jetty.delayDispatchUntilContent=false
+PROP|jetty.dump.start=false
+PROP|jetty.dump.stop=false
+PROP|jetty.output.buffer.size=32768
+PROP|jetty.request.header.size=8192
+PROP|jetty.response.header.size=8192
+PROP|jetty.send.date.header=false
+PROP|jetty.send.server.version=true
+PROP|threads.max=200
+PROP|threads.min=10
+PROP|threads.timeout=60000
+
# JVM Args
JVM|-Xms1024m
JVM|-Xmx1024m
# Downloads
-DOWNLOAD|http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/7.1.0.v20141016/alpn-boot-7.1.0.v20141016.jar|lib/alpn/alpn-boot-7.1.0.v20141016.jar
+DOWNLOAD|maven://org.mortbay.jetty.alpn/alpn-boot/7.1.0.v20141016|lib/alpn/alpn-boot-7.1.0.v20141016.jar
DOWNLOAD|http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/plain/jetty-server/src/main/config/etc/keystore|etc/keystore
# Files
FILE|lib/
+FILE|lib/ext/
FILE|lib/alpn/
+FILE|resources/
+FILE|webapps/
diff --git a/jetty-start/src/test/resources/assert-home-with-jvm.txt b/jetty-start/src/test/resources/assert-home-with-jvm.txt
index 9774d97e42..c8b69bd4c6 100644
--- a/jetty-start/src/test/resources/assert-home-with-jvm.txt
+++ b/jetty-start/src/test/resources/assert-home-with-jvm.txt
@@ -1,30 +1,41 @@
# The XMLs we expect (order is important)
-XML|${jetty.base}/etc/jetty-jmx.xml
+XML|${jetty.base}/etc/home-base-warning.xml
XML|${jetty.base}/etc/jetty.xml
XML|${jetty.base}/etc/jetty-http.xml
+XML|${jetty.base}/etc/jetty-deploy.xml
XML|${jetty.base}/etc/jetty-plus.xml
XML|${jetty.base}/etc/jetty-annotations.xml
-XML|${jetty.base}/etc/jetty-websockets.xml
+XML|${jetty.base}/etc/jetty-jmx.xml
XML|${jetty.base}/etc/jetty-logging.xml
# The LIBs we expect (order is irrelevant)
-LIB|${jetty.base}/lib/annotations/javax.annotation-api-1.2.jar
-LIB|${jetty.base}/lib/annotations/org.objectweb.asm-TEST.jar
-LIB|${jetty.base}/lib/jetty-annotations-TEST.jar
-LIB|${jetty.base}/lib/jetty-continuation-TEST.jar
-LIB|${jetty.base}/lib/jetty-http-TEST.jar
-LIB|${jetty.base}/lib/jetty-io-TEST.jar
-LIB|${jetty.base}/lib/jetty-jmx-TEST.jar
-LIB|${jetty.base}/lib/jetty-jndi-TEST.jar
-LIB|${jetty.base}/lib/jetty-plus-TEST.jar
+LIB|${maven-test-resources}/extra-resources
+LIB|${maven-test-resources}/extra-libs/example.jar
+LIB|${jetty.base}/lib/apache-jsp/org.eclipse.jetty.apache-jsp-TEST.jar
+LIB|${jetty.base}/lib/apache-jsp/org.eclipse.jetty.orbit.org.eclipse.jdt.core-3.8.2.v20130121.jar
+LIB|${jetty.base}/lib/apache-jsp/org.mortbay.jasper.apache-el-8.0.9.M3.jar
+LIB|${jetty.base}/lib/apache-jsp/org.mortbay.jasper.apache-jsp-8.0.9.M3.jar
+LIB|${jetty.base}/lib/apache-jstl/org.apache.taglibs.taglibs-standard-impl-1.2.1.jar
+LIB|${jetty.base}/lib/apache-jstl/org.apache.taglibs.taglibs-standard-spec-1.2.1.jar
+LIB|${jetty.base}/lib/servlet-api-3.1.jar
LIB|${jetty.base}/lib/jetty-schemas-3.1.jar
-LIB|${jetty.base}/lib/jetty-security-TEST.jar
+LIB|${jetty.base}/lib/jetty-http-TEST.jar
LIB|${jetty.base}/lib/jetty-server-TEST.jar
-LIB|${jetty.base}/lib/jetty-util-TEST.jar
LIB|${jetty.base}/lib/jetty-xml-TEST.jar
-LIB|${jetty.base}/lib/jndi/javax.activation-1.1.jar
+LIB|${jetty.base}/lib/jetty-util-TEST.jar
+LIB|${jetty.base}/lib/jetty-io-TEST.jar
+LIB|${jetty.base}/lib/jetty-jndi-TEST.jar
+LIB|${jetty.base}/lib/jndi/javax.mail.glassfish-1.4.1.v201005082020.jar
LIB|${jetty.base}/lib/jndi/javax.transaction-api-1.2.jar
-LIB|${jetty.base}/lib/servlet-api-3.1.jar
+LIB|${jetty.base}/lib/jetty-security-TEST.jar
+LIB|${jetty.base}/lib/jetty-servlet-TEST.jar
+LIB|${jetty.base}/lib/jetty-webapp-TEST.jar
+LIB|${jetty.base}/lib/jetty-deploy-TEST.jar
+LIB|${jetty.base}/lib/jetty-plus-TEST.jar
+LIB|${jetty.base}/lib/jetty-annotations-TEST.jar
+LIB|${jetty.base}/lib/annotations/asm-5.0.1.jar
+LIB|${jetty.base}/lib/annotations/asm-commons-5.0.1.jar
+LIB|${jetty.base}/lib/annotations/javax.annotation-api-1.2.jar
LIB|${jetty.base}/lib/websocket/javax.websocket-api-1.0.jar
LIB|${jetty.base}/lib/websocket/javax-websocket-client-impl-TEST.jar
LIB|${jetty.base}/lib/websocket/javax-websocket-server-impl-TEST.jar
@@ -33,12 +44,31 @@ LIB|${jetty.base}/lib/websocket/websocket-client-TEST.jar
LIB|${jetty.base}/lib/websocket/websocket-common-TEST.jar
LIB|${jetty.base}/lib/websocket/websocket-server-TEST.jar
LIB|${jetty.base}/lib/websocket/websocket-servlet-TEST.jar
-LIB|${maven-test-resources}/extra-resources
-LIB|${maven-test-resources}/extra-libs/example.jar
# The Properties we expect (order is irrelevant)
-# PROP|jetty.port=9090
+# (these are the properties we actually set in the configuration)
+# PROP|jetty.port=8080
+# (these are the ones set by default from jetty.home modules)
+PROP|jetty.port=8080
+PROP|http.timeout=30000
+PROP|jetty.delayDispatchUntilContent=false
+PROP|jetty.dump.start=false
+PROP|jetty.dump.stop=false
+PROP|jetty.output.buffer.size=32768
+PROP|jetty.request.header.size=8192
+PROP|jetty.response.header.size=8192
+PROP|jetty.send.date.header=false
+PROP|jetty.send.server.version=true
+PROP|threads.max=200
+PROP|threads.min=10
+PROP|threads.timeout=60000
# JVM Args
JVM|-Xms1024m
JVM|-Xmx1024m
+
+# Files / Directories to create
+FILE|lib/
+FILE|lib/ext/
+FILE|resources/
+FILE|webapps/
diff --git a/jetty-start/src/test/resources/assert-home.txt b/jetty-start/src/test/resources/assert-home.txt
index 5be8d46d67..3abc8000e0 100644
--- a/jetty-start/src/test/resources/assert-home.txt
+++ b/jetty-start/src/test/resources/assert-home.txt
@@ -1,28 +1,36 @@
# The XMLs we expect (order is important)
-XML|${jetty.base}/etc/jetty-jmx.xml
+XML|${jetty.base}/etc/home-base-warning.xml
XML|${jetty.base}/etc/jetty.xml
XML|${jetty.base}/etc/jetty-http.xml
+XML|${jetty.base}/etc/jetty-deploy.xml
XML|${jetty.base}/etc/jetty-plus.xml
XML|${jetty.base}/etc/jetty-annotations.xml
-XML|${jetty.base}/etc/jetty-websockets.xml
# The LIBs we expect (order is irrelevant)
+LIB|${jetty.base}/lib/apache-jsp/org.eclipse.jetty.apache-jsp-TEST.jar
+LIB|${jetty.base}/lib/apache-jsp/org.eclipse.jetty.orbit.org.eclipse.jdt.core-3.8.2.v20130121.jar
+LIB|${jetty.base}/lib/apache-jsp/org.mortbay.jasper.apache-el-8.0.9.M3.jar
+LIB|${jetty.base}/lib/apache-jsp/org.mortbay.jasper.apache-jsp-8.0.9.M3.jar
+LIB|${jetty.base}/lib/apache-jstl/org.apache.taglibs.taglibs-standard-impl-1.2.1.jar
+LIB|${jetty.base}/lib/apache-jstl/org.apache.taglibs.taglibs-standard-spec-1.2.1.jar
+LIB|${jetty.base}/lib/annotations/asm-5.0.1.jar
+LIB|${jetty.base}/lib/annotations/asm-commons-5.0.1.jar
LIB|${jetty.base}/lib/annotations/javax.annotation-api-1.2.jar
-LIB|${jetty.base}/lib/annotations/org.objectweb.asm-TEST.jar
+LIB|${jetty.base}/lib/jetty-jndi-TEST.jar
+LIB|${jetty.base}/lib/jndi/javax.mail.glassfish-1.4.1.v201005082020.jar
+LIB|${jetty.base}/lib/jndi/javax.transaction-api-1.2.jar
LIB|${jetty.base}/lib/jetty-annotations-TEST.jar
-LIB|${jetty.base}/lib/jetty-continuation-TEST.jar
LIB|${jetty.base}/lib/jetty-http-TEST.jar
LIB|${jetty.base}/lib/jetty-io-TEST.jar
-LIB|${jetty.base}/lib/jetty-jmx-TEST.jar
-LIB|${jetty.base}/lib/jetty-jndi-TEST.jar
+LIB|${jetty.base}/lib/jetty-deploy-TEST.jar
LIB|${jetty.base}/lib/jetty-plus-TEST.jar
LIB|${jetty.base}/lib/jetty-schemas-3.1.jar
LIB|${jetty.base}/lib/jetty-security-TEST.jar
LIB|${jetty.base}/lib/jetty-server-TEST.jar
+LIB|${jetty.base}/lib/jetty-servlet-TEST.jar
LIB|${jetty.base}/lib/jetty-util-TEST.jar
+LIB|${jetty.base}/lib/jetty-webapp-TEST.jar
LIB|${jetty.base}/lib/jetty-xml-TEST.jar
-LIB|${jetty.base}/lib/jndi/javax.activation-1.1.jar
-LIB|${jetty.base}/lib/jndi/javax.transaction-api-1.2.jar
LIB|${jetty.base}/lib/servlet-api-3.1.jar
LIB|${jetty.base}/lib/websocket/javax.websocket-api-1.0.jar
LIB|${jetty.base}/lib/websocket/javax-websocket-client-impl-TEST.jar
@@ -34,4 +42,24 @@ LIB|${jetty.base}/lib/websocket/websocket-server-TEST.jar
LIB|${jetty.base}/lib/websocket/websocket-servlet-TEST.jar
# The Properties we expect (order is irrelevant)
+# (these are the properties we actually set in the configuration)
PROP|jetty.port=9090
+# (these are the ones set by default from jetty.home modules)
+PROP|http.timeout=30000
+PROP|jetty.delayDispatchUntilContent=false
+PROP|jetty.dump.start=false
+PROP|jetty.dump.stop=false
+PROP|jetty.output.buffer.size=32768
+PROP|jetty.request.header.size=8192
+PROP|jetty.response.header.size=8192
+PROP|jetty.send.date.header=false
+PROP|jetty.send.server.version=true
+PROP|threads.max=200
+PROP|threads.min=10
+PROP|threads.timeout=60000
+
+# Files
+FILE|lib/
+FILE|lib/ext/
+FILE|resources/
+FILE|webapps/
diff --git a/jetty-start/src/test/resources/dist-home/etc/jetty-spdy-proxy.xml b/jetty-start/src/test/resources/dist-home/etc/jetty-alpn.xml
index e69de29bb2..e69de29bb2 100644
--- a/jetty-start/src/test/resources/dist-home/etc/jetty-spdy-proxy.xml
+++ b/jetty-start/src/test/resources/dist-home/etc/jetty-alpn.xml
diff --git a/jetty-start/src/test/resources/dist-home/etc/jetty-spdy.xml b/jetty-start/src/test/resources/dist-home/etc/jetty-gzip.xml
index e69de29bb2..e69de29bb2 100644
--- a/jetty-start/src/test/resources/dist-home/etc/jetty-spdy.xml
+++ b/jetty-start/src/test/resources/dist-home/etc/jetty-gzip.xml
diff --git a/jetty-start/src/test/resources/dist-home/etc/protonego-alpn.xml b/jetty-start/src/test/resources/dist-home/etc/jetty-http2.xml
index e69de29bb2..e69de29bb2 100644
--- a/jetty-start/src/test/resources/dist-home/etc/protonego-alpn.xml
+++ b/jetty-start/src/test/resources/dist-home/etc/jetty-http2.xml
diff --git a/jetty-start/src/test/resources/dist-home/etc/protonego-npn.xml b/jetty-start/src/test/resources/dist-home/etc/jetty-http2c.xml
index e69de29bb2..e69de29bb2 100644
--- a/jetty-start/src/test/resources/dist-home/etc/protonego-npn.xml
+++ b/jetty-start/src/test/resources/dist-home/etc/jetty-http2c.xml
diff --git a/jetty-start/src/test/resources/dist-home/etc/webdefault.xml b/jetty-start/src/test/resources/dist-home/etc/webdefault.xml
index e69de29bb2..d54d76f307 100644
--- a/jetty-start/src/test/resources/dist-home/etc/webdefault.xml
+++ b/jetty-start/src/test/resources/dist-home/etc/webdefault.xml
@@ -0,0 +1,534 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<web-app
+ xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
+ metadata-complete="false"
+ version="3.1">
+
+ <!-- ===================================================================== -->
+ <!-- This file contains the default descriptor for web applications. -->
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <!-- The intent of this descriptor is to include jetty specific or common -->
+ <!-- configuration for all webapps. If a context has a webdefault.xml -->
+ <!-- descriptor, it is applied before the context's own web.xml file -->
+ <!-- -->
+ <!-- A context may be assigned a default descriptor by calling -->
+ <!-- WebAppContext.setDefaultsDescriptor(String). -->
+ <!-- -->
+ <!-- This file is present in the jetty-webapp.jar, and is used as the -->
+ <!-- defaults descriptor if no other is explicitly set on a context. -->
+ <!-- -->
+ <!-- A copy of this file is also placed into the $JETTY_HOME/etc dir of -->
+ <!-- the distribution, and is referenced by some of the other xml files, -->
+ <!-- eg the jetty-deploy.xml file. -->
+ <!-- ===================================================================== -->
+
+ <description>
+ Default web.xml file.
+ This file is applied to a Web application before it's own WEB_INF/web.xml file
+ </description>
+
+ <!-- ==================================================================== -->
+ <!-- Removes static references to beans from javax.el.BeanELResolver to -->
+ <!-- ensure webapp classloader can be released on undeploy -->
+ <!-- ==================================================================== -->
+ <listener>
+ <listener-class>org.eclipse.jetty.servlet.listener.ELContextCleaner</listener-class>
+ </listener>
+
+ <!-- ==================================================================== -->
+ <!-- Removes static cache of Methods from java.beans.Introspector to -->
+ <!-- ensure webapp classloader can be released on undeploy -->
+ <!-- ==================================================================== -->
+ <listener>
+ <listener-class>org.eclipse.jetty.servlet.listener.IntrospectorCleaner</listener-class>
+ </listener>
+
+
+ <!-- ==================================================================== -->
+ <!-- Context params to control Session Cookies -->
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <!--
+ UNCOMMENT TO ACTIVATE
+ <context-param>
+ <param-name>org.eclipse.jetty.servlet.SessionDomain</param-name>
+ <param-value>127.0.0.1</param-value>
+ </context-param>
+ <context-param>
+ <param-name>org.eclipse.jetty.servlet.SessionPath</param-name>
+ <param-value>/</param-value>
+ </context-param>
+ <context-param>
+ <param-name>org.eclipse.jetty.servlet.MaxAge</param-name>
+ <param-value>-1</param-value>
+ </context-param>
+ -->
+
+ <!-- ==================================================================== -->
+ <!-- The default servlet. -->
+ <!-- This servlet, normally mapped to /, provides the handling for static -->
+ <!-- content, OPTIONS and TRACE methods for the context. -->
+ <!-- The following initParameters are supported: -->
+ <!--
+ * acceptRanges If true, range requests and responses are
+ * supported
+ *
+ * dirAllowed If true, directory listings are returned if no
+ * welcome file is found. Else 403 Forbidden.
+ *
+ * welcomeServlets If true, attempt to dispatch to welcome files
+ * that are servlets, but only after no matching static
+ * resources could be found. If false, then a welcome
+ * file must exist on disk. If "exact", then exact
+ * servlet matches are supported without an existing file.
+ * Default is true.
+ *
+ * This must be false if you want directory listings,
+ * but have index.jsp in your welcome file list.
+ *
+ * redirectWelcome If true, welcome files are redirected rather than
+ * forwarded to.
+ *
+ * gzip If set to true, then static content will be served as
+ * gzip content encoded if a matching resource is
+ * found ending with ".gz"
+ *
+ * resourceBase Set to replace the context resource base
+ *
+ * resourceCache If set, this is a context attribute name, which the servlet
+ * will use to look for a shared ResourceCache instance.
+ *
+ * relativeResourceBase
+ * Set with a pathname relative to the base of the
+ * servlet context root. Useful for only serving static content out
+ * of only specific subdirectories.
+ *
+ * pathInfoOnly If true, only the path info will be applied to the resourceBase
+ *
+ * stylesheet Set with the location of an optional stylesheet that will be used
+ * to decorate the directory listing html.
+ *
+ * aliases If True, aliases of resources are allowed (eg. symbolic
+ * links and caps variations). May bypass security constraints.
+ *
+ * etags If True, weak etags will be generated and handled.
+ *
+ * maxCacheSize The maximum total size of the cache or 0 for no cache.
+ * maxCachedFileSize The maximum size of a file to cache
+ * maxCachedFiles The maximum number of files to cache
+ *
+ * useFileMappedBuffer
+ * If set to true, it will use mapped file buffers to serve static content
+ * when using an NIO connector. Setting this value to false means that
+ * a direct buffer will be used instead of a mapped file buffer.
+ * This file sets the value to true.
+ *
+ * cacheControl If set, all static content will have this value set as the cache-control
+ * header.
+ *
+ -->
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <servlet>
+ <servlet-name>default</servlet-name>
+ <servlet-class>org.eclipse.jetty.servlet.DefaultServlet</servlet-class>
+ <init-param>
+ <param-name>aliases</param-name>
+ <param-value>false</param-value>
+ </init-param>
+ <init-param>
+ <param-name>acceptRanges</param-name>
+ <param-value>true</param-value>
+ </init-param>
+ <init-param>
+ <param-name>dirAllowed</param-name>
+ <param-value>true</param-value>
+ </init-param>
+ <init-param>
+ <param-name>welcomeServlets</param-name>
+ <param-value>false</param-value>
+ </init-param>
+ <init-param>
+ <param-name>redirectWelcome</param-name>
+ <param-value>false</param-value>
+ </init-param>
+ <init-param>
+ <param-name>maxCacheSize</param-name>
+ <param-value>256000000</param-value>
+ </init-param>
+ <init-param>
+ <param-name>maxCachedFileSize</param-name>
+ <param-value>200000000</param-value>
+ </init-param>
+ <init-param>
+ <param-name>maxCachedFiles</param-name>
+ <param-value>2048</param-value>
+ </init-param>
+ <init-param>
+ <param-name>gzip</param-name>
+ <param-value>false</param-value>
+ </init-param>
+ <init-param>
+ <param-name>etags</param-name>
+ <param-value>false</param-value>
+ </init-param>
+ <init-param>
+ <param-name>useFileMappedBuffer</param-name>
+ <param-value>true</param-value>
+ </init-param>
+ <!--
+ <init-param>
+ <param-name>resourceCache</param-name>
+ <param-value>resourceCache</param-value>
+ </init-param>
+ -->
+ <!--
+ <init-param>
+ <param-name>cacheControl</param-name>
+ <param-value>max-age=3600,public</param-value>
+ </init-param>
+ -->
+ <load-on-startup>0</load-on-startup>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>default</servlet-name>
+ <url-pattern>/</url-pattern>
+ </servlet-mapping>
+
+
+ <!-- ==================================================================== -->
+ <!-- JSP Servlet -->
+ <!-- This is the jasper JSP servlet. -->
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <!-- The JSP page compiler and execution servlet, which is the mechanism -->
+ <!-- used by the jsp container to support JSP pages. Traditionally, -->
+ <!-- this servlet is mapped to URL pattern "*.jsp". This servlet -->
+ <!-- supports the following initialization parameters (default values -->
+ <!-- are in square brackets): -->
+ <!-- -->
+ <!-- checkInterval If development is false and reloading is true, -->
+ <!-- background compiles are enabled. checkInterval -->
+ <!-- is the time in seconds between checks to see -->
+ <!-- if a JSP page needs to be recompiled. [300] -->
+ <!-- -->
+ <!-- compiler Which compiler Ant should use to compile JSP -->
+ <!-- pages. See the Ant documentation for more -->
+ <!-- information. [javac] -->
+ <!-- -->
+ <!-- classdebuginfo Should the class file be compiled with -->
+ <!-- debugging information? [true] -->
+ <!-- -->
+ <!-- classpath What class path should I use while compiling -->
+ <!-- generated servlets? [Created dynamically -->
+ <!-- based on the current web application] -->
+ <!-- Set to ? to make the container explicitly set -->
+ <!-- this parameter. -->
+ <!-- -->
+ <!-- development Is Jasper used in development mode (will check -->
+ <!-- for JSP modification on every access)? [true] -->
+ <!-- -->
+ <!-- enablePooling Determines whether tag handler pooling is -->
+ <!-- enabled [true] -->
+ <!-- -->
+ <!-- fork Tell Ant to fork compiles of JSP pages so that -->
+ <!-- a separate JVM is used for JSP page compiles -->
+ <!-- from the one Tomcat is running in. [true] -->
+ <!-- -->
+ <!-- ieClassId The class-id value to be sent to Internet -->
+ <!-- Explorer when using <jsp:plugin> tags. -->
+ <!-- [clsid:8AD9C840-044E-11D1-B3E9-00805F499D93] -->
+ <!-- -->
+ <!-- javaEncoding Java file encoding to use for generating java -->
+ <!-- source files. [UTF-8] -->
+ <!-- -->
+ <!-- keepgenerated Should we keep the generated Java source code -->
+ <!-- for each page instead of deleting it? [true] -->
+ <!-- -->
+ <!-- logVerbosityLevel The level of detailed messages to be produced -->
+ <!-- by this servlet. Increasing levels cause the -->
+ <!-- generation of more messages. Valid values are -->
+ <!-- FATAL, ERROR, WARNING, INFORMATION, and DEBUG. -->
+ <!-- [WARNING] -->
+ <!-- -->
+ <!-- mappedfile Should we generate static content with one -->
+ <!-- print statement per input line, to ease -->
+ <!-- debugging? [false] -->
+ <!-- -->
+ <!-- -->
+ <!-- reloading Should Jasper check for modified JSPs? [true] -->
+ <!-- -->
+ <!-- suppressSmap Should the generation of SMAP info for JSR45 -->
+ <!-- debugging be suppressed? [false] -->
+ <!-- -->
+ <!-- dumpSmap Should the SMAP info for JSR45 debugging be -->
+ <!-- dumped to a file? [false] -->
+ <!-- False if suppressSmap is true -->
+ <!-- -->
+ <!-- scratchdir What scratch directory should we use when -->
+ <!-- compiling JSP pages? [default work directory -->
+ <!-- for the current web application] -->
+ <!-- -->
+ <!-- tagpoolMaxSize The maximum tag handler pool size [5] -->
+ <!-- -->
+ <!-- xpoweredBy Determines whether X-Powered-By response -->
+ <!-- header is added by generated servlet [false] -->
+ <!-- -->
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <servlet id="jsp">
+ <servlet-name>jsp</servlet-name>
+ <servlet-class>org.eclipse.jetty.jsp.JettyJspServlet</servlet-class>
+ <init-param>
+ <param-name>logVerbosityLevel</param-name>
+ <param-value>DEBUG</param-value>
+ </init-param>
+ <init-param>
+ <param-name>fork</param-name>
+ <param-value>false</param-value>
+ </init-param>
+ <init-param>
+ <param-name>xpoweredBy</param-name>
+ <param-value>false</param-value>
+ </init-param>
+ <init-param>
+ <param-name>compilerTargetVM</param-name>
+ <param-value>1.7</param-value>
+ </init-param>
+ <init-param>
+ <param-name>compilerSourceVM</param-name>
+ <param-value>1.7</param-value>
+ </init-param>
+ <!--
+ <init-param>
+ <param-name>classpath</param-name>
+ <param-value>?</param-value>
+ </init-param>
+ -->
+ <load-on-startup>0</load-on-startup>
+ </servlet>
+
+ <servlet-mapping>
+ <servlet-name>jsp</servlet-name>
+ <url-pattern>*.jsp</url-pattern>
+ <url-pattern>*.jspf</url-pattern>
+ <url-pattern>*.jspx</url-pattern>
+ <url-pattern>*.xsp</url-pattern>
+ <url-pattern>*.JSP</url-pattern>
+ <url-pattern>*.JSPF</url-pattern>
+ <url-pattern>*.JSPX</url-pattern>
+ <url-pattern>*.XSP</url-pattern>
+ </servlet-mapping>
+
+
+ <!-- ==================================================================== -->
+ <!-- Default session configuration -->
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <session-config>
+ <session-timeout>30</session-timeout>
+ </session-config>
+
+ <!-- ==================================================================== -->
+ <!-- Default MIME mappings -->
+ <!-- The default MIME mappings are provided by the mime.properties -->
+ <!-- resource in the jetty-http.jar file. Additional or modified -->
+ <!-- mappings may be specified here -->
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <!-- UNCOMMENT TO ACTIVATE
+ <mime-mapping>
+ <extension>mysuffix</extension>
+ <mime-type>mymime/type</mime-type>
+ </mime-mapping>
+ -->
+
+ <!-- ==================================================================== -->
+ <!-- Default welcome files -->
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <welcome-file-list>
+ <welcome-file>index.html</welcome-file>
+ <welcome-file>index.htm</welcome-file>
+ <welcome-file>index.jsp</welcome-file>
+ </welcome-file-list>
+
+ <!-- ==================================================================== -->
+ <!-- Default locale encodings -->
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <locale-encoding-mapping-list>
+ <locale-encoding-mapping>
+ <locale>ar</locale>
+ <encoding>ISO-8859-6</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>be</locale>
+ <encoding>ISO-8859-5</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>bg</locale>
+ <encoding>ISO-8859-5</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>ca</locale>
+ <encoding>ISO-8859-1</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>cs</locale>
+ <encoding>ISO-8859-2</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>da</locale>
+ <encoding>ISO-8859-1</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>de</locale>
+ <encoding>ISO-8859-1</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>el</locale>
+ <encoding>ISO-8859-7</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>en</locale>
+ <encoding>ISO-8859-1</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>es</locale>
+ <encoding>ISO-8859-1</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>et</locale>
+ <encoding>ISO-8859-1</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>fi</locale>
+ <encoding>ISO-8859-1</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>fr</locale>
+ <encoding>ISO-8859-1</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>hr</locale>
+ <encoding>ISO-8859-2</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>hu</locale>
+ <encoding>ISO-8859-2</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>is</locale>
+ <encoding>ISO-8859-1</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>it</locale>
+ <encoding>ISO-8859-1</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>iw</locale>
+ <encoding>ISO-8859-8</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>ja</locale>
+ <encoding>Shift_JIS</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>ko</locale>
+ <encoding>EUC-KR</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>lt</locale>
+ <encoding>ISO-8859-2</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>lv</locale>
+ <encoding>ISO-8859-2</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>mk</locale>
+ <encoding>ISO-8859-5</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>nl</locale>
+ <encoding>ISO-8859-1</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>no</locale>
+ <encoding>ISO-8859-1</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>pl</locale>
+ <encoding>ISO-8859-2</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>pt</locale>
+ <encoding>ISO-8859-1</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>ro</locale>
+ <encoding>ISO-8859-2</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>ru</locale>
+ <encoding>ISO-8859-5</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>sh</locale>
+ <encoding>ISO-8859-5</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>sk</locale>
+ <encoding>ISO-8859-2</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>sl</locale>
+ <encoding>ISO-8859-2</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>sq</locale>
+ <encoding>ISO-8859-2</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>sr</locale>
+ <encoding>ISO-8859-5</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>sv</locale>
+ <encoding>ISO-8859-1</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>tr</locale>
+ <encoding>ISO-8859-9</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>uk</locale>
+ <encoding>ISO-8859-5</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>zh</locale>
+ <encoding>GB2312</encoding>
+ </locale-encoding-mapping>
+ <locale-encoding-mapping>
+ <locale>zh_TW</locale>
+ <encoding>Big5</encoding>
+ </locale-encoding-mapping>
+ </locale-encoding-mapping-list>
+
+ <!-- ==================================================================== -->
+ <!-- Disable TRACE method with security constraint -->
+ <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
+ <security-constraint>
+ <web-resource-collection>
+ <web-resource-name>Disable TRACE</web-resource-name>
+ <url-pattern>/</url-pattern>
+ <http-method>TRACE</http-method>
+ </web-resource-collection>
+ <auth-constraint/>
+ </security-constraint>
+ <security-constraint>
+ <web-resource-collection>
+ <web-resource-name>Enable everything but TRACE</web-resource-name>
+ <url-pattern>/</url-pattern>
+ <http-method-omission>TRACE</http-method-omission>
+ </web-resource-collection>
+ </security-constraint>
+
+</web-app>
+
diff --git a/jetty-start/src/test/resources/dist-home/lib/jetty-alpn-client-TEST.jar b/jetty-start/src/test/resources/dist-home/lib/http2/http2-common-TEST.jar
index e69de29bb2..e69de29bb2 100644
--- a/jetty-start/src/test/resources/dist-home/lib/jetty-alpn-client-TEST.jar
+++ b/jetty-start/src/test/resources/dist-home/lib/http2/http2-common-TEST.jar
diff --git a/jetty-start/src/test/resources/dist-home/lib/jsp/javax.el-3.0.0.jar b/jetty-start/src/test/resources/dist-home/lib/http2/http2-hpack-TEST.jar
index e69de29bb2..e69de29bb2 100644
--- a/jetty-start/src/test/resources/dist-home/lib/jsp/javax.el-3.0.0.jar
+++ b/jetty-start/src/test/resources/dist-home/lib/http2/http2-hpack-TEST.jar
diff --git a/jetty-start/src/test/resources/dist-home/lib/jsp/javax.servlet.jsp-2.3.2.jar b/jetty-start/src/test/resources/dist-home/lib/http2/http2-server-TEST.jar
index e69de29bb2..e69de29bb2 100644
--- a/jetty-start/src/test/resources/dist-home/lib/jsp/javax.servlet.jsp-2.3.2.jar
+++ b/jetty-start/src/test/resources/dist-home/lib/http2/http2-server-TEST.jar
diff --git a/jetty-start/src/test/resources/dist-home/lib/jsp/javax.servlet.jsp.jstl-1.2.2.jar b/jetty-start/src/test/resources/dist-home/lib/jsp/javax.servlet.jsp.jstl-1.2.2.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/dist-home/lib/jsp/javax.servlet.jsp.jstl-1.2.2.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/dist-home/lib/jsp/jetty-jsp-jdt-2.3.3.jar b/jetty-start/src/test/resources/dist-home/lib/jsp/jetty-jsp-jdt-2.3.3.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/dist-home/lib/jsp/jetty-jsp-jdt-2.3.3.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/dist-home/lib/jsp/org.eclipse.jdt.core-3.8.2.v20130121.jar b/jetty-start/src/test/resources/dist-home/lib/jsp/org.eclipse.jdt.core-3.8.2.v20130121.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/dist-home/lib/jsp/org.eclipse.jdt.core-3.8.2.v20130121.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/dist-home/lib/jsp/org.eclipse.jetty.orbit.javax.servlet.jsp.jstl-1.2.0.v201105211821.jar b/jetty-start/src/test/resources/dist-home/lib/jsp/org.eclipse.jetty.orbit.javax.servlet.jsp.jstl-1.2.0.v201105211821.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/dist-home/lib/jsp/org.eclipse.jetty.orbit.javax.servlet.jsp.jstl-1.2.0.v201105211821.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/dist-home/lib/spdy/spdy-client-TEST.jar b/jetty-start/src/test/resources/dist-home/lib/spdy/spdy-client-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/dist-home/lib/spdy/spdy-client-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/dist-home/lib/spdy/spdy-core-TEST.jar b/jetty-start/src/test/resources/dist-home/lib/spdy/spdy-core-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/dist-home/lib/spdy/spdy-core-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/dist-home/lib/spdy/spdy-http-common-TEST.jar b/jetty-start/src/test/resources/dist-home/lib/spdy/spdy-http-common-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/dist-home/lib/spdy/spdy-http-common-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/dist-home/lib/spdy/spdy-http-server-TEST.jar b/jetty-start/src/test/resources/dist-home/lib/spdy/spdy-http-server-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/dist-home/lib/spdy/spdy-http-server-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/dist-home/lib/spdy/spdy-server-TEST.jar b/jetty-start/src/test/resources/dist-home/lib/spdy/spdy-server-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/dist-home/lib/spdy/spdy-server-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_40.mod b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_40.mod
new file mode 100644
index 0000000000..a1002a48cc
--- /dev/null
+++ b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_40.mod
@@ -0,0 +1,8 @@
+[name]
+alpn-boot
+
+[files]
+maven://org.mortbay.jetty.alpn/alpn-boot/7.1.0.v20141016|lib/alpn/alpn-boot-7.1.0.v20141016.jar
+
+[exec]
+-Xbootclasspath/p:lib/alpn/alpn-boot-7.1.0.v20141016.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_45.mod b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_45.mod
new file mode 100644
index 0000000000..a1002a48cc
--- /dev/null
+++ b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_45.mod
@@ -0,0 +1,8 @@
+[name]
+alpn-boot
+
+[files]
+maven://org.mortbay.jetty.alpn/alpn-boot/7.1.0.v20141016|lib/alpn/alpn-boot-7.1.0.v20141016.jar
+
+[exec]
+-Xbootclasspath/p:lib/alpn/alpn-boot-7.1.0.v20141016.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_51.mod b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_51.mod
new file mode 100644
index 0000000000..a1002a48cc
--- /dev/null
+++ b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_51.mod
@@ -0,0 +1,8 @@
+[name]
+alpn-boot
+
+[files]
+maven://org.mortbay.jetty.alpn/alpn-boot/7.1.0.v20141016|lib/alpn/alpn-boot-7.1.0.v20141016.jar
+
+[exec]
+-Xbootclasspath/p:lib/alpn/alpn-boot-7.1.0.v20141016.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_55.mod b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_55.mod
new file mode 100644
index 0000000000..a1002a48cc
--- /dev/null
+++ b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_55.mod
@@ -0,0 +1,8 @@
+[name]
+alpn-boot
+
+[files]
+maven://org.mortbay.jetty.alpn/alpn-boot/7.1.0.v20141016|lib/alpn/alpn-boot-7.1.0.v20141016.jar
+
+[exec]
+-Xbootclasspath/p:lib/alpn/alpn-boot-7.1.0.v20141016.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_60.mod b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_60.mod
new file mode 100644
index 0000000000..a1002a48cc
--- /dev/null
+++ b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_60.mod
@@ -0,0 +1,8 @@
+[name]
+alpn-boot
+
+[files]
+maven://org.mortbay.jetty.alpn/alpn-boot/7.1.0.v20141016|lib/alpn/alpn-boot-7.1.0.v20141016.jar
+
+[exec]
+-Xbootclasspath/p:lib/alpn/alpn-boot-7.1.0.v20141016.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_65.mod b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_65.mod
new file mode 100644
index 0000000000..a1002a48cc
--- /dev/null
+++ b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_65.mod
@@ -0,0 +1,8 @@
+[name]
+alpn-boot
+
+[files]
+maven://org.mortbay.jetty.alpn/alpn-boot/7.1.0.v20141016|lib/alpn/alpn-boot-7.1.0.v20141016.jar
+
+[exec]
+-Xbootclasspath/p:lib/alpn/alpn-boot-7.1.0.v20141016.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_67.mod b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_67.mod
new file mode 100644
index 0000000000..a1002a48cc
--- /dev/null
+++ b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_67.mod
@@ -0,0 +1,8 @@
+[name]
+alpn-boot
+
+[files]
+maven://org.mortbay.jetty.alpn/alpn-boot/7.1.0.v20141016|lib/alpn/alpn-boot-7.1.0.v20141016.jar
+
+[exec]
+-Xbootclasspath/p:lib/alpn/alpn-boot-7.1.0.v20141016.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_71.mod b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_71.mod
new file mode 100644
index 0000000000..a554324494
--- /dev/null
+++ b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_71.mod
@@ -0,0 +1,8 @@
+[name]
+alpn-boot
+
+[files]
+maven://org.mortbay.jetty.alpn/alpn-boot/7.1.2.v20141202|lib/alpn/alpn-boot-7.1.2.v20141202.jar
+
+[exec]
+-Xbootclasspath/p:lib/alpn/alpn-boot-7.1.2.v20141202.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_72.mod b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_72.mod
new file mode 100644
index 0000000000..a554324494
--- /dev/null
+++ b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_72.mod
@@ -0,0 +1,8 @@
+[name]
+alpn-boot
+
+[files]
+maven://org.mortbay.jetty.alpn/alpn-boot/7.1.2.v20141202|lib/alpn/alpn-boot-7.1.2.v20141202.jar
+
+[exec]
+-Xbootclasspath/p:lib/alpn/alpn-boot-7.1.2.v20141202.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_75.mod b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_75.mod
new file mode 100644
index 0000000000..3f6f912c6d
--- /dev/null
+++ b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_75.mod
@@ -0,0 +1,8 @@
+[name]
+alpn-boot
+
+[files]
+maven://org.mortbay.jetty.alpn/alpn-boot/7.1.3.v20150130|lib/alpn/alpn-boot-7.1.3.v20150130.jar
+
+[exec]
+-Xbootclasspath/p:lib/alpn/alpn-boot-7.1.3.v20150130.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_76.mod b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_76.mod
new file mode 100644
index 0000000000..3f6f912c6d
--- /dev/null
+++ b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.7.0_76.mod
@@ -0,0 +1,8 @@
+[name]
+alpn-boot
+
+[files]
+maven://org.mortbay.jetty.alpn/alpn-boot/7.1.3.v20150130|lib/alpn/alpn-boot-7.1.3.v20150130.jar
+
+[exec]
+-Xbootclasspath/p:lib/alpn/alpn-boot-7.1.3.v20150130.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0.mod b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0.mod
new file mode 100644
index 0000000000..cb91b4c2fd
--- /dev/null
+++ b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0.mod
@@ -0,0 +1,8 @@
+[name]
+alpn-boot
+
+[files]
+maven://org.mortbay.jetty.alpn/alpn-boot/8.1.0.v20141016|lib/alpn/alpn-boot-8.1.0.v20141016.jar
+
+[exec]
+-Xbootclasspath/p:lib/alpn/alpn-boot-8.1.0.v20141016.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0_05.mod b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0_05.mod
new file mode 100644
index 0000000000..cb91b4c2fd
--- /dev/null
+++ b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0_05.mod
@@ -0,0 +1,8 @@
+[name]
+alpn-boot
+
+[files]
+maven://org.mortbay.jetty.alpn/alpn-boot/8.1.0.v20141016|lib/alpn/alpn-boot-8.1.0.v20141016.jar
+
+[exec]
+-Xbootclasspath/p:lib/alpn/alpn-boot-8.1.0.v20141016.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0_11.mod b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0_11.mod
new file mode 100644
index 0000000000..cb91b4c2fd
--- /dev/null
+++ b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0_11.mod
@@ -0,0 +1,8 @@
+[name]
+alpn-boot
+
+[files]
+maven://org.mortbay.jetty.alpn/alpn-boot/8.1.0.v20141016|lib/alpn/alpn-boot-8.1.0.v20141016.jar
+
+[exec]
+-Xbootclasspath/p:lib/alpn/alpn-boot-8.1.0.v20141016.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0_20.mod b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0_20.mod
new file mode 100644
index 0000000000..cb91b4c2fd
--- /dev/null
+++ b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0_20.mod
@@ -0,0 +1,8 @@
+[name]
+alpn-boot
+
+[files]
+maven://org.mortbay.jetty.alpn/alpn-boot/8.1.0.v20141016|lib/alpn/alpn-boot-8.1.0.v20141016.jar
+
+[exec]
+-Xbootclasspath/p:lib/alpn/alpn-boot-8.1.0.v20141016.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0_25.mod b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0_25.mod
new file mode 100644
index 0000000000..6d6d75efa4
--- /dev/null
+++ b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0_25.mod
@@ -0,0 +1,8 @@
+[name]
+alpn-boot
+
+[files]
+maven://org.mortbay.jetty.alpn/alpn-boot/8.1.2.v20141202|lib/alpn/alpn-boot-8.1.2.v20141202.jar
+
+[exec]
+-Xbootclasspath/p:lib/alpn/alpn-boot-8.1.2.v20141202.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0_31.mod b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0_31.mod
new file mode 100644
index 0000000000..e52bd23c1c
--- /dev/null
+++ b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0_31.mod
@@ -0,0 +1,8 @@
+[name]
+alpn-boot
+
+[files]
+maven://org.mortbay.jetty.alpn/alpn-boot/8.1.3.v20150130|lib/alpn/alpn-boot-8.1.3.v20150130.jar
+
+[exec]
+-Xbootclasspath/p:lib/alpn/alpn-boot-8.1.3.v20150130.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.8.0_40.mod b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0_40.mod
index 4114979319..4114979319 100644
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.8.0_40.mod
+++ b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0_40.mod
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn.mod b/jetty-start/src/test/resources/dist-home/modules/alpn.mod
index d3e411867d..2a6a1785ec 100644
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn.mod
+++ b/jetty-start/src/test/resources/dist-home/modules/alpn.mod
@@ -1,11 +1,10 @@
# ALPN is provided via a -Xbootclasspath that modifies the secure connections
-# in java to support the ALPN layer needed for SPDY (and eventually HTTP/2)
+# in java to support the ALPN layer needed for HTTP/2.
#
# This modification has a tight dependency on specific recent updates of
-# Java 1.7 and Java 1.8
-# (Java versions prior to 1.7u40 are not supported)
+# Java 1.7 and Java 1.8 (Java versions prior to 1.7u40 are not supported).
#
-# The alpn protonego module will use an appropriate alpn-boot jar for your
+# The alpn module will use an appropriate alpn-boot jar for your
# specific version of Java.
#
# IMPORTANT: Versions of Java that exist after this module was created are
@@ -18,22 +17,28 @@
# http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/
[name]
-protonego-impl
+alpn
[depend]
-protonego-impl/alpn-${java.version}
+ssl
+alpn-impl/alpn-${java.version}
[lib]
lib/jetty-alpn-client-${jetty.version}.jar
lib/jetty-alpn-server-${jetty.version}.jar
[xml]
-etc/protonego-alpn.xml
+etc/jetty-alpn.xml
[files]
lib/
lib/alpn/
+[ini-template]
+# Configuration for ALPN
+# alpn.protocols=h2-14,http/1.1
+# alpn.defaultProtocol=http/1.1
+
[license]
ALPN is a hosted at github under the GPL v2 with ClassPath Exception.
ALPN replaces/modifies OpenJDK classes in the java.sun.security.ssl package.
diff --git a/jetty-start/src/test/resources/usecases/home/modules/jsp-impl/apache-jsp.mod b/jetty-start/src/test/resources/dist-home/modules/apache-jsp.mod
index aed547c851..5123670cb0 100644
--- a/jetty-start/src/test/resources/usecases/home/modules/jsp-impl/apache-jsp.mod
+++ b/jetty-start/src/test/resources/dist-home/modules/apache-jsp.mod
@@ -3,7 +3,7 @@
#
[name]
-jsp-impl
+apache-jsp
[lib]
lib/apache-jsp/*.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/jsp-impl/apache-jstl.mod b/jetty-start/src/test/resources/dist-home/modules/apache-jstl.mod
index 804b19131b..5d607520df 100644
--- a/jetty-start/src/test/resources/dist-home/modules/jsp-impl/apache-jstl.mod
+++ b/jetty-start/src/test/resources/dist-home/modules/apache-jstl.mod
@@ -2,7 +2,7 @@
# Apache JSTL
#
[name]
-jstl-impl
+apache-jstl
[lib]
lib/apache-jstl/*.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/cdi.mod b/jetty-start/src/test/resources/dist-home/modules/cdi.mod
index 68dea58b62..cde3090e0c 100644
--- a/jetty-start/src/test/resources/dist-home/modules/cdi.mod
+++ b/jetty-start/src/test/resources/dist-home/modules/cdi.mod
@@ -11,7 +11,7 @@ jsp
[files]
lib/weld/
-http://central.maven.org/maven2/org/jboss/weld/servlet/weld-servlet/2.2.5.Final/weld-servlet-2.2.5.Final.jar|lib/weld/weld-servlet-2.2.5.Final.jar
+maven://org.jboss.weld.servlet/weld-servlet/2.2.5.Final|lib/weld/weld-servlet-2.2.5.Final.jar
[lib]
lib/weld/weld-servlet-2.2.5.Final.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/debug.mod b/jetty-start/src/test/resources/dist-home/modules/debug.mod
index f740ea2c76..5acce7aa90 100644
--- a/jetty-start/src/test/resources/dist-home/modules/debug.mod
+++ b/jetty-start/src/test/resources/dist-home/modules/debug.mod
@@ -5,5 +5,8 @@
[depend]
server
+[files]
+logs/
+
[xml]
etc/jetty-debug.xml
diff --git a/jetty-start/src/test/resources/dist-home/modules/gzip.mod b/jetty-start/src/test/resources/dist-home/modules/gzip.mod
new file mode 100644
index 0000000000..c098092974
--- /dev/null
+++ b/jetty-start/src/test/resources/dist-home/modules/gzip.mod
@@ -0,0 +1,18 @@
+#
+# GZIP module
+# Applies GzipHandler to entire server
+#
+
+[depend]
+server
+
+[xml]
+etc/jetty-gzip.xml
+
+[ini-template]
+### Gzip Handler
+
+gzip.minGzipSize=2048
+gzip.checkGzExists=false
+gzip.compressionLevel=-1
+gzip.excludedUserAgent=.*MSIE.6\.0.*
diff --git a/jetty-start/src/test/resources/dist-home/modules/http2.mod b/jetty-start/src/test/resources/dist-home/modules/http2.mod
new file mode 100644
index 0000000000..2be7e7e524
--- /dev/null
+++ b/jetty-start/src/test/resources/dist-home/modules/http2.mod
@@ -0,0 +1,18 @@
+#
+# HTTP2 Support Module
+#
+
+[depend]
+ssl
+alpn
+
+[lib]
+lib/http2/*.jar
+
+[xml]
+etc/jetty-http2.xml
+
+[ini-template]
+## HTTP2 Configuration
+
+# http2.maxConcurrentStreams=1024
diff --git a/jetty-start/src/test/resources/dist-home/modules/http2c.mod b/jetty-start/src/test/resources/dist-home/modules/http2c.mod
new file mode 100644
index 0000000000..1073181bb3
--- /dev/null
+++ b/jetty-start/src/test/resources/dist-home/modules/http2c.mod
@@ -0,0 +1,22 @@
+#
+# HTTP2 Clear Text Support Module
+#
+
+[depend]
+http
+
+[lib]
+lib/http2/*.jar
+
+[xml]
+etc/jetty-http2c.xml
+
+[ini-template]
+## HTTP2c Configuration
+
+# This module adds support for HTTP/2 clear text to the
+# HTTP/1 clear text connector (defined in jetty-http.xml)
+# The resulting connector will accept both HTTP/1 and HTTP/2
+# connections
+
+# http2.maxConcurrentStreams=1024
diff --git a/jetty-start/src/test/resources/dist-home/modules/https.mod b/jetty-start/src/test/resources/dist-home/modules/https.mod
index bd1b718081..34f3344db6 100644
--- a/jetty-start/src/test/resources/dist-home/modules/https.mod
+++ b/jetty-start/src/test/resources/dist-home/modules/https.mod
@@ -8,12 +8,3 @@ ssl
[xml]
etc/jetty-https.xml
-[ini-template]
-## HTTPS Configuration
-# HTTP port to listen on
-https.port=8443
-# HTTPS idle timeout in milliseconds
-https.timeout=30000
-# HTTPS Socket.soLingerTime in seconds. (-1 to disable)
-# https.soLingerTime=-1
-
diff --git a/jetty-start/src/test/resources/dist-home/modules/jamon.mod b/jetty-start/src/test/resources/dist-home/modules/jamon.mod
index 2aeb2adcb8..965b8db634 100644
--- a/jetty-start/src/test/resources/dist-home/modules/jamon.mod
+++ b/jetty-start/src/test/resources/dist-home/modules/jamon.mod
@@ -13,8 +13,8 @@ etc/jamon.xml
[files]
lib/jamon/
-http://central.maven.org/maven2/com/jamonapi/jamon/2.79/jamon-2.79.jar|lib/jamon/jamon-2.79.jar
-http://central.maven.org/maven2/com/jamonapi/jamon_war/2.79/jamon_war-2.79.war|lib/jamon/jamon.war
+maven://com.jamonapi/jamon/2.79|lib/jamon/jamon-2.79.jar
+maven://com.jamonapi/jamon_war/2.79/war|lib/jamon/jamon.war
[lib]
lib/jamon/**.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/jminix.mod b/jetty-start/src/test/resources/dist-home/modules/jminix.mod
index b35d7024cd..9df4e26e2c 100644
--- a/jetty-start/src/test/resources/dist-home/modules/jminix.mod
+++ b/jetty-start/src/test/resources/dist-home/modules/jminix.mod
@@ -11,21 +11,21 @@ etc/jminix.xml
[files]
lib/jminix/
-http://central.maven.org/maven2/org/jminix/jminix/1.1.0/jminix-1.1.0.jar|lib/jminix/jminix-1.1.0.jar
+maven://org.jminix/jminix/1.1.0|lib/jminix/jminix-1.1.0.jar
http://maven.restlet.com/org/restlet/org.restlet/1.1.5/org.restlet-1.1.5.jar|lib/jminix/org.restlet-1.1.5.jar
http://maven.restlet.com/org/restlet/org.restlet.ext.velocity/1.1.5/org.restlet.ext.velocity-1.1.5.jar|lib/jminix/org.restlet.ext.velocity-1.1.5.jar
-http://central.maven.org/maven2/org/apache/velocity/velocity/1.5/velocity-1.5.jar|lib/jminix/velocity-1.5.jar
-http://central.maven.org/maven2/oro/oro/2.0.8/oro-2.0.8.jar|lib/jminix/oro-2.0.8.jar
+maven://org.apache.velocity/velocity/1.5|lib/jminix/velocity-1.5.jar
+maven://oro/oro/2.0.8|lib/jminix/oro-2.0.8.jar
http://maven.restlet.com/com/noelios/restlet/com.noelios.restlet/1.1.5/com.noelios.restlet-1.1.5.jar|lib/jminix/com.noelios.restlet-1.1.5.jar
http://maven.restlet.com/com/noelios/restlet/com.noelios.restlet.ext.servlet/1.1.5/com.noelios.restlet.ext.servlet-1.1.5.jar|lib/jminix/com.noelios.restlet.ext.servlet-1.1.5.jar
-http://central.maven.org/maven2/commons-logging/commons-logging/1.1.1/commons-logging-1.1.1.jar|lib/jminix/commons-logging-1.1.1.jar
-http://repo2.maven.org/maven2/net/sf/json-lib/json-lib/2.2.3/json-lib-2.2.3-jdk15.jar|lib/jminix/json-lib-2.2.3-jdk15.jar
-http://central.maven.org/maven2/commons-lang/commons-lang/2.4/commons-lang-2.4.jar|lib/jminix/commons-lang-2.4.jar
-http://central.maven.org/maven2/commons-beanutils/commons-beanutils/1.7.0/commons-beanutils-1.7.0.jar|lib/jminix/commons-beanutils-1.7.0.jar
-http://central.maven.org/maven2/commons-collections/commons-collections/3.2/commons-collections-3.2.jar|lib/jminix/commons-collections-3.2.jar
-http://central.maven.org/maven2/net/sf/ezmorph/ezmorph/1.0.6/ezmorph-1.0.6.jar|lib/jminix/ezmorph-1.0.6.jar
-http://central.maven.org/maven2/org/jgroups/jgroups/2.12.1.3.Final/jgroups-2.12.1.3.Final.jar|lib/jminix/jgroups-2.12.1.3.Final.jar
-http://central.maven.org/maven2/org/jasypt/jasypt/1.8/jasypt-1.8.jar|lib/jminix/jasypt-1.8.jar
+maven://commons-logging/commons-logging/1.1.1|lib/jminix/commons-logging-1.1.1.jar
+maven://net.sf.json-lib/json-lib/2.2.3/jar/jdk15|lib/jminix/json-lib-2.2.3-jdk15.jar
+maven://commons-lang/commons-lang/2.4|lib/jminix/commons-lang-2.4.jar
+maven://commons-beanutils/commons-beanutils/1.7.0|lib/jminix/commons-beanutils-1.7.0.jar
+maven://commons-collections/commons-collections/3.2|lib/jminix/commons-collections-3.2.jar
+maven://net.sf.ezmorph/ezmorph/1.0.6|lib/jminix/ezmorph-1.0.6.jar
+maven://org.jgroups/jgroups/2.12.1.3.Final|lib/jminix/jgroups-2.12.1.3.Final.jar
+maven://org.jasypt/jasypt/1.8|lib/jminix/jasypt-1.8.jar
[lib]
lib/jminix/**.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/jolokia.mod b/jetty-start/src/test/resources/dist-home/modules/jolokia.mod
index 876c2fcd47..da8ac8f8c2 100644
--- a/jetty-start/src/test/resources/dist-home/modules/jolokia.mod
+++ b/jetty-start/src/test/resources/dist-home/modules/jolokia.mod
@@ -11,7 +11,7 @@ jmx
etc/jolokia.xml
[files]
-http://repo1.maven.org/maven2/org/jolokia/jolokia-war/1.2.2/jolokia-war-1.2.2.war|lib/jolokia/jolokia.war
+maven://org.jolokia/jolokia-war/1.2.2/war|lib/jolokia/jolokia.war
[license]
Jolokia is released under the Apache License 2.0
diff --git a/jetty-start/src/test/resources/dist-home/modules/jsp-impl/apache-jsp.mod b/jetty-start/src/test/resources/dist-home/modules/jsp-impl/apache-jsp.mod
deleted file mode 100644
index aed547c851..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/jsp-impl/apache-jsp.mod
+++ /dev/null
@@ -1,10 +0,0 @@
-#
-# Apache JSP Module
-#
-
-[name]
-jsp-impl
-
-[lib]
-lib/apache-jsp/*.jar
-
diff --git a/jetty-start/src/test/resources/dist-home/modules/jsp-impl/glassfish-jsp.mod b/jetty-start/src/test/resources/dist-home/modules/jsp-impl/glassfish-jsp.mod
deleted file mode 100644
index 130d2b371f..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/jsp-impl/glassfish-jsp.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-#
-# Glassfish JSP Module
-#
-[name]
-jsp-impl
-
-[lib]
-lib/jsp/*.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/jsp-impl/glassfish-jstl.mod b/jetty-start/src/test/resources/dist-home/modules/jsp-impl/glassfish-jstl.mod
deleted file mode 100644
index 4b8e6f360c..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/jsp-impl/glassfish-jstl.mod
+++ /dev/null
@@ -1,6 +0,0 @@
-#
-# Glassfish JSTL
-[name]
-jstl-impl
-
-# This file is empty as glassfish jstl is provided by glassfish jsp
diff --git a/jetty-start/src/test/resources/dist-home/modules/jsp.mod b/jetty-start/src/test/resources/dist-home/modules/jsp.mod
index bb31ca7599..a16cc93dc9 100644
--- a/jetty-start/src/test/resources/dist-home/modules/jsp.mod
+++ b/jetty-start/src/test/resources/dist-home/modules/jsp.mod
@@ -5,17 +5,5 @@
[depend]
servlet
annotations
-jsp-impl/${jsp-impl}-jsp
+apache-jsp
-[ini-template]
-# JSP Configuration
-
-# Select JSP implementation, choices are
-# glassfish : The reference implementation
-# default in jetty <= 9.1
-# apache : The apache version
-# default jetty >= 9.2
-jsp-impl=apache
-
-# To use a non-jdk compiler for JSP compilation when using glassfish uncomment next line
-# -Dorg.apache.jasper.compiler.disablejsr199=true
diff --git a/jetty-start/src/test/resources/dist-home/modules/jstl.mod b/jetty-start/src/test/resources/dist-home/modules/jstl.mod
index cb06244f5e..efc310af6e 100644
--- a/jetty-start/src/test/resources/dist-home/modules/jstl.mod
+++ b/jetty-start/src/test/resources/dist-home/modules/jstl.mod
@@ -1,14 +1,8 @@
#
-# Jetty JSP Module
+# Jetty JSTL Module
#
[depend]
jsp
-jsp-impl/${jsp-impl}-jstl
+apache-jstl
-[ini-template]
-# JSTL Configuration
-# The glassfish jsp-impl includes JSTL by default and this module
-# is not required to activate it.
-# The apache jsp-impl does not include JSTL by default and this module
-# is required to put JSTL on the container classpath
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_40.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_40.mod
deleted file mode 100644
index 54d3731052..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_40.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/7.1.0.v20141016/alpn-boot-7.1.0.v20141016.jar|lib/alpn/alpn-boot-7.1.0.v20141016.jar
-
-[exec]
--Xbootclasspath/p:lib/alpn/alpn-boot-7.1.0.v20141016.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_45.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_45.mod
deleted file mode 100644
index 54d3731052..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_45.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/7.1.0.v20141016/alpn-boot-7.1.0.v20141016.jar|lib/alpn/alpn-boot-7.1.0.v20141016.jar
-
-[exec]
--Xbootclasspath/p:lib/alpn/alpn-boot-7.1.0.v20141016.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_51.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_51.mod
deleted file mode 100644
index 54d3731052..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_51.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/7.1.0.v20141016/alpn-boot-7.1.0.v20141016.jar|lib/alpn/alpn-boot-7.1.0.v20141016.jar
-
-[exec]
--Xbootclasspath/p:lib/alpn/alpn-boot-7.1.0.v20141016.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_55.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_55.mod
deleted file mode 100644
index 54d3731052..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_55.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/7.1.0.v20141016/alpn-boot-7.1.0.v20141016.jar|lib/alpn/alpn-boot-7.1.0.v20141016.jar
-
-[exec]
--Xbootclasspath/p:lib/alpn/alpn-boot-7.1.0.v20141016.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_60.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_60.mod
deleted file mode 100644
index 54d3731052..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_60.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/7.1.0.v20141016/alpn-boot-7.1.0.v20141016.jar|lib/alpn/alpn-boot-7.1.0.v20141016.jar
-
-[exec]
--Xbootclasspath/p:lib/alpn/alpn-boot-7.1.0.v20141016.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_65.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_65.mod
deleted file mode 100644
index 54d3731052..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_65.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/7.1.0.v20141016/alpn-boot-7.1.0.v20141016.jar|lib/alpn/alpn-boot-7.1.0.v20141016.jar
-
-[exec]
--Xbootclasspath/p:lib/alpn/alpn-boot-7.1.0.v20141016.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_67.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_67.mod
deleted file mode 100644
index 54d3731052..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_67.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/7.1.0.v20141016/alpn-boot-7.1.0.v20141016.jar|lib/alpn/alpn-boot-7.1.0.v20141016.jar
-
-[exec]
--Xbootclasspath/p:lib/alpn/alpn-boot-7.1.0.v20141016.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_71.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_71.mod
deleted file mode 100644
index e9b4e2a0c1..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_71.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/7.1.2.v20141202/alpn-boot-7.1.2.v20141202.jar|lib/alpn/alpn-boot-7.1.2.v20141202.jar
-
-[exec]
--Xbootclasspath/p:lib/alpn/alpn-boot-7.1.2.v20141202.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_72.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_72.mod
deleted file mode 100644
index e9b4e2a0c1..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_72.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/7.1.2.v20141202/alpn-boot-7.1.2.v20141202.jar|lib/alpn/alpn-boot-7.1.2.v20141202.jar
-
-[exec]
--Xbootclasspath/p:lib/alpn/alpn-boot-7.1.2.v20141202.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_75.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_75.mod
deleted file mode 100644
index ac315d6df7..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_75.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/7.1.3.v20150130/alpn-boot-7.1.3.v20150130.jar|lib/alpn/alpn-boot-7.1.3.v20150130.jar
-
-[exec]
--Xbootclasspath/p:lib/alpn/alpn-boot-7.1.3.v20150130.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_76.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_76.mod
deleted file mode 100644
index ac315d6df7..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.7.0_76.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/7.1.3.v20150130/alpn-boot-7.1.3.v20150130.jar|lib/alpn/alpn-boot-7.1.3.v20150130.jar
-
-[exec]
--Xbootclasspath/p:lib/alpn/alpn-boot-7.1.3.v20150130.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.8.0.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.8.0.mod
deleted file mode 100644
index a81732c453..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.8.0.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/8.1.0.v20141016/alpn-boot-8.1.0.v20141016.jar|lib/alpn/alpn-boot-8.1.0.v20141016.jar
-
-[exec]
--Xbootclasspath/p:lib/alpn/alpn-boot-8.1.0.v20141016.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.8.0_05.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.8.0_05.mod
deleted file mode 100644
index a81732c453..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.8.0_05.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/8.1.0.v20141016/alpn-boot-8.1.0.v20141016.jar|lib/alpn/alpn-boot-8.1.0.v20141016.jar
-
-[exec]
--Xbootclasspath/p:lib/alpn/alpn-boot-8.1.0.v20141016.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.8.0_11.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.8.0_11.mod
deleted file mode 100644
index a81732c453..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.8.0_11.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/8.1.0.v20141016/alpn-boot-8.1.0.v20141016.jar|lib/alpn/alpn-boot-8.1.0.v20141016.jar
-
-[exec]
--Xbootclasspath/p:lib/alpn/alpn-boot-8.1.0.v20141016.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.8.0_20.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.8.0_20.mod
deleted file mode 100644
index a81732c453..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.8.0_20.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/8.1.0.v20141016/alpn-boot-8.1.0.v20141016.jar|lib/alpn/alpn-boot-8.1.0.v20141016.jar
-
-[exec]
--Xbootclasspath/p:lib/alpn/alpn-boot-8.1.0.v20141016.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.8.0_25.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.8.0_25.mod
deleted file mode 100644
index 8d13261ff6..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.8.0_25.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/8.1.2.v20141202/alpn-boot-8.1.2.v20141202.jar|lib/alpn/alpn-boot-8.1.2.v20141202.jar
-
-[exec]
--Xbootclasspath/p:lib/alpn/alpn-boot-8.1.2.v20141202.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.8.0_31.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.8.0_31.mod
deleted file mode 100644
index 4114979319..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/alpn-1.8.0_31.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/8.1.3.v20150130/alpn-boot-8.1.3.v20150130.jar|lib/alpn/alpn-boot-8.1.3.v20150130.jar
-
-[exec]
--Xbootclasspath/p:lib/alpn/alpn-boot-8.1.3.v20150130.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_04.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_04.mod
deleted file mode 100644
index 007570b675..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_04.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.0.v20120525/npn-boot-1.1.0.v20120525.jar|lib/npn/npn-boot-1.1.0.v20120525.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.0.v20120525.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_05.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_05.mod
deleted file mode 100644
index 007570b675..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_05.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.0.v20120525/npn-boot-1.1.0.v20120525.jar|lib/npn/npn-boot-1.1.0.v20120525.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.0.v20120525.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_06.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_06.mod
deleted file mode 100644
index 868a7a77fc..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_06.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.1.v20121030/npn-boot-1.1.1.v20121030.jar|lib/npn/npn-boot-1.1.1.v20121030.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.1.v20121030.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_07.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_07.mod
deleted file mode 100644
index 868a7a77fc..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_07.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.1.v20121030/npn-boot-1.1.1.v20121030.jar|lib/npn/npn-boot-1.1.1.v20121030.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.1.v20121030.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_09.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_09.mod
deleted file mode 100644
index 20c1db27bd..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_09.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.3.v20130313/npn-boot-1.1.3.v20130313.jar|lib/npn/npn-boot-1.1.3.v20130313.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.3.v20130313.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_10.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_10.mod
deleted file mode 100644
index 20c1db27bd..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_10.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.3.v20130313/npn-boot-1.1.3.v20130313.jar|lib/npn/npn-boot-1.1.3.v20130313.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.3.v20130313.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_11.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_11.mod
deleted file mode 100644
index 20c1db27bd..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_11.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.3.v20130313/npn-boot-1.1.3.v20130313.jar|lib/npn/npn-boot-1.1.3.v20130313.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.3.v20130313.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_13.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_13.mod
deleted file mode 100644
index 1645a52dba..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_13.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.4.v20130313/npn-boot-1.1.4.v20130313.jar|lib/npn/npn-boot-1.1.4.v20130313.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.4.v20130313.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_15.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_15.mod
deleted file mode 100644
index 73bc09007e..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_15.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.5.v20130313/npn-boot-1.1.5.v20130313.jar|lib/npn/npn-boot-1.1.5.v20130313.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.5.v20130313.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_17.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_17.mod
deleted file mode 100644
index 73bc09007e..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_17.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.5.v20130313/npn-boot-1.1.5.v20130313.jar|lib/npn/npn-boot-1.1.5.v20130313.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.5.v20130313.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_21.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_21.mod
deleted file mode 100644
index 73bc09007e..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_21.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.5.v20130313/npn-boot-1.1.5.v20130313.jar|lib/npn/npn-boot-1.1.5.v20130313.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.5.v20130313.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_25.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_25.mod
deleted file mode 100644
index 73bc09007e..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_25.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.5.v20130313/npn-boot-1.1.5.v20130313.jar|lib/npn/npn-boot-1.1.5.v20130313.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.5.v20130313.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_40.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_40.mod
deleted file mode 100644
index 465e6f034b..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_40.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.6.v20130911/npn-boot-1.1.6.v20130911.jar|lib/npn/npn-boot-1.1.6.v20130911.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.6.v20130911.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_45.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_45.mod
deleted file mode 100644
index 465e6f034b..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_45.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.6.v20130911/npn-boot-1.1.6.v20130911.jar|lib/npn/npn-boot-1.1.6.v20130911.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.6.v20130911.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_51.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_51.mod
deleted file mode 100644
index 465e6f034b..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_51.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.6.v20130911/npn-boot-1.1.6.v20130911.jar|lib/npn/npn-boot-1.1.6.v20130911.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.6.v20130911.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_55.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_55.mod
deleted file mode 100644
index 5f8704d68a..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_55.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.8.v20141013/npn-boot-1.1.8.v20141013.jar|lib/npn/npn-boot-1.1.8.v20141013.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.8.v20141013.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_60.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_60.mod
deleted file mode 100644
index 5f8704d68a..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_60.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.8.v20141013/npn-boot-1.1.8.v20141013.jar|lib/npn/npn-boot-1.1.8.v20141013.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.8.v20141013.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_65.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_65.mod
deleted file mode 100644
index 5f8704d68a..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_65.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.8.v20141013/npn-boot-1.1.8.v20141013.jar|lib/npn/npn-boot-1.1.8.v20141013.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.8.v20141013.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_67.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_67.mod
deleted file mode 100644
index 5f8704d68a..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_67.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.8.v20141013/npn-boot-1.1.8.v20141013.jar|lib/npn/npn-boot-1.1.8.v20141013.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.8.v20141013.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_71.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_71.mod
deleted file mode 100644
index 851aca8727..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_71.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.9.v20141016/npn-boot-1.1.9.v20141016.jar|lib/npn/npn-boot-1.1.9.v20141016.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.9.v20141016.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_72.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_72.mod
deleted file mode 100644
index 851aca8727..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_72.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.9.v20141016/npn-boot-1.1.9.v20141016.jar|lib/npn/npn-boot-1.1.9.v20141016.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.9.v20141016.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_75.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_75.mod
deleted file mode 100644
index a5fac1140c..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_75.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.10.v20150130/npn-boot-1.1.10.v20150130.jar|lib/npn/npn-boot-1.1.10.v20150130.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.10.v20150130.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_76.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_76.mod
deleted file mode 100644
index a5fac1140c..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn-1.7.0_76.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.10.v20150130/npn-boot-1.1.10.v20150130.jar|lib/npn/npn-boot-1.1.10.v20150130.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.10.v20150130.jar
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn.mod b/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn.mod
deleted file mode 100644
index 1a2c71d721..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego-impl/npn.mod
+++ /dev/null
@@ -1,37 +0,0 @@
-# NPN is provided via a -Xbootclasspath that modifies the secure connections
-# in java to support the NPN layer needed for SPDY.
-#
-# This modification has a tight dependency on specific updates of Java 1.7.
-# (No support for Java 8 exists for npn / npn-boot, use alpn instead)
-#
-# The npn module will use an appropriate npn-boot jar for your specific
-# version of Java.
-#
-# IMPORTANT: Versions of Java that exist after this module was created are
-# not guaranteed to work with existing npn-boot jars, and might
-# need a new npn-boot to be created / tested / deployed by the
-# Jetty project in order to provide support for these future
-# Java versions.
-#
-# All versions of npn-boot can be found at
-# http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/
-
-
-[name]
-protonego-impl
-
-[depend]
-protonego-impl/npn-${java.version}
-
-[xml]
-etc/protonego-npn.xml
-
-[files]
-lib/
-lib/npn/
-
-[license]
-NPN is a hosted at github under the GPL v2 with ClassPath Exception.
-NPN replaces/modifies OpenJDK classes in the java.sun.security.ssl package.
-http://github.com/jetty-project/jetty-npn
-http://openjdk.java.net/legal/gplv2+ce.html
diff --git a/jetty-start/src/test/resources/dist-home/modules/protonego.mod b/jetty-start/src/test/resources/dist-home/modules/protonego.mod
deleted file mode 100644
index fbf4d080e0..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/protonego.mod
+++ /dev/null
@@ -1,24 +0,0 @@
-#
-# Protocol Negotiatin Selection Module
-#
-
-[depend]
-protonego-impl/${protonego}
-
-[ini-template]
-# Protocol Negotiation Implementation Selection
-# choices are:
-# 'npn' : original implementation for SPDY (now deprecated)
-# 'alpn' : replacement for NPN, in use by current SPDY implementations
-# and the future HTTP/2 spec
-# Note: java 1.8+ are ALPN only.
-protonego=alpn
-
-# Configuration for NPN
-# npn.protocols=spdy/3,http/1.1
-# npn.defaultProtocol=http/1.1
-
-# Configuration for ALPN
-# alpn.protocols=h2-14,http/1.1
-# alpn.defaultProtocol=http/1.1
-
diff --git a/jetty-start/src/test/resources/dist-home/modules/server.mod b/jetty-start/src/test/resources/dist-home/modules/server.mod
index 3cdac3578b..b3f87de162 100644
--- a/jetty-start/src/test/resources/dist-home/modules/server.mod
+++ b/jetty-start/src/test/resources/dist-home/modules/server.mod
@@ -45,5 +45,5 @@ jetty.send.date.header=false
jetty.dump.start=false
# Dump the state of the Jetty server, before stop
jetty.dump.stop=false
-
-
+# Enable delayed dispatch optimisation
+jetty.delayDispatchUntilContent=false
diff --git a/jetty-start/src/test/resources/dist-home/modules/spdy.mod b/jetty-start/src/test/resources/dist-home/modules/spdy.mod
deleted file mode 100644
index cf79dfa0f2..0000000000
--- a/jetty-start/src/test/resources/dist-home/modules/spdy.mod
+++ /dev/null
@@ -1,26 +0,0 @@
-#
-# SPDY Support Module
-#
-
-[depend]
-ssl
-protonego
-
-[lib]
-lib/spdy/*.jar
-
-[xml]
-etc/jetty-ssl.xml
-etc/jetty-spdy.xml
-
-[ini-template]
-## SPDY Configuration
-
-# Port for SPDY connections
-spdy.port=8443
-
-# SPDY idle timeout in milliseconds
-spdy.timeout=30000
-
-# Initial Window Size for SPDY
-#spdy.initialWindowSize=65536
diff --git a/jetty-start/src/test/resources/dist-home/modules/ssl.mod b/jetty-start/src/test/resources/dist-home/modules/ssl.mod
index ef471929f3..a4d105088b 100644
--- a/jetty-start/src/test/resources/dist-home/modules/ssl.mod
+++ b/jetty-start/src/test/resources/dist-home/modules/ssl.mod
@@ -16,6 +16,13 @@ http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/plain/jetty-server/
# define the port to use for secure redirection
jetty.secure.port=8443
+# SSL port to listen on
+ssl.port=8443
+# SSL idle timeout in milliseconds
+ssl.timeout=30000
+# HTTPS Socket.soLingerTime in seconds. (-1 to disable)
+# ssl.soLingerTime=-1
+
## Setup a demonstration keystore and truststore
jetty.keystore=etc/keystore
jetty.truststore=etc/keystore
diff --git a/jetty-start/src/test/resources/dist-home/start.ini b/jetty-start/src/test/resources/dist-home/start.ini
new file mode 100644
index 0000000000..141836874d
--- /dev/null
+++ b/jetty-start/src/test/resources/dist-home/start.ini
@@ -0,0 +1,133 @@
+#===========================================================
+# Jetty Startup
+#
+# Starting Jetty from this {jetty.home} is not recommended.
+#
+# A proper {jetty.base} directory should be configured, instead
+# of making changes to this {jetty.home} directory.
+#
+# See documentation about {jetty.base} at
+# http://www.eclipse.org/jetty/documentation/current/startup.html
+#
+# A demo-base directory has been provided as an example of
+# this sort of setup.
+#
+# $ cd demo-base
+# $ java -jar ../start.jar
+#
+#===========================================================
+
+# To disable the warning message, comment the following line
+--module=home-base-warning
+
+# ---------------------------------------
+# Module: apache-jsp
+--module=apache-jsp
+
+# ---------------------------------------
+# Module: apache-jstl
+--module=apache-jstl
+
+# ---------------------------------------
+# Module: ext
+--module=ext
+
+# ---------------------------------------
+# Module: resources
+--module=resources
+
+# ---------------------------------------
+# Module: server
+--module=server
+##
+## Server Threading Configuration
+##
+# minimum number of threads
+threads.min=10
+# maximum number of threads
+threads.max=200
+# thread idle timeout in milliseconds
+threads.timeout=60000
+# buffer size for output
+jetty.output.buffer.size=32768
+# request header buffer size
+jetty.request.header.size=8192
+# response header buffer size
+jetty.response.header.size=8192
+# should jetty send the server version header?
+jetty.send.server.version=true
+# should jetty send the date header?
+jetty.send.date.header=false
+# What host to listen on (leave commented to listen on all interfaces)
+#jetty.host=myhost.com
+# Dump the state of the Jetty server, components, and webapps after startup
+jetty.dump.start=false
+# Dump the state of the Jetty server, before stop
+jetty.dump.stop=false
+# Enable delayed dispatch optimisation
+jetty.delayDispatchUntilContent=false
+
+# ---------------------------------------
+# Module: http
+--module=http
+### HTTP Connector Configuration
+
+## HTTP port to listen on
+jetty.port=8080
+
+## HTTP idle timeout in milliseconds
+http.timeout=30000
+
+## HTTP Socket.soLingerTime in seconds. (-1 to disable)
+# http.soLingerTime=-1
+
+## Parameters to control the number and priority of acceptors and selectors
+# http.selectors=1
+# http.acceptors=1
+# http.selectorPriorityDelta=0
+# http.acceptorPriorityDelta=0
+
+# ---------------------------------------
+# Module: jndi
+--module=jndi
+
+# ---------------------------------------
+# Module: security
+--module=security
+
+# ---------------------------------------
+# Module: servlet
+--module=servlet
+
+# ---------------------------------------
+# Module: webapp
+--module=webapp
+
+# ---------------------------------------
+# Module: deploy
+--module=deploy
+## DeployManager configuration
+# Monitored Directory name (relative to jetty.base)
+# jetty.deploy.monitoredDirName=webapps
+
+
+# ---------------------------------------
+# Module: plus
+--module=plus
+
+# ---------------------------------------
+# Module: annotations
+--module=annotations
+
+# ---------------------------------------
+# Module: jsp
+--module=jsp
+
+# ---------------------------------------
+# Module: websocket
+--module=websocket
+
+# ---------------------------------------
+# Module: jstl
+--module=jstl
+
diff --git a/jetty-start/src/test/resources/usecases/assert-props.agent.txt b/jetty-start/src/test/resources/usecases/agent-properties.assert.txt
index 27108abc1f..19f00c3a97 100644
--- a/jetty-start/src/test/resources/usecases/assert-props.agent.txt
+++ b/jetty-start/src/test/resources/usecases/agent-properties.assert.txt
@@ -1,10 +1,9 @@
# The XMLs we expect (order is important)
-XML|${jetty.home}/etc/jetty-jmx.xml
XML|${jetty.home}/etc/jetty.xml
XML|${jetty.home}/etc/jetty-http.xml
+XML|${jetty.home}/etc/jetty-jmx.xml
# The LIBs we expect (order is irrelevant)
-LIB|${jetty.home}/lib/jetty-continuation-TEST.jar
LIB|${jetty.home}/lib/jetty-http-TEST.jar
LIB|${jetty.home}/lib/jetty-io-TEST.jar
LIB|${jetty.home}/lib/jetty-jmx-TEST.jar
@@ -16,5 +15,19 @@ LIB|${jetty.home}/lib/servlet-api-3.1.jar
LIB|${jetty.base}/lib/agent-jdk-1.6.jar
# The Properties we expect (order is irrelevant)
+# (this is the property we actually set in jetty.base)
PROP|jetty.port=9090
PROP|java.vm.specification.version=1.6
+# (these are the ones set by default from jetty.home modules)
+PROP|http.timeout=30000
+PROP|jetty.delayDispatchUntilContent=false
+PROP|jetty.dump.start=false
+PROP|jetty.dump.stop=false
+PROP|jetty.output.buffer.size=32768
+PROP|jetty.request.header.size=8192
+PROP|jetty.response.header.size=8192
+PROP|jetty.send.date.header=false
+PROP|jetty.send.server.version=true
+PROP|threads.max=200
+PROP|threads.min=10
+PROP|threads.timeout=60000
diff --git a/jetty-start/src/test/resources/usecases/base.props.agent/lib/agent-jdk-1.5.jar b/jetty-start/src/test/resources/usecases/agent-properties/lib/agent-jdk-1.5.jar
index e69de29bb2..e69de29bb2 100644
--- a/jetty-start/src/test/resources/usecases/base.props.agent/lib/agent-jdk-1.5.jar
+++ b/jetty-start/src/test/resources/usecases/agent-properties/lib/agent-jdk-1.5.jar
diff --git a/jetty-start/src/test/resources/usecases/base.props.agent/lib/agent-jdk-1.6.jar b/jetty-start/src/test/resources/usecases/agent-properties/lib/agent-jdk-1.6.jar
index e69de29bb2..e69de29bb2 100644
--- a/jetty-start/src/test/resources/usecases/base.props.agent/lib/agent-jdk-1.6.jar
+++ b/jetty-start/src/test/resources/usecases/agent-properties/lib/agent-jdk-1.6.jar
diff --git a/jetty-start/src/test/resources/usecases/base.props.agent/lib/agent-jdk-1.7.jar b/jetty-start/src/test/resources/usecases/agent-properties/lib/agent-jdk-1.7.jar
index e69de29bb2..e69de29bb2 100644
--- a/jetty-start/src/test/resources/usecases/base.props.agent/lib/agent-jdk-1.7.jar
+++ b/jetty-start/src/test/resources/usecases/agent-properties/lib/agent-jdk-1.7.jar
diff --git a/jetty-start/src/test/resources/usecases/base.props.agent/modules/agent.mod b/jetty-start/src/test/resources/usecases/agent-properties/modules/agent.mod
index a4362a2cc0..a4362a2cc0 100644
--- a/jetty-start/src/test/resources/usecases/base.props.agent/modules/agent.mod
+++ b/jetty-start/src/test/resources/usecases/agent-properties/modules/agent.mod
diff --git a/jetty-start/src/test/resources/usecases/base.props.agent/start.ini b/jetty-start/src/test/resources/usecases/agent-properties/start.ini
index 198a07c499..198a07c499 100644
--- a/jetty-start/src/test/resources/usecases/base.props.agent/start.ini
+++ b/jetty-start/src/test/resources/usecases/agent-properties/start.ini
diff --git a/jetty-start/src/test/resources/usecases/assert-jmx.txt b/jetty-start/src/test/resources/usecases/assert-jmx.txt
deleted file mode 100644
index def27d7da7..0000000000
--- a/jetty-start/src/test/resources/usecases/assert-jmx.txt
+++ /dev/null
@@ -1,18 +0,0 @@
-# The XMLs we expect (order is important)
-XML|${jetty.home}/etc/jetty-jmx.xml
-XML|${jetty.home}/etc/jetty.xml
-XML|${jetty.home}/etc/jetty-http.xml
-
-# The LIBs we expect (order is irrelevant)
-LIB|${jetty.home}/lib/jetty-continuation-TEST.jar
-LIB|${jetty.home}/lib/jetty-http-TEST.jar
-LIB|${jetty.home}/lib/jetty-io-TEST.jar
-LIB|${jetty.home}/lib/jetty-jmx-TEST.jar
-LIB|${jetty.home}/lib/jetty-schemas-3.1.jar
-LIB|${jetty.home}/lib/jetty-server-TEST.jar
-LIB|${jetty.home}/lib/jetty-util-TEST.jar
-LIB|${jetty.home}/lib/jetty-xml-TEST.jar
-LIB|${jetty.home}/lib/servlet-api-3.1.jar
-
-# The Properties we expect (order is irrelevant)
-PROP|jetty.port=9090
diff --git a/jetty-start/src/test/resources/usecases/assert-jsp-apache.txt b/jetty-start/src/test/resources/usecases/assert-jsp-apache.txt
deleted file mode 100644
index fe3d51ce8a..0000000000
--- a/jetty-start/src/test/resources/usecases/assert-jsp-apache.txt
+++ /dev/null
@@ -1,26 +0,0 @@
-# The XMLs we expect (order is important)
-XML|${jetty.home}/etc/jetty.xml
-XML|${jetty.home}/etc/jetty-http.xml
-
-# The LIBs we expect (order is irrelevant)
-LIB|${jetty.home}/lib/jetty-continuation-TEST.jar
-LIB|${jetty.home}/lib/jetty-http-TEST.jar
-LIB|${jetty.home}/lib/jetty-io-TEST.jar
-LIB|${jetty.home}/lib/jetty-schemas-3.1.jar
-LIB|${jetty.home}/lib/jetty-server-TEST.jar
-LIB|${jetty.home}/lib/jetty-servlet-TEST.jar
-LIB|${jetty.home}/lib/jetty-util-TEST.jar
-LIB|${jetty.home}/lib/jetty-xml-TEST.jar
-LIB|${jetty.home}/lib/servlet-api-3.1.jar
-LIB|${jetty.home}/lib/apache-jsp/javax.servlet.jsp.javax.servlet.jsp-api-TEST.jar
-LIB|${jetty.home}/lib/apache-jsp/org.eclipse.jetty.apache-jsp-TEST.jar
-LIB|${jetty.home}/lib/apache-jsp/org.eclipse.jetty.orbit.org.eclipse.jdt.core-TEST.jar
-LIB|${jetty.home}/lib/apache-jsp/org.mortbay.jasper.apache-el-TEST.jar
-LIB|${jetty.home}/lib/apache-jsp/org.mortbay.jasper.apache-jsp-TEST.jar
-
-# The Properties we expect (order is irrelevant)
-PROP|jetty.port=9090
-PROP|jsp-impl=apache
-
-# Files / Directories to create
-# FILE|lib/
diff --git a/jetty-start/src/test/resources/usecases/assert-jsp-glassfish.txt b/jetty-start/src/test/resources/usecases/assert-jsp-glassfish.txt
deleted file mode 100644
index 9c17c56fb2..0000000000
--- a/jetty-start/src/test/resources/usecases/assert-jsp-glassfish.txt
+++ /dev/null
@@ -1,28 +0,0 @@
-# The XMLs we expect (order is important)
-XML|${jetty.home}/etc/jetty.xml
-XML|${jetty.home}/etc/jetty-http.xml
-
-# The LIBs we expect (order is irrelevant)
-LIB|${jetty.home}/lib/jetty-continuation-TEST.jar
-LIB|${jetty.home}/lib/jetty-http-TEST.jar
-LIB|${jetty.home}/lib/jetty-io-TEST.jar
-LIB|${jetty.home}/lib/jetty-schemas-3.1.jar
-LIB|${jetty.home}/lib/jetty-server-TEST.jar
-LIB|${jetty.home}/lib/jetty-servlet-TEST.jar
-LIB|${jetty.home}/lib/jetty-util-TEST.jar
-LIB|${jetty.home}/lib/jetty-xml-TEST.jar
-LIB|${jetty.home}/lib/servlet-api-3.1.jar
-LIB|${jetty.home}/lib/jsp/javax.el-TEST.jar
-LIB|${jetty.home}/lib/jsp/javax.servlet.jsp.jstl-TEST.jar
-LIB|${jetty.home}/lib/jsp/javax.servlet.jsp-api-TEST.jar
-LIB|${jetty.home}/lib/jsp/javax.servlet.jsp-TEST.jar
-LIB|${jetty.home}/lib/jsp/jetty-jsp-jdt-TEST.jar
-LIB|${jetty.home}/lib/jsp/org.eclipse.jdt.core-TEST.jar
-LIB|${jetty.home}/lib/jsp/org.eclipse.jetty.orbit.javax.servlet.jsp.jstl-TEST.jar
-
-# The Properties we expect (order is irrelevant)
-PROP|jetty.port=9090
-PROP|jsp-impl=glassfish
-
-# Files / Directories to create
-# FILE|lib/
diff --git a/jetty-start/src/test/resources/usecases/assert-barebones.txt b/jetty-start/src/test/resources/usecases/barebones.assert.txt
index 164f3f99f4..3393d78759 100644
--- a/jetty-start/src/test/resources/usecases/assert-barebones.txt
+++ b/jetty-start/src/test/resources/usecases/barebones.assert.txt
@@ -3,7 +3,6 @@ XML|${jetty.home}/etc/jetty.xml
XML|${jetty.home}/etc/jetty-http.xml
# The LIBs we expect (order is irrelevant)
-LIB|${jetty.home}/lib/jetty-continuation-TEST.jar
LIB|${jetty.home}/lib/jetty-http-TEST.jar
LIB|${jetty.home}/lib/jetty-io-TEST.jar
LIB|${jetty.home}/lib/jetty-schemas-3.1.jar
@@ -13,4 +12,18 @@ LIB|${jetty.home}/lib/jetty-xml-TEST.jar
LIB|${jetty.home}/lib/servlet-api-3.1.jar
# The Properties we expect (order is irrelevant)
+# (this is the property we actually set in jetty.base)
PROP|jetty.port=9090
+# (these are the ones set by default from jetty.home modules)
+PROP|http.timeout=30000
+PROP|jetty.delayDispatchUntilContent=false
+PROP|jetty.dump.start=false
+PROP|jetty.dump.stop=false
+PROP|jetty.output.buffer.size=32768
+PROP|jetty.request.header.size=8192
+PROP|jetty.response.header.size=8192
+PROP|jetty.send.date.header=false
+PROP|jetty.send.server.version=true
+PROP|threads.max=200
+PROP|threads.min=10
+PROP|threads.timeout=60000
diff --git a/jetty-start/src/test/resources/usecases/base.barebones/start.ini b/jetty-start/src/test/resources/usecases/barebones/start.ini
index 1c0e065afd..1c0e065afd 100644
--- a/jetty-start/src/test/resources/usecases/base.barebones/start.ini
+++ b/jetty-start/src/test/resources/usecases/barebones/start.ini
diff --git a/jetty-start/src/test/resources/usecases/base.enable.spdy.bad.npn.version/start.ini b/jetty-start/src/test/resources/usecases/base.enable.spdy.bad.npn.version/start.ini
deleted file mode 100644
index 13fa5089f3..0000000000
--- a/jetty-start/src/test/resources/usecases/base.enable.spdy.bad.npn.version/start.ini
+++ /dev/null
@@ -1,12 +0,0 @@
-
---module=server,http,jmx,spdy
-
-jetty.port=9090
-
-# Some SSL keystore configuration
-jetty.keystore=etc/keystore
-jetty.keystore.password=friendly
-jetty.keymanager.password=icecream
-jetty.truststore=etc/keystore
-jetty.truststore.password=sundae
-
diff --git a/jetty-start/src/test/resources/usecases/base.enable.spdy/start.ini b/jetty-start/src/test/resources/usecases/base.enable.spdy/start.ini
deleted file mode 100644
index 13fa5089f3..0000000000
--- a/jetty-start/src/test/resources/usecases/base.enable.spdy/start.ini
+++ /dev/null
@@ -1,12 +0,0 @@
-
---module=server,http,jmx,spdy
-
-jetty.port=9090
-
-# Some SSL keystore configuration
-jetty.keystore=etc/keystore
-jetty.keystore.password=friendly
-jetty.keymanager.password=icecream
-jetty.truststore=etc/keystore
-jetty.truststore.password=sundae
-
diff --git a/jetty-start/src/test/resources/usecases/base.with.jsp.apache/start.ini b/jetty-start/src/test/resources/usecases/base.with.jsp.apache/start.ini
deleted file mode 100644
index fcdea021bd..0000000000
--- a/jetty-start/src/test/resources/usecases/base.with.jsp.apache/start.ini
+++ /dev/null
@@ -1,7 +0,0 @@
-
---module=server
---module=http
---module=jsp
-jsp-impl=apache
-
-jetty.port=9090
diff --git a/jetty-start/src/test/resources/usecases/base.with.jsp.bad/start.ini b/jetty-start/src/test/resources/usecases/base.with.jsp.bad/start.ini
deleted file mode 100644
index 96e495acaf..0000000000
--- a/jetty-start/src/test/resources/usecases/base.with.jsp.bad/start.ini
+++ /dev/null
@@ -1,7 +0,0 @@
-
---module=server
---module=http
---module=jsp
-jsp-impl=bogus
-
-jetty.port=9090
diff --git a/jetty-start/src/test/resources/usecases/base.with.jsp.glassfish/start.ini b/jetty-start/src/test/resources/usecases/base.with.jsp.glassfish/start.ini
deleted file mode 100644
index 7107adec96..0000000000
--- a/jetty-start/src/test/resources/usecases/base.with.jsp.glassfish/start.ini
+++ /dev/null
@@ -1,7 +0,0 @@
-
---module=server
---module=http
---module=jsp
-jsp-impl=glassfish
-
-jetty.port=9090
diff --git a/jetty-start/src/test/resources/usecases/assert-props.basic.txt b/jetty-start/src/test/resources/usecases/basic-properties.assert.txt
index e56177ea38..7dbf4fcbd4 100644
--- a/jetty-start/src/test/resources/usecases/assert-props.basic.txt
+++ b/jetty-start/src/test/resources/usecases/basic-properties.assert.txt
@@ -3,7 +3,6 @@ XML|${jetty.home}/etc/jetty.xml
XML|${jetty.home}/etc/jetty-http.xml
# The LIBs we expect (order is irrelevant)
-LIB|${jetty.home}/lib/jetty-continuation-TEST.jar
LIB|${jetty.home}/lib/jetty-http-TEST.jar
LIB|${jetty.home}/lib/jetty-io-TEST.jar
LIB|${jetty.home}/lib/jetty-schemas-3.1.jar
@@ -13,5 +12,19 @@ LIB|${jetty.home}/lib/jetty-xml-TEST.jar
LIB|${jetty.home}/lib/servlet-api-3.1.jar
# The Properties we expect (order is irrelevant)
+# (this is the property we actually set in jetty.base)
PROP|jetty.port=9090
PROP|port=9090
+# (these are the ones set by default from jetty.home modules)
+PROP|http.timeout=30000
+PROP|jetty.delayDispatchUntilContent=false
+PROP|jetty.dump.start=false
+PROP|jetty.dump.stop=false
+PROP|jetty.output.buffer.size=32768
+PROP|jetty.request.header.size=8192
+PROP|jetty.response.header.size=8192
+PROP|jetty.send.date.header=false
+PROP|jetty.send.server.version=true
+PROP|threads.max=200
+PROP|threads.min=10
+PROP|threads.timeout=60000 \ No newline at end of file
diff --git a/jetty-start/src/test/resources/usecases/base.props.basic/start.ini b/jetty-start/src/test/resources/usecases/basic-properties/start.ini
index f80bdb23b1..f80bdb23b1 100644
--- a/jetty-start/src/test/resources/usecases/base.props.basic/start.ini
+++ b/jetty-start/src/test/resources/usecases/basic-properties/start.ini
diff --git a/jetty-start/src/test/resources/usecases/assert-with-db.txt b/jetty-start/src/test/resources/usecases/database.assert.txt
index 165197471f..31d9c27632 100644
--- a/jetty-start/src/test/resources/usecases/assert-with-db.txt
+++ b/jetty-start/src/test/resources/usecases/database.assert.txt
@@ -1,8 +1,8 @@
# The XMLs we expect (order is important)
XML|${jetty.home}/etc/jetty.xml
XML|${jetty.home}/etc/jetty-http.xml
-XML|${jetty.home}/etc/jetty-plus.xml
XML|${jetty.home}/etc/jetty-deploy.xml
+XML|${jetty.home}/etc/jetty-plus.xml
XML|${jetty.base}/etc/jetty-db.xml
# The LIBs we expect (order is irrelevant)
@@ -14,18 +14,34 @@ LIB|${jetty.home}/lib/jetty-util-TEST.jar
LIB|${jetty.home}/lib/jetty-xml-TEST.jar
LIB|${jetty.home}/lib/servlet-api-3.1.jar
LIB|${jetty.home}/lib/jetty-jndi-TEST.jar
-LIB|${jetty.home}/lib/jetty-continuation-TEST.jar
+LIB|${jetty.home}/lib/jndi/javax.mail.glassfish-1.4.1.v201005082020.jar
LIB|${jetty.home}/lib/jndi/javax.transaction-api-1.2.jar
LIB|${jetty.home}/lib/jetty-plus-TEST.jar
LIB|${jetty.home}/lib/jetty-deploy-TEST.jar
LIB|${jetty.home}/lib/jetty-security-TEST.jar
-LIB|${jetty.home}/lib/jndi/javax.activation-1.1.jar
LIB|${jetty.home}/lib/jetty-webapp-TEST.jar
LIB|${jetty.home}/lib/jetty-servlet-TEST.jar
LIB|${jetty.base}/lib/db/mysql-driver.jar
LIB|${jetty.base}/lib/db/bonecp.jar
# The Properties we expect (order is irrelevant)
+# (this is the property we actually set in jetty.base)
PROP|jetty.port=9090
PROP|mysql.user=frank
-PROP|mysql.pass=secret \ No newline at end of file
+PROP|mysql.pass=secret
+# (these are the ones set by default from jetty.home modules)
+PROP|http.timeout=30000
+PROP|jetty.delayDispatchUntilContent=false
+PROP|jetty.dump.start=false
+PROP|jetty.dump.stop=false
+PROP|jetty.output.buffer.size=32768
+PROP|jetty.request.header.size=8192
+PROP|jetty.response.header.size=8192
+PROP|jetty.send.date.header=false
+PROP|jetty.send.server.version=true
+PROP|threads.max=200
+PROP|threads.min=10
+PROP|threads.timeout=60000
+
+# Files / Directories to create
+FILE|webapps/
diff --git a/jetty-start/src/test/resources/usecases/base.with.db/etc/jetty-db.xml b/jetty-start/src/test/resources/usecases/database/etc/jetty-db.xml
index 7dd6100e9d..7dd6100e9d 100644
--- a/jetty-start/src/test/resources/usecases/base.with.db/etc/jetty-db.xml
+++ b/jetty-start/src/test/resources/usecases/database/etc/jetty-db.xml
diff --git a/jetty-start/src/test/resources/usecases/base.with.db/lib/db/bonecp.jar b/jetty-start/src/test/resources/usecases/database/lib/db/bonecp.jar
index e69de29bb2..e69de29bb2 100644
--- a/jetty-start/src/test/resources/usecases/base.with.db/lib/db/bonecp.jar
+++ b/jetty-start/src/test/resources/usecases/database/lib/db/bonecp.jar
diff --git a/jetty-start/src/test/resources/usecases/base.with.db/lib/db/mysql-driver.jar b/jetty-start/src/test/resources/usecases/database/lib/db/mysql-driver.jar
index e69de29bb2..e69de29bb2 100644
--- a/jetty-start/src/test/resources/usecases/base.with.db/lib/db/mysql-driver.jar
+++ b/jetty-start/src/test/resources/usecases/database/lib/db/mysql-driver.jar
diff --git a/jetty-start/src/test/resources/usecases/base.with.db/modules/db.mod b/jetty-start/src/test/resources/usecases/database/modules/db.mod
index 5acded8b28..5acded8b28 100644
--- a/jetty-start/src/test/resources/usecases/base.with.db/modules/db.mod
+++ b/jetty-start/src/test/resources/usecases/database/modules/db.mod
diff --git a/jetty-start/src/test/resources/usecases/base.with.db/start.ini b/jetty-start/src/test/resources/usecases/database/start.ini
index d5513df249..d5513df249 100644
--- a/jetty-start/src/test/resources/usecases/base.with.db/start.ini
+++ b/jetty-start/src/test/resources/usecases/database/start.ini
diff --git a/jetty-start/src/test/resources/usecases/assert-with.ext.txt b/jetty-start/src/test/resources/usecases/deep-ext.assert.txt
index 7759a41994..38712d9578 100644
--- a/jetty-start/src/test/resources/usecases/assert-with.ext.txt
+++ b/jetty-start/src/test/resources/usecases/deep-ext.assert.txt
@@ -3,7 +3,6 @@ XML|${jetty.home}/etc/jetty.xml
XML|${jetty.home}/etc/jetty-http.xml
# The LIBs we expect (order is irrelevant)
-LIB|${jetty.home}/lib/jetty-continuation-TEST.jar
LIB|${jetty.home}/lib/jetty-http-TEST.jar
LIB|${jetty.home}/lib/jetty-io-TEST.jar
LIB|${jetty.home}/lib/jetty-schemas-3.1.jar
@@ -19,7 +18,21 @@ LIB|${jetty.base}/lib/ext/logging/logback-core.jar
LIB|${jetty.base}/lib/ext/logging/logback-classic.jar
# The Properties we expect (order is irrelevant)
+# (this is the property we actually set in jetty.base)
PROP|jetty.port=9090
+# (these are the ones set by default from jetty.home modules)
+PROP|http.timeout=30000
+PROP|jetty.delayDispatchUntilContent=false
+PROP|jetty.dump.start=false
+PROP|jetty.dump.stop=false
+PROP|jetty.output.buffer.size=32768
+PROP|jetty.request.header.size=8192
+PROP|jetty.response.header.size=8192
+PROP|jetty.send.date.header=false
+PROP|jetty.send.server.version=true
+PROP|threads.max=200
+PROP|threads.min=10
+PROP|threads.timeout=60000
# Files / Directories to create
FILE|lib/
diff --git a/jetty-start/src/test/resources/usecases/base.with.ext/lib/ext/agent.jar b/jetty-start/src/test/resources/usecases/deep-ext/lib/ext/agent.jar
index e69de29bb2..e69de29bb2 100644
--- a/jetty-start/src/test/resources/usecases/base.with.ext/lib/ext/agent.jar
+++ b/jetty-start/src/test/resources/usecases/deep-ext/lib/ext/agent.jar
diff --git a/jetty-start/src/test/resources/usecases/base.with.ext/lib/ext/jdbc/mariadb-jdbc.jar b/jetty-start/src/test/resources/usecases/deep-ext/lib/ext/jdbc/mariadb-jdbc.jar
index e69de29bb2..e69de29bb2 100644
--- a/jetty-start/src/test/resources/usecases/base.with.ext/lib/ext/jdbc/mariadb-jdbc.jar
+++ b/jetty-start/src/test/resources/usecases/deep-ext/lib/ext/jdbc/mariadb-jdbc.jar
diff --git a/jetty-start/src/test/resources/usecases/base.logging/lib/logging/jul-to-slf4j.jar b/jetty-start/src/test/resources/usecases/deep-ext/lib/ext/logging/jul-to-slf4j.jar
index e69de29bb2..e69de29bb2 100644
--- a/jetty-start/src/test/resources/usecases/base.logging/lib/logging/jul-to-slf4j.jar
+++ b/jetty-start/src/test/resources/usecases/deep-ext/lib/ext/logging/jul-to-slf4j.jar
diff --git a/jetty-start/src/test/resources/usecases/base.logging/lib/logging/logback-classic.jar b/jetty-start/src/test/resources/usecases/deep-ext/lib/ext/logging/logback-classic.jar
index e69de29bb2..e69de29bb2 100644
--- a/jetty-start/src/test/resources/usecases/base.logging/lib/logging/logback-classic.jar
+++ b/jetty-start/src/test/resources/usecases/deep-ext/lib/ext/logging/logback-classic.jar
diff --git a/jetty-start/src/test/resources/usecases/base.logging/lib/logging/logback-core.jar b/jetty-start/src/test/resources/usecases/deep-ext/lib/ext/logging/logback-core.jar
index e69de29bb2..e69de29bb2 100644
--- a/jetty-start/src/test/resources/usecases/base.logging/lib/logging/logback-core.jar
+++ b/jetty-start/src/test/resources/usecases/deep-ext/lib/ext/logging/logback-core.jar
diff --git a/jetty-start/src/test/resources/usecases/base.logging/lib/logging/slf4j-api.jar b/jetty-start/src/test/resources/usecases/deep-ext/lib/ext/logging/slf4j-api.jar
index e69de29bb2..e69de29bb2 100644
--- a/jetty-start/src/test/resources/usecases/base.logging/lib/logging/slf4j-api.jar
+++ b/jetty-start/src/test/resources/usecases/deep-ext/lib/ext/logging/slf4j-api.jar
diff --git a/jetty-start/src/test/resources/usecases/base.with.ext/lib/jetty-util-alt.jar b/jetty-start/src/test/resources/usecases/deep-ext/lib/jetty-util-alt.jar
index e69de29bb2..e69de29bb2 100644
--- a/jetty-start/src/test/resources/usecases/base.with.ext/lib/jetty-util-alt.jar
+++ b/jetty-start/src/test/resources/usecases/deep-ext/lib/jetty-util-alt.jar
diff --git a/jetty-start/src/test/resources/usecases/base.with.ext/start.ini b/jetty-start/src/test/resources/usecases/deep-ext/start.ini
index c8fa93065c..c8fa93065c 100644
--- a/jetty-start/src/test/resources/usecases/base.with.ext/start.ini
+++ b/jetty-start/src/test/resources/usecases/deep-ext/start.ini
diff --git a/jetty-start/src/test/resources/usecases/home/etc/README.spnego b/jetty-start/src/test/resources/usecases/home/etc/README.spnego
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/README.spnego
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/jdbcRealm.properties b/jetty-start/src/test/resources/usecases/home/etc/jdbcRealm.properties
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/jdbcRealm.properties
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/jetty-annotations.xml b/jetty-start/src/test/resources/usecases/home/etc/jetty-annotations.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/jetty-annotations.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/jetty-contexts.xml b/jetty-start/src/test/resources/usecases/home/etc/jetty-contexts.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/jetty-contexts.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/jetty-debug.xml b/jetty-start/src/test/resources/usecases/home/etc/jetty-debug.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/jetty-debug.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/jetty-demo.xml b/jetty-start/src/test/resources/usecases/home/etc/jetty-demo.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/jetty-demo.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/jetty-deploy.xml b/jetty-start/src/test/resources/usecases/home/etc/jetty-deploy.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/jetty-deploy.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/jetty-http.xml b/jetty-start/src/test/resources/usecases/home/etc/jetty-http.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/jetty-http.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/jetty-https.xml b/jetty-start/src/test/resources/usecases/home/etc/jetty-https.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/jetty-https.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/jetty-ipaccess.xml b/jetty-start/src/test/resources/usecases/home/etc/jetty-ipaccess.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/jetty-ipaccess.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/jetty-jaas.xml b/jetty-start/src/test/resources/usecases/home/etc/jetty-jaas.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/jetty-jaas.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/jetty-jmx.xml b/jetty-start/src/test/resources/usecases/home/etc/jetty-jmx.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/jetty-jmx.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/jetty-logging.xml b/jetty-start/src/test/resources/usecases/home/etc/jetty-logging.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/jetty-logging.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/jetty-lowresources.xml b/jetty-start/src/test/resources/usecases/home/etc/jetty-lowresources.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/jetty-lowresources.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/jetty-monitor.xml b/jetty-start/src/test/resources/usecases/home/etc/jetty-monitor.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/jetty-monitor.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/jetty-plus.xml b/jetty-start/src/test/resources/usecases/home/etc/jetty-plus.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/jetty-plus.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/jetty-proxy.xml b/jetty-start/src/test/resources/usecases/home/etc/jetty-proxy.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/jetty-proxy.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/jetty-requestlog.xml b/jetty-start/src/test/resources/usecases/home/etc/jetty-requestlog.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/jetty-requestlog.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/jetty-rewrite.xml b/jetty-start/src/test/resources/usecases/home/etc/jetty-rewrite.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/jetty-rewrite.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/jetty-setuid.xml b/jetty-start/src/test/resources/usecases/home/etc/jetty-setuid.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/jetty-setuid.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/jetty-spdy-proxy.xml b/jetty-start/src/test/resources/usecases/home/etc/jetty-spdy-proxy.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/jetty-spdy-proxy.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/jetty-spdy.xml b/jetty-start/src/test/resources/usecases/home/etc/jetty-spdy.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/jetty-spdy.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/jetty-ssl.xml b/jetty-start/src/test/resources/usecases/home/etc/jetty-ssl.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/jetty-ssl.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/jetty-started.xml b/jetty-start/src/test/resources/usecases/home/etc/jetty-started.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/jetty-started.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/jetty-stats.xml b/jetty-start/src/test/resources/usecases/home/etc/jetty-stats.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/jetty-stats.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/jetty-testrealm.xml b/jetty-start/src/test/resources/usecases/home/etc/jetty-testrealm.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/jetty-testrealm.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/jetty-webapps.xml b/jetty-start/src/test/resources/usecases/home/etc/jetty-webapps.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/jetty-webapps.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/jetty-websockets.xml b/jetty-start/src/test/resources/usecases/home/etc/jetty-websockets.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/jetty-websockets.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/jetty-xinetd.xml b/jetty-start/src/test/resources/usecases/home/etc/jetty-xinetd.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/jetty-xinetd.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/jetty.conf b/jetty-start/src/test/resources/usecases/home/etc/jetty.conf
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/jetty.conf
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/jetty.xml b/jetty-start/src/test/resources/usecases/home/etc/jetty.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/jetty.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/keystore b/jetty-start/src/test/resources/usecases/home/etc/keystore
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/keystore
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/krb5.ini b/jetty-start/src/test/resources/usecases/home/etc/krb5.ini
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/krb5.ini
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/protonego-alpn.xml b/jetty-start/src/test/resources/usecases/home/etc/protonego-alpn.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/protonego-alpn.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/protonego-npn.xml b/jetty-start/src/test/resources/usecases/home/etc/protonego-npn.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/protonego-npn.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/realm.properties b/jetty-start/src/test/resources/usecases/home/etc/realm.properties
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/realm.properties
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/spnego.conf b/jetty-start/src/test/resources/usecases/home/etc/spnego.conf
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/spnego.conf
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/spnego.properties b/jetty-start/src/test/resources/usecases/home/etc/spnego.properties
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/spnego.properties
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/test-realm.xml b/jetty-start/src/test/resources/usecases/home/etc/test-realm.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/test-realm.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/etc/webdefault.xml b/jetty-start/src/test/resources/usecases/home/etc/webdefault.xml
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/etc/webdefault.xml
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/annotations/javax.annotation-api-1.2.jar b/jetty-start/src/test/resources/usecases/home/lib/annotations/javax.annotation-api-1.2.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/annotations/javax.annotation-api-1.2.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/annotations/org.objectweb.asm-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/annotations/org.objectweb.asm-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/annotations/org.objectweb.asm-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/apache-jsp/javax.servlet.jsp.javax.servlet.jsp-api-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/apache-jsp/javax.servlet.jsp.javax.servlet.jsp-api-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/apache-jsp/javax.servlet.jsp.javax.servlet.jsp-api-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/apache-jsp/org.eclipse.jetty.apache-jsp-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/apache-jsp/org.eclipse.jetty.apache-jsp-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/apache-jsp/org.eclipse.jetty.apache-jsp-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/apache-jsp/org.eclipse.jetty.orbit.org.eclipse.jdt.core-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/apache-jsp/org.eclipse.jetty.orbit.org.eclipse.jdt.core-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/apache-jsp/org.eclipse.jetty.orbit.org.eclipse.jdt.core-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/apache-jsp/org.mortbay.jasper.apache-el-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/apache-jsp/org.mortbay.jasper.apache-el-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/apache-jsp/org.mortbay.jasper.apache-el-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/apache-jsp/org.mortbay.jasper.apache-jsp-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/apache-jsp/org.mortbay.jasper.apache-jsp-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/apache-jsp/org.mortbay.jasper.apache-jsp-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/apache-jstl/org.apache.taglibs.taglibs-standard-impl-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/apache-jstl/org.apache.taglibs.taglibs-standard-impl-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/apache-jstl/org.apache.taglibs.taglibs-standard-impl-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/apache-jstl/org.apache.taglibs.taglibs-standard-spec-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/apache-jstl/org.apache.taglibs.taglibs-standard-spec-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/apache-jstl/org.apache.taglibs.taglibs-standard-spec-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/ext/.nodelete b/jetty-start/src/test/resources/usecases/home/lib/ext/.nodelete
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/ext/.nodelete
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/jetty-annotations-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/jetty-annotations-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/jetty-annotations-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/jetty-client-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/jetty-client-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/jetty-client-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/jetty-continuation-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/jetty-continuation-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/jetty-continuation-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/jetty-deploy-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/jetty-deploy-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/jetty-deploy-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/jetty-http-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/jetty-http-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/jetty-http-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/jetty-io-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/jetty-io-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/jetty-io-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/jetty-jaas-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/jetty-jaas-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/jetty-jaas-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/jetty-jmx-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/jetty-jmx-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/jetty-jmx-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/jetty-jndi-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/jetty-jndi-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/jetty-jndi-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/jetty-jsp-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/jetty-jsp-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/jetty-jsp-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/jetty-plus-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/jetty-plus-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/jetty-plus-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/jetty-proxy-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/jetty-proxy-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/jetty-proxy-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/jetty-rewrite-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/jetty-rewrite-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/jetty-rewrite-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/jetty-schemas-3.1.RC0.jar b/jetty-start/src/test/resources/usecases/home/lib/jetty-schemas-3.1.RC0.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/jetty-schemas-3.1.RC0.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/jetty-schemas-3.1.jar b/jetty-start/src/test/resources/usecases/home/lib/jetty-schemas-3.1.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/jetty-schemas-3.1.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/jetty-security-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/jetty-security-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/jetty-security-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/jetty-server-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/jetty-server-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/jetty-server-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/jetty-servlet-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/jetty-servlet-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/jetty-servlet-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/jetty-servlets-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/jetty-servlets-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/jetty-servlets-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/jetty-util-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/jetty-util-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/jetty-util-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/jetty-webapp-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/jetty-webapp-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/jetty-webapp-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/jetty-xml-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/jetty-xml-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/jetty-xml-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/jndi/javax.activation-1.1.jar b/jetty-start/src/test/resources/usecases/home/lib/jndi/javax.activation-1.1.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/jndi/javax.activation-1.1.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/jndi/javax.transaction-api-1.2.jar b/jetty-start/src/test/resources/usecases/home/lib/jndi/javax.transaction-api-1.2.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/jndi/javax.transaction-api-1.2.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/jsp/javax.el-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/jsp/javax.el-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/jsp/javax.el-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/jsp/javax.servlet.jsp-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/jsp/javax.servlet.jsp-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/jsp/javax.servlet.jsp-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/jsp/javax.servlet.jsp-api-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/jsp/javax.servlet.jsp-api-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/jsp/javax.servlet.jsp-api-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/jsp/javax.servlet.jsp.jstl-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/jsp/javax.servlet.jsp.jstl-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/jsp/javax.servlet.jsp.jstl-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/jsp/jetty-jsp-jdt-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/jsp/jetty-jsp-jdt-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/jsp/jetty-jsp-jdt-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/jsp/org.eclipse.jdt.core-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/jsp/org.eclipse.jdt.core-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/jsp/org.eclipse.jdt.core-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/jsp/org.eclipse.jetty.orbit.javax.servlet.jsp.jstl-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/jsp/org.eclipse.jetty.orbit.javax.servlet.jsp.jstl-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/jsp/org.eclipse.jetty.orbit.javax.servlet.jsp.jstl-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/monitor/jetty-monitor-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/monitor/jetty-monitor-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/monitor/jetty-monitor-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/servlet-api-3.1.jar b/jetty-start/src/test/resources/usecases/home/lib/servlet-api-3.1.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/servlet-api-3.1.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/setuid/jetty-setuid-java-1.0.1.jar b/jetty-start/src/test/resources/usecases/home/lib/setuid/jetty-setuid-java-1.0.1.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/setuid/jetty-setuid-java-1.0.1.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/setuid/libsetuid-linux.so b/jetty-start/src/test/resources/usecases/home/lib/setuid/libsetuid-linux.so
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/setuid/libsetuid-linux.so
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/setuid/libsetuid-osx.so b/jetty-start/src/test/resources/usecases/home/lib/setuid/libsetuid-osx.so
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/setuid/libsetuid-osx.so
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/spdy/spdy-client-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/spdy/spdy-client-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/spdy/spdy-client-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/spdy/spdy-core-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/spdy/spdy-core-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/spdy/spdy-core-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/spdy/spdy-http-common-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/spdy/spdy-http-common-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/spdy/spdy-http-common-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/spdy/spdy-http-server-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/spdy/spdy-http-server-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/spdy/spdy-http-server-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/spdy/spdy-server-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/spdy/spdy-server-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/spdy/spdy-server-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/websocket/javax-websocket-client-impl-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/websocket/javax-websocket-client-impl-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/websocket/javax-websocket-client-impl-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/websocket/javax-websocket-server-impl-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/websocket/javax-websocket-server-impl-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/websocket/javax-websocket-server-impl-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/websocket/javax.websocket-api-1.0.jar b/jetty-start/src/test/resources/usecases/home/lib/websocket/javax.websocket-api-1.0.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/websocket/javax.websocket-api-1.0.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/websocket/websocket-api-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/websocket/websocket-api-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/websocket/websocket-api-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/websocket/websocket-client-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/websocket/websocket-client-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/websocket/websocket-client-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/websocket/websocket-common-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/websocket/websocket-common-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/websocket/websocket-common-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/websocket/websocket-server-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/websocket/websocket-server-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/websocket/websocket-server-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/lib/websocket/websocket-servlet-TEST.jar b/jetty-start/src/test/resources/usecases/home/lib/websocket/websocket-servlet-TEST.jar
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/lib/websocket/websocket-servlet-TEST.jar
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/modules/annotations.mod b/jetty-start/src/test/resources/usecases/home/modules/annotations.mod
deleted file mode 100644
index 65e4654127..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/annotations.mod
+++ /dev/null
@@ -1,17 +0,0 @@
-#
-# Jetty Annotation Scanning Module
-#
-
-[depend]
-# Annotations needs plus, and jndi features
-plus
-
-[lib]
-# Annotations needs jetty annotation jars
-lib/jetty-annotations-${jetty.version}.jar
-# Need annotation processing jars too
-lib/annotations/*.jar
-
-[xml]
-# Enable annotation scanning webapp configurations
-etc/jetty-annotations.xml
diff --git a/jetty-start/src/test/resources/usecases/home/modules/base.mod b/jetty-start/src/test/resources/usecases/home/modules/base.mod
deleted file mode 100644
index ad8ea32088..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/base.mod
+++ /dev/null
@@ -1,11 +0,0 @@
-#
-# Base Module
-#
-
-[optional]
-# JMX is optional, if it appears in the module tree then depend on it
-jmx
-
-[lib]
-lib/jetty-util-${jetty.version}.jar
-lib/jetty-io-${jetty.version}.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/client.mod b/jetty-start/src/test/resources/usecases/home/modules/client.mod
deleted file mode 100644
index 6788eacf79..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/client.mod
+++ /dev/null
@@ -1,7 +0,0 @@
-#
-# Client Feature
-#
-
-[lib]
-# Client jars
-lib/jetty-client-${jetty.version}.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/debug.mod b/jetty-start/src/test/resources/usecases/home/modules/debug.mod
deleted file mode 100644
index f740ea2c76..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/debug.mod
+++ /dev/null
@@ -1,9 +0,0 @@
-#
-# Debug module
-#
-
-[depend]
-server
-
-[xml]
-etc/jetty-debug.xml
diff --git a/jetty-start/src/test/resources/usecases/home/modules/deploy.mod b/jetty-start/src/test/resources/usecases/home/modules/deploy.mod
deleted file mode 100644
index 94c0e40316..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/deploy.mod
+++ /dev/null
@@ -1,14 +0,0 @@
-#
-# Deploy Feature
-#
-
-[depend]
-webapp
-
-[lib]
-# Deploy jars
-lib/jetty-deploy-${jetty.version}.jar
-
-[xml]
-# Deploy configuration
-etc/jetty-deploy.xml
diff --git a/jetty-start/src/test/resources/usecases/home/modules/ext.mod b/jetty-start/src/test/resources/usecases/home/modules/ext.mod
deleted file mode 100644
index 66c051911d..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/ext.mod
+++ /dev/null
@@ -1,10 +0,0 @@
-#
-# ext module
-#
-
-[lib]
-lib/ext/**.jar
-
-[files]
-lib/
-lib/ext/
diff --git a/jetty-start/src/test/resources/usecases/home/modules/http.mod b/jetty-start/src/test/resources/usecases/home/modules/http.mod
deleted file mode 100644
index 85154141ac..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/http.mod
+++ /dev/null
@@ -1,9 +0,0 @@
-#
-# Jetty HTTP Server
-#
-
-[depend]
-server
-
-[xml]
-etc/jetty-http.xml
diff --git a/jetty-start/src/test/resources/usecases/home/modules/https.mod b/jetty-start/src/test/resources/usecases/home/modules/https.mod
deleted file mode 100644
index 281c5dba04..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/https.mod
+++ /dev/null
@@ -1,10 +0,0 @@
-#
-# Jetty HTTP Server
-#
-
-[depend]
-server
-
-[xml]
-etc/jetty-ssl.xml
-etc/jetty-https.xml
diff --git a/jetty-start/src/test/resources/usecases/home/modules/ipaccess.mod b/jetty-start/src/test/resources/usecases/home/modules/ipaccess.mod
deleted file mode 100644
index 956ea0f2e3..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/ipaccess.mod
+++ /dev/null
@@ -1,9 +0,0 @@
-#
-# IPAccess module
-#
-
-[depend]
-server
-
-[xml]
-etc/jetty-ipaccess.xml
diff --git a/jetty-start/src/test/resources/usecases/home/modules/jaas.mod b/jetty-start/src/test/resources/usecases/home/modules/jaas.mod
deleted file mode 100644
index 9fb04f7a57..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/jaas.mod
+++ /dev/null
@@ -1,14 +0,0 @@
-#
-# JAAS Feature
-#
-
-[depend]
-server
-
-[lib]
-# JAAS jars
-lib/jetty-jaas-${jetty.version}.jar
-
-[xml]
-# JAAS configuration
-etc/jetty-jaas.xml
diff --git a/jetty-start/src/test/resources/usecases/home/modules/jmx.mod b/jetty-start/src/test/resources/usecases/home/modules/jmx.mod
deleted file mode 100644
index fd8740ae8d..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/jmx.mod
+++ /dev/null
@@ -1,11 +0,0 @@
-#
-# JMX Feature
-#
-
-[lib]
-# JMX jars (as defined in start.config)
-lib/jetty-jmx-${jetty.version}.jar
-
-[xml]
-# JMX configuration
-etc/jetty-jmx.xml
diff --git a/jetty-start/src/test/resources/usecases/home/modules/jndi.mod b/jetty-start/src/test/resources/usecases/home/modules/jndi.mod
deleted file mode 100644
index 33c077ce68..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/jndi.mod
+++ /dev/null
@@ -1,11 +0,0 @@
-#
-# JNDI Support
-#
-
-[depend]
-server
-
-[lib]
-lib/jetty-jndi-${jetty.version}.jar
-lib/jndi/*.jar
-
diff --git a/jetty-start/src/test/resources/usecases/home/modules/jsp-impl/glassfish-jsp.mod b/jetty-start/src/test/resources/usecases/home/modules/jsp-impl/glassfish-jsp.mod
deleted file mode 100644
index 130d2b371f..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/jsp-impl/glassfish-jsp.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-#
-# Glassfish JSP Module
-#
-[name]
-jsp-impl
-
-[lib]
-lib/jsp/*.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/jsp.mod b/jetty-start/src/test/resources/usecases/home/modules/jsp.mod
deleted file mode 100644
index fa5b9fdfa9..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/jsp.mod
+++ /dev/null
@@ -1,20 +0,0 @@
-#
-# Jetty JSP Module
-#
-
-[depend]
-servlet
-jsp-impl/${jsp-impl}-jsp
-
-[ini-template]
-# JSP Configuration
-
-# Select JSP implementation, choices are
-# glassfish : The reference implementation
-# default in jetty <= 9.1
-# apache : The apache version
-# default jetty >= 9.2
-jsp-impl=apache
-
-# To use a non-jdk compiler for JSP compilation when using glassfish uncomment next line
-# -Dorg.apache.jasper.compiler.disablejsr199=true
diff --git a/jetty-start/src/test/resources/usecases/home/modules/logging.mod b/jetty-start/src/test/resources/usecases/home/modules/logging.mod
deleted file mode 100644
index a39bfe4d23..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/logging.mod
+++ /dev/null
@@ -1,31 +0,0 @@
-#
-# Jetty std err/out logging
-#
-
-[xml]
-etc/jetty-logging.xml
-
-[files]
-logs/
-
-[lib]
-lib/logging/**.jar
-resources/
-
-[ini-template]
-## Logging Configuration
-# Configure jetty logging for default internal behavior STDERR output
-# -Dorg.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StdErrLog
-
-# Configure jetty logging for slf4j
-# -Dorg.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.Slf4jLog
-
-# Configure jetty logging for java.util.logging
-# -Dorg.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.JavaUtilLog
-
-# STDERR / STDOUT Logging
-# Number of days to retain logs
-# jetty.log.retain=90
-# Directory for logging output
-# Either a path relative to ${jetty.base} or an absolute path
-# jetty.logs=logs
diff --git a/jetty-start/src/test/resources/usecases/home/modules/lowresources.mod b/jetty-start/src/test/resources/usecases/home/modules/lowresources.mod
deleted file mode 100644
index 4ca96de10e..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/lowresources.mod
+++ /dev/null
@@ -1,9 +0,0 @@
-#
-# Low Resources module
-#
-
-[depend]
-server
-
-[xml]
-etc/jetty-lowresources.xml
diff --git a/jetty-start/src/test/resources/usecases/home/modules/monitor.mod b/jetty-start/src/test/resources/usecases/home/modules/monitor.mod
deleted file mode 100644
index 67f006d0c4..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/monitor.mod
+++ /dev/null
@@ -1,13 +0,0 @@
-#
-# Jetty Monitor module
-#
-
-[depend]
-server
-client
-
-[lib]
-lib/jetty-monitor-${jetty.version}.jar
-
-[xml]
-etc/jetty-monitor.xml \ No newline at end of file
diff --git a/jetty-start/src/test/resources/usecases/home/modules/plus.mod b/jetty-start/src/test/resources/usecases/home/modules/plus.mod
deleted file mode 100644
index b781f00bf2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/plus.mod
+++ /dev/null
@@ -1,15 +0,0 @@
-#
-# Jetty Proxy module
-#
-
-[depend]
-server
-security
-jndi
-
-[lib]
-lib/jetty-plus-${jetty.version}.jar
-
-[xml]
-# Plus requires configuration
-etc/jetty-plus.xml
diff --git a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn-1.7.0_40.mod b/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn-1.7.0_40.mod
deleted file mode 100644
index 54d3731052..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn-1.7.0_40.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/7.1.0.v20141016/alpn-boot-7.1.0.v20141016.jar|lib/alpn/alpn-boot-7.1.0.v20141016.jar
-
-[exec]
--Xbootclasspath/p:lib/alpn/alpn-boot-7.1.0.v20141016.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn-1.7.0_45.mod b/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn-1.7.0_45.mod
deleted file mode 100644
index 54d3731052..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn-1.7.0_45.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/7.1.0.v20141016/alpn-boot-7.1.0.v20141016.jar|lib/alpn/alpn-boot-7.1.0.v20141016.jar
-
-[exec]
--Xbootclasspath/p:lib/alpn/alpn-boot-7.1.0.v20141016.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn-1.7.0_51.mod b/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn-1.7.0_51.mod
deleted file mode 100644
index 54d3731052..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn-1.7.0_51.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/7.1.0.v20141016/alpn-boot-7.1.0.v20141016.jar|lib/alpn/alpn-boot-7.1.0.v20141016.jar
-
-[exec]
--Xbootclasspath/p:lib/alpn/alpn-boot-7.1.0.v20141016.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn-1.7.0_55.mod b/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn-1.7.0_55.mod
deleted file mode 100644
index 54d3731052..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn-1.7.0_55.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/7.1.0.v20141016/alpn-boot-7.1.0.v20141016.jar|lib/alpn/alpn-boot-7.1.0.v20141016.jar
-
-[exec]
--Xbootclasspath/p:lib/alpn/alpn-boot-7.1.0.v20141016.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn-1.7.0_60.mod b/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn-1.7.0_60.mod
deleted file mode 100644
index 54d3731052..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn-1.7.0_60.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/7.1.0.v20141016/alpn-boot-7.1.0.v20141016.jar|lib/alpn/alpn-boot-7.1.0.v20141016.jar
-
-[exec]
--Xbootclasspath/p:lib/alpn/alpn-boot-7.1.0.v20141016.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn-1.8.0.mod b/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn-1.8.0.mod
deleted file mode 100644
index a81732c453..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn-1.8.0.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/8.1.0.v20141016/alpn-boot-8.1.0.v20141016.jar|lib/alpn/alpn-boot-8.1.0.v20141016.jar
-
-[exec]
--Xbootclasspath/p:lib/alpn/alpn-boot-8.1.0.v20141016.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn-1.8.0_05.mod b/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn-1.8.0_05.mod
deleted file mode 100644
index a81732c453..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn-1.8.0_05.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/8.1.0.v20141016/alpn-boot-8.1.0.v20141016.jar|lib/alpn/alpn-boot-8.1.0.v20141016.jar
-
-[exec]
--Xbootclasspath/p:lib/alpn/alpn-boot-8.1.0.v20141016.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn.mod b/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn.mod
deleted file mode 100644
index 0e399f05cb..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/alpn.mod
+++ /dev/null
@@ -1,36 +0,0 @@
-# ALPN is provided via a -Xbootclasspath that modifies the secure connections
-# in java to support the ALPN layer needed for SPDY (and eventually HTTP/2)
-#
-# This modification has a tight dependency on specific recent updates of
-# Java 1.7 and Java 1.8
-# (Java versions prior to 1.7u40 are not supported)
-#
-# The alpn protonego module will use an appropriate alpn-boot jar for your
-# specific version of Java.
-#
-# IMPORTANT: Versions of Java that exist after this module was created are
-# not guaranteed to work with existing alpn-boot jars, and might
-# need a new alpn-boot to be created / tested / deployed by the
-# Jetty project in order to provide support for these future
-# Java versions.
-#
-# All versions of alpn-boot can be found at
-# http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/
-
-[name]
-protonego-impl
-
-[depend]
-protonego-impl/alpn-${java.version}
-
-[lib]
-lib/jetty-alpn-client-${jetty.version}.jar
-lib/jetty-alpn-server-${jetty.version}.jar
-
-[xml]
-etc/protonego-alpn.xml
-
-[files]
-lib/
-lib/alpn/
-
diff --git a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_04.mod b/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_04.mod
deleted file mode 100644
index 007570b675..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_04.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.0.v20120525/npn-boot-1.1.0.v20120525.jar|lib/npn/npn-boot-1.1.0.v20120525.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.0.v20120525.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_05.mod b/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_05.mod
deleted file mode 100644
index 007570b675..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_05.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.0.v20120525/npn-boot-1.1.0.v20120525.jar|lib/npn/npn-boot-1.1.0.v20120525.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.0.v20120525.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_06.mod b/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_06.mod
deleted file mode 100644
index 868a7a77fc..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_06.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.1.v20121030/npn-boot-1.1.1.v20121030.jar|lib/npn/npn-boot-1.1.1.v20121030.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.1.v20121030.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_07.mod b/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_07.mod
deleted file mode 100644
index 868a7a77fc..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_07.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.1.v20121030/npn-boot-1.1.1.v20121030.jar|lib/npn/npn-boot-1.1.1.v20121030.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.1.v20121030.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_09.mod b/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_09.mod
deleted file mode 100644
index 20c1db27bd..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_09.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.3.v20130313/npn-boot-1.1.3.v20130313.jar|lib/npn/npn-boot-1.1.3.v20130313.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.3.v20130313.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_10.mod b/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_10.mod
deleted file mode 100644
index 20c1db27bd..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_10.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.3.v20130313/npn-boot-1.1.3.v20130313.jar|lib/npn/npn-boot-1.1.3.v20130313.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.3.v20130313.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_11.mod b/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_11.mod
deleted file mode 100644
index 20c1db27bd..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_11.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.3.v20130313/npn-boot-1.1.3.v20130313.jar|lib/npn/npn-boot-1.1.3.v20130313.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.3.v20130313.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_13.mod b/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_13.mod
deleted file mode 100644
index 1645a52dba..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_13.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.4.v20130313/npn-boot-1.1.4.v20130313.jar|lib/npn/npn-boot-1.1.4.v20130313.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.4.v20130313.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_15.mod b/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_15.mod
deleted file mode 100644
index 73bc09007e..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_15.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.5.v20130313/npn-boot-1.1.5.v20130313.jar|lib/npn/npn-boot-1.1.5.v20130313.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.5.v20130313.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_17.mod b/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_17.mod
deleted file mode 100644
index 73bc09007e..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_17.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.5.v20130313/npn-boot-1.1.5.v20130313.jar|lib/npn/npn-boot-1.1.5.v20130313.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.5.v20130313.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_21.mod b/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_21.mod
deleted file mode 100644
index 73bc09007e..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_21.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.5.v20130313/npn-boot-1.1.5.v20130313.jar|lib/npn/npn-boot-1.1.5.v20130313.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.5.v20130313.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_25.mod b/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_25.mod
deleted file mode 100644
index 73bc09007e..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_25.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.5.v20130313/npn-boot-1.1.5.v20130313.jar|lib/npn/npn-boot-1.1.5.v20130313.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.5.v20130313.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_40.mod b/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_40.mod
deleted file mode 100644
index 465e6f034b..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_40.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.6.v20130911/npn-boot-1.1.6.v20130911.jar|lib/npn/npn-boot-1.1.6.v20130911.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.6.v20130911.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_45.mod b/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_45.mod
deleted file mode 100644
index 465e6f034b..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_45.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.6.v20130911/npn-boot-1.1.6.v20130911.jar|lib/npn/npn-boot-1.1.6.v20130911.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.6.v20130911.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_51.mod b/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_51.mod
deleted file mode 100644
index 465e6f034b..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_51.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.6.v20130911/npn-boot-1.1.6.v20130911.jar|lib/npn/npn-boot-1.1.6.v20130911.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.6.v20130911.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_55.mod b/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_55.mod
deleted file mode 100644
index 5f8704d68a..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_55.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.8.v20141013/npn-boot-1.1.8.v20141013.jar|lib/npn/npn-boot-1.1.8.v20141013.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.8.v20141013.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_60.mod b/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_60.mod
deleted file mode 100644
index 5f8704d68a..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn-1.7.0_60.mod
+++ /dev/null
@@ -1,8 +0,0 @@
-[name]
-protonego-boot
-
-[files]
-http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/1.1.8.v20141013/npn-boot-1.1.8.v20141013.jar|lib/npn/npn-boot-1.1.8.v20141013.jar
-
-[exec]
--Xbootclasspath/p:lib/npn/npn-boot-1.1.8.v20141013.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn.mod b/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn.mod
deleted file mode 100644
index 040aad1019..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/protonego-impl/npn.mod
+++ /dev/null
@@ -1,31 +0,0 @@
-# NPN is provided via a -Xbootclasspath that modifies the secure connections
-# in java to support the NPN layer needed for SPDY.
-#
-# This modification has a tight dependency on specific updates of Java 1.7.
-# (No support for Java 8 exists for npn / npn-boot, use alpn instead)
-#
-# The npn module will use an appropriate npn-boot jar for your specific
-# version of Java.
-#
-# IMPORTANT: Versions of Java that exist after this module was created are
-# not guaranteed to work with existing npn-boot jars, and might
-# need a new npn-boot to be created / tested / deployed by the
-# Jetty project in order to provide support for these future
-# Java versions.
-#
-# All versions of npn-boot can be found at
-# http://central.maven.org/maven2/org/mortbay/jetty/npn/npn-boot/
-
-
-[name]
-protonego-impl
-
-[depend]
-protonego-impl/npn-${java.version}
-
-[xml]
-etc/protonego-npn.xml
-
-[files]
-lib/
-lib/npn/
diff --git a/jetty-start/src/test/resources/usecases/home/modules/protonego.mod b/jetty-start/src/test/resources/usecases/home/modules/protonego.mod
deleted file mode 100644
index d7bba9fbec..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/protonego.mod
+++ /dev/null
@@ -1,15 +0,0 @@
-#
-# Protocol Negotiatin Selection Module
-#
-
-[depend]
-protonego-impl/${protonego}
-
-[ini-template]
-# Protocol Negotiation Implementation Selection
-# choices are:
-# 'npn' : original implementation for SPDY (now deprecated)
-# 'alpn' : replacement for NPN, in use by current SPDY implementations
-# and the future HTTP/2 spec
-# Note: java 1.8+ are ALPN only.
-protonego=alpn
diff --git a/jetty-start/src/test/resources/usecases/home/modules/proxy.mod b/jetty-start/src/test/resources/usecases/home/modules/proxy.mod
deleted file mode 100644
index 7873329afa..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/proxy.mod
+++ /dev/null
@@ -1,14 +0,0 @@
-#
-# Jetty Proxy module
-#
-
-[depend]
-server
-client
-
-[lib]
-lib/jetty-proxy-${jetty.version}.jar
-
-[xml]
-# Proxy requires configuration
-etc/jetty-proxy.xml
diff --git a/jetty-start/src/test/resources/usecases/home/modules/requestlog.mod b/jetty-start/src/test/resources/usecases/home/modules/requestlog.mod
deleted file mode 100644
index 2b048dbc76..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/requestlog.mod
+++ /dev/null
@@ -1,9 +0,0 @@
-#
-# Request Log module
-#
-
-[depend]
-server
-
-[xml]
-etc/jetty-requestlog.xml
diff --git a/jetty-start/src/test/resources/usecases/home/modules/resources.mod b/jetty-start/src/test/resources/usecases/home/modules/resources.mod
deleted file mode 100644
index 8647d81325..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/resources.mod
+++ /dev/null
@@ -1,10 +0,0 @@
-#
-# Module to add resources directory to classpath
-#
-
-[lib]
-resources/
-
-[files]
-resources/
-
diff --git a/jetty-start/src/test/resources/usecases/home/modules/rewrite.mod b/jetty-start/src/test/resources/usecases/home/modules/rewrite.mod
deleted file mode 100644
index 85fe5f090d..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/rewrite.mod
+++ /dev/null
@@ -1,13 +0,0 @@
-#
-# Jetty Rewrite module
-#
-
-[depend]
-server
-
-[lib]
-lib/jetty-rewrite-${jetty.version}.jar
-
-[xml]
-# Annotations needs annotations configuration
-etc/jetty-rewrite.xml
diff --git a/jetty-start/src/test/resources/usecases/home/modules/security.mod b/jetty-start/src/test/resources/usecases/home/modules/security.mod
deleted file mode 100644
index ba3163275f..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/security.mod
+++ /dev/null
@@ -1,9 +0,0 @@
-#
-# Jetty Security Module
-#
-
-[depend]
-server
-
-[lib]
-lib/jetty-security-${jetty.version}.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/server.mod b/jetty-start/src/test/resources/usecases/home/modules/server.mod
deleted file mode 100644
index b1e9f33673..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/server.mod
+++ /dev/null
@@ -1,21 +0,0 @@
-#
-# Base server
-#
-
-[optional]
-ext
-
-[depend]
-base
-xml
-
-[lib]
-lib/servlet-api-3.1.jar
-lib/jetty-schemas-3.1.jar
-lib/jetty-http-${jetty.version}.jar
-lib/jetty-continuation-${jetty.version}.jar
-lib/jetty-server-${jetty.version}.jar
-
-[xml]
-# Annotations needs annotations configuration
-etc/jetty.xml
diff --git a/jetty-start/src/test/resources/usecases/home/modules/servlet.mod b/jetty-start/src/test/resources/usecases/home/modules/servlet.mod
deleted file mode 100644
index fdb65c57a1..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/servlet.mod
+++ /dev/null
@@ -1,9 +0,0 @@
-#
-# Jetty Servlet Module
-#
-
-[depend]
-server
-
-[lib]
-lib/jetty-servlet-${jetty.version}.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/spdy.mod b/jetty-start/src/test/resources/usecases/home/modules/spdy.mod
deleted file mode 100644
index cf79dfa0f2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/spdy.mod
+++ /dev/null
@@ -1,26 +0,0 @@
-#
-# SPDY Support Module
-#
-
-[depend]
-ssl
-protonego
-
-[lib]
-lib/spdy/*.jar
-
-[xml]
-etc/jetty-ssl.xml
-etc/jetty-spdy.xml
-
-[ini-template]
-## SPDY Configuration
-
-# Port for SPDY connections
-spdy.port=8443
-
-# SPDY idle timeout in milliseconds
-spdy.timeout=30000
-
-# Initial Window Size for SPDY
-#spdy.initialWindowSize=65536
diff --git a/jetty-start/src/test/resources/usecases/home/modules/ssl.mod b/jetty-start/src/test/resources/usecases/home/modules/ssl.mod
deleted file mode 100644
index 449f58104f..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/ssl.mod
+++ /dev/null
@@ -1,35 +0,0 @@
-#
-# SSL Keystore module
-#
-
-[depend]
-server
-
-[xml]
-etc/jetty-ssl.xml
-
-[files]
-http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/plain/jetty-server/src/main/config/etc/keystore|etc/keystore
-
-[ini-template]
-## SSL Keystore Configuration
-# define the port to use for secure redirection
-jetty.secure.port=8443
-
-# Setup a demonstration keystore and truststore
-jetty.keystore=etc/keystore
-jetty.truststore=etc/keystore
-
-# Set the demonstration passwords.
-# Note that OBF passwords are not secure, just protected from casual observation
-# See http://www.eclipse.org/jetty/documentation/current/configuring-security-secure-passwords.html
-jetty.keystore.password=OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4
-jetty.keymanager.password=OBF:1u2u1wml1z7s1z7a1wnl1u2g
-jetty.truststore.password=OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4
-
-# Set the client auth behavior
-# Set to true if client certificate authentication is required
-# jetty.ssl.needClientAuth=true
-# Set to true if client certificate authentication is desired
-# jetty.ssl.wantClientAuth=true
-
diff --git a/jetty-start/src/test/resources/usecases/home/modules/stats.mod b/jetty-start/src/test/resources/usecases/home/modules/stats.mod
deleted file mode 100644
index 0922469cdf..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/stats.mod
+++ /dev/null
@@ -1,9 +0,0 @@
-#
-# Stats module
-#
-
-[depend]
-server
-
-[xml]
-etc/jetty-stats.xml
diff --git a/jetty-start/src/test/resources/usecases/home/modules/webapp.mod b/jetty-start/src/test/resources/usecases/home/modules/webapp.mod
deleted file mode 100644
index f62c554555..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/webapp.mod
+++ /dev/null
@@ -1,9 +0,0 @@
-#
-# Base server
-#
-
-[depend]
-servlet
-
-[lib]
-lib/jetty-webapp-${jetty.version}.jar
diff --git a/jetty-start/src/test/resources/usecases/home/modules/websocket.mod b/jetty-start/src/test/resources/usecases/home/modules/websocket.mod
deleted file mode 100644
index f45babd886..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/websocket.mod
+++ /dev/null
@@ -1,17 +0,0 @@
-#
-# WebSocket Feature
-#
-
-# WebSocket needs Annotations feature
-[depend]
-server
-annotations
-
-# WebSocket needs websocket jars (as defined in start.config)
-[lib]
-lib/websocket/*.jar
-
-# WebSocket needs websocket configuration
-[xml]
-etc/jetty-websockets.xml
-
diff --git a/jetty-start/src/test/resources/usecases/home/modules/xinetd.mod b/jetty-start/src/test/resources/usecases/home/modules/xinetd.mod
deleted file mode 100644
index fdc1b3c7b0..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/xinetd.mod
+++ /dev/null
@@ -1,9 +0,0 @@
-#
-# Stats module
-#
-
-[depend]
-server
-
-[xml]
-etc/jetty-xinetd.xml
diff --git a/jetty-start/src/test/resources/usecases/home/modules/xml.mod b/jetty-start/src/test/resources/usecases/home/modules/xml.mod
deleted file mode 100644
index d53107a84f..0000000000
--- a/jetty-start/src/test/resources/usecases/home/modules/xml.mod
+++ /dev/null
@@ -1,10 +0,0 @@
-#
-# Jetty XML Configuration
-#
-
-[depend]
-base
-
-[lib]
-lib/jetty-xml-${jetty.version}.jar
-
diff --git a/jetty-start/src/test/resources/usecases/home/resources/.nodelete b/jetty-start/src/test/resources/usecases/home/resources/.nodelete
deleted file mode 100644
index e69de29bb2..0000000000
--- a/jetty-start/src/test/resources/usecases/home/resources/.nodelete
+++ /dev/null
diff --git a/jetty-start/src/test/resources/usecases/home/start.ini b/jetty-start/src/test/resources/usecases/home/start.ini
deleted file mode 100644
index a65a9cb002..0000000000
--- a/jetty-start/src/test/resources/usecases/home/start.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-
---module=server,http,jmx,annotations,websocket
diff --git a/jetty-start/src/test/resources/usecases/assert-enable-spdy.txt b/jetty-start/src/test/resources/usecases/http2.assert.txt
index a69eeb6dda..7510468136 100644
--- a/jetty-start/src/test/resources/usecases/assert-enable-spdy.txt
+++ b/jetty-start/src/test/resources/usecases/http2.assert.txt
@@ -1,14 +1,13 @@
# The XMLs we expect (order is important)
-XML|${jetty.home}/etc/jetty-jmx.xml
-XML|${jetty.home}/etc/protonego-alpn.xml
XML|${jetty.home}/etc/jetty.xml
XML|${jetty.home}/etc/jetty-http.xml
+XML|${jetty.home}/etc/jetty-jmx.xml
XML|${jetty.home}/etc/jetty-ssl.xml
-XML|${jetty.home}/etc/jetty-spdy.xml
+XML|${jetty.home}/etc/jetty-alpn.xml
+XML|${jetty.home}/etc/jetty-http2.xml
# The LIBs we expect (order is irrelevant)
-LIB|${jetty.home}/lib/jetty-continuation-TEST.jar
LIB|${jetty.home}/lib/jetty-http-TEST.jar
LIB|${jetty.home}/lib/jetty-io-TEST.jar
LIB|${jetty.home}/lib/jetty-jmx-TEST.jar
@@ -17,13 +16,13 @@ LIB|${jetty.home}/lib/jetty-server-TEST.jar
LIB|${jetty.home}/lib/jetty-util-TEST.jar
LIB|${jetty.home}/lib/jetty-xml-TEST.jar
LIB|${jetty.home}/lib/servlet-api-3.1.jar
-LIB|${jetty.home}/lib/spdy/spdy-client-TEST.jar
-LIB|${jetty.home}/lib/spdy/spdy-http-server-TEST.jar
-LIB|${jetty.home}/lib/spdy/spdy-http-common-TEST.jar
-LIB|${jetty.home}/lib/spdy/spdy-server-TEST.jar
-LIB|${jetty.home}/lib/spdy/spdy-core-TEST.jar
+LIB|${jetty.home}/lib/jetty-alpn-server-TEST.jar
+LIB|${jetty.home}/lib/http2/http2-common-TEST.jar
+LIB|${jetty.home}/lib/http2/http2-hpack-TEST.jar
+LIB|${jetty.home}/lib/http2/http2-server-TEST.jar
# The Properties we expect (order is irrelevant)
+# (this is the property we actually set in jetty.base)
PROP|jetty.port=9090
PROP|jetty.secure.port=8443
PROP|jetty.keystore=etc/keystore
@@ -32,12 +31,25 @@ PROP|jetty.keymanager.password=icecream
PROP|jetty.truststore=etc/keystore
PROP|jetty.truststore.password=sundae
PROP|java.version=1.7.0_60
-PROP|protonego=alpn
-PROP|spdy.port=8443
-PROP|spdy.timeout=30000
+PROP|ssl.port=8443
+PROP|ssl.timeout=30000
+# (these are the ones set by default from jetty.home modules)
+PROP|http.timeout=30000
+PROP|jetty.delayDispatchUntilContent=false
+PROP|jetty.dump.start=false
+PROP|jetty.dump.stop=false
+PROP|jetty.output.buffer.size=32768
+PROP|jetty.request.header.size=8192
+PROP|jetty.response.header.size=8192
+PROP|jetty.send.date.header=false
+PROP|jetty.send.server.version=true
+PROP|threads.max=200
+PROP|threads.min=10
+PROP|threads.timeout=60000
+
# The Downloads
-DOWNLOAD|http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/7.1.0.v20141016/alpn-boot-7.1.0.v20141016.jar|lib/alpn/alpn-boot-7.1.0.v20141016.jar
+DOWNLOAD|maven://org.mortbay.jetty.alpn/alpn-boot/7.1.0.v20141016|lib/alpn/alpn-boot-7.1.0.v20141016.jar
DOWNLOAD|http://git.eclipse.org/c/jetty/org.eclipse.jetty.project.git/plain/jetty-server/src/main/config/etc/keystore|etc/keystore
# The Bootlib
diff --git a/jetty-start/src/test/resources/usecases/base.missing.npn.version/start.ini b/jetty-start/src/test/resources/usecases/http2/start.ini
index 29159616d2..5faab28161 100644
--- a/jetty-start/src/test/resources/usecases/base.missing.npn.version/start.ini
+++ b/jetty-start/src/test/resources/usecases/http2/start.ini
@@ -1,5 +1,5 @@
---module=server,http,jmx
+--module=server,http,jmx,http2
jetty.port=9090
diff --git a/jetty-start/src/test/resources/usecases/assert-include-jetty-dir-logging.txt b/jetty-start/src/test/resources/usecases/include-jetty-dir-logging.assert.txt
index 4ecd847744..d238196059 100644
--- a/jetty-start/src/test/resources/usecases/assert-include-jetty-dir-logging.txt
+++ b/jetty-start/src/test/resources/usecases/include-jetty-dir-logging.assert.txt
@@ -1,11 +1,10 @@
# The XMLs we expect (order is important)
-XML|${jetty.home}/etc/jetty-jmx.xml
XML|${maven-test-resources}/extra-jetty-dirs/logging/etc/jetty-logging.xml
XML|${jetty.home}/etc/jetty.xml
XML|${jetty.home}/etc/jetty-http.xml
+XML|${jetty.home}/etc/jetty-jmx.xml
# The LIBs we expect (order is irrelevant)
-LIB|${jetty.home}/lib/jetty-continuation-TEST.jar
LIB|${jetty.home}/lib/jetty-http-TEST.jar
LIB|${jetty.home}/lib/jetty-io-TEST.jar
LIB|${jetty.home}/lib/jetty-jmx-TEST.jar
@@ -14,11 +13,25 @@ LIB|${jetty.home}/lib/jetty-server-TEST.jar
LIB|${jetty.home}/lib/jetty-util-TEST.jar
LIB|${jetty.home}/lib/jetty-xml-TEST.jar
LIB|${jetty.home}/lib/servlet-api-3.1.jar
-LIB|${jetty.home}/resources
+LIB|${jetty.base}/resources
LIB|${maven-test-resources}/extra-jetty-dirs/logging/lib/logging/logback.jar
# The Properties we expect (order is irrelevant)
+# (this is the property we actually set in jetty.base)
PROP|jetty.port=9090
+# (these are the ones set by default from jetty.home modules)
+PROP|http.timeout=30000
+PROP|jetty.delayDispatchUntilContent=false
+PROP|jetty.dump.start=false
+PROP|jetty.dump.stop=false
+PROP|jetty.output.buffer.size=32768
+PROP|jetty.request.header.size=8192
+PROP|jetty.response.header.size=8192
+PROP|jetty.send.date.header=false
+PROP|jetty.send.server.version=true
+PROP|threads.max=200
+PROP|threads.min=10
+PROP|threads.timeout=60000
# Files
FILE|logs/
diff --git a/jetty-start/src/test/resources/dist-home/lib/jsp/javax.servlet.jsp-api-2.3.1.jar b/jetty-start/src/test/resources/usecases/include-jetty-dir-logging/resources/some.properties
index e69de29bb2..e69de29bb2 100644
--- a/jetty-start/src/test/resources/dist-home/lib/jsp/javax.servlet.jsp-api-2.3.1.jar
+++ b/jetty-start/src/test/resources/usecases/include-jetty-dir-logging/resources/some.properties
diff --git a/jetty-start/src/test/resources/usecases/base.with.include.jetty.dirs/start.ini b/jetty-start/src/test/resources/usecases/include-jetty-dir-logging/start.ini
index 9e16be66fd..ce3bff24b1 100644
--- a/jetty-start/src/test/resources/usecases/base.with.include.jetty.dirs/start.ini
+++ b/jetty-start/src/test/resources/usecases/include-jetty-dir-logging/start.ini
@@ -1,5 +1,6 @@
--include-jetty-dir=${start.basedir}/../../extra-jetty-dirs/logging
--module=server,http,jmx
+#--module=resources
jetty.port=9090
diff --git a/jetty-start/src/test/resources/usecases/assert-missing-npn-version.txt b/jetty-start/src/test/resources/usecases/jmx.assert.txt
index 884767af89..28dea2e98b 100644
--- a/jetty-start/src/test/resources/usecases/assert-missing-npn-version.txt
+++ b/jetty-start/src/test/resources/usecases/jmx.assert.txt
@@ -1,10 +1,9 @@
# The XMLs we expect (order is important)
-XML|${jetty.home}/etc/jetty-jmx.xml
XML|${jetty.home}/etc/jetty.xml
XML|${jetty.home}/etc/jetty-http.xml
+XML|${jetty.home}/etc/jetty-jmx.xml
# The LIBs we expect (order is irrelevant)
-LIB|${jetty.home}/lib/jetty-continuation-TEST.jar
LIB|${jetty.home}/lib/jetty-http-TEST.jar
LIB|${jetty.home}/lib/jetty-io-TEST.jar
LIB|${jetty.home}/lib/jetty-jmx-TEST.jar
@@ -15,14 +14,18 @@ LIB|${jetty.home}/lib/jetty-xml-TEST.jar
LIB|${jetty.home}/lib/servlet-api-3.1.jar
# The Properties we expect (order is irrelevant)
+# (this is the property we actually set in jetty.base)
PROP|jetty.port=9090
-PROP|jetty.keystore=etc/keystore
-PROP|jetty.keystore.password=friendly
-PROP|jetty.keymanager.password=icecream
-PROP|jetty.truststore=etc/keystore
-PROP|jetty.truststore.password=sundae
-PROP|java.version=1.7.0_01
-
-# The Downloads
-
-# The Bootlib
+# (these are the ones set by default from jetty.home modules)
+PROP|http.timeout=30000
+PROP|jetty.delayDispatchUntilContent=false
+PROP|jetty.dump.start=false
+PROP|jetty.dump.stop=false
+PROP|jetty.output.buffer.size=32768
+PROP|jetty.request.header.size=8192
+PROP|jetty.response.header.size=8192
+PROP|jetty.send.date.header=false
+PROP|jetty.send.server.version=true
+PROP|threads.max=200
+PROP|threads.min=10
+PROP|threads.timeout=60000
diff --git a/jetty-start/src/test/resources/usecases/base.jmx/start.ini b/jetty-start/src/test/resources/usecases/jmx/start.ini
index d3950e6c02..d3950e6c02 100644
--- a/jetty-start/src/test/resources/usecases/base.jmx/start.ini
+++ b/jetty-start/src/test/resources/usecases/jmx/start.ini
diff --git a/jetty-start/src/test/resources/usecases/jsp.assert.txt b/jetty-start/src/test/resources/usecases/jsp.assert.txt
new file mode 100644
index 0000000000..533a51fcdf
--- /dev/null
+++ b/jetty-start/src/test/resources/usecases/jsp.assert.txt
@@ -0,0 +1,49 @@
+# The XMLs we expect (order is important)
+XML|${jetty.home}/etc/jetty.xml
+XML|${jetty.home}/etc/jetty-http.xml
+XML|${jetty.home}/etc/jetty-plus.xml
+XML|${jetty.home}/etc/jetty-annotations.xml
+
+# The LIBs we expect (order is irrelevant)
+LIB|${jetty.home}/lib/jetty-annotations-TEST.jar
+LIB|${jetty.home}/lib/annotations/asm-5.0.1.jar
+LIB|${jetty.home}/lib/annotations/asm-commons-5.0.1.jar
+LIB|${jetty.home}/lib/annotations/javax.annotation-api-1.2.jar
+LIB|${jetty.home}/lib/jetty-http-TEST.jar
+LIB|${jetty.home}/lib/jetty-io-TEST.jar
+LIB|${jetty.home}/lib/jetty-jndi-TEST.jar
+LIB|${jetty.home}/lib/jndi/javax.mail.glassfish-1.4.1.v201005082020.jar
+LIB|${jetty.home}/lib/jndi/javax.transaction-api-1.2.jar
+LIB|${jetty.home}/lib/jetty-plus-TEST.jar
+LIB|${jetty.home}/lib/jetty-schemas-3.1.jar
+LIB|${jetty.home}/lib/jetty-security-TEST.jar
+LIB|${jetty.home}/lib/jetty-server-TEST.jar
+LIB|${jetty.home}/lib/jetty-servlet-TEST.jar
+LIB|${jetty.home}/lib/jetty-util-TEST.jar
+LIB|${jetty.home}/lib/jetty-webapp-TEST.jar
+LIB|${jetty.home}/lib/jetty-xml-TEST.jar
+LIB|${jetty.home}/lib/servlet-api-3.1.jar
+LIB|${jetty.home}/lib/apache-jsp/org.eclipse.jetty.apache-jsp-TEST.jar
+LIB|${jetty.home}/lib/apache-jsp/org.eclipse.jetty.orbit.org.eclipse.jdt.core-3.8.2.v20130121.jar
+LIB|${jetty.home}/lib/apache-jsp/org.mortbay.jasper.apache-el-8.0.9.M3.jar
+LIB|${jetty.home}/lib/apache-jsp/org.mortbay.jasper.apache-jsp-8.0.9.M3.jar
+
+# The Properties we expect (order is irrelevant)
+# (these are the properties we actually set in the configuration)
+PROP|jetty.port=9090
+# (these are the ones set by default from jetty.home modules)
+PROP|http.timeout=30000
+PROP|jetty.delayDispatchUntilContent=false
+PROP|jetty.dump.start=false
+PROP|jetty.dump.stop=false
+PROP|jetty.output.buffer.size=32768
+PROP|jetty.request.header.size=8192
+PROP|jetty.response.header.size=8192
+PROP|jetty.send.date.header=false
+PROP|jetty.send.server.version=true
+PROP|threads.max=200
+PROP|threads.min=10
+PROP|threads.timeout=60000
+
+# Files / Directories to create
+# FILE|lib/
diff --git a/jetty-start/src/test/resources/usecases/base.with.jsp.default/start.ini b/jetty-start/src/test/resources/usecases/jsp/start.ini
index bf58fa82d7..bf58fa82d7 100644
--- a/jetty-start/src/test/resources/usecases/base.with.jsp.default/start.ini
+++ b/jetty-start/src/test/resources/usecases/jsp/start.ini
diff --git a/jetty-start/src/test/resources/usecases/assert-logging.txt b/jetty-start/src/test/resources/usecases/logging.assert.txt
index c83dc2c7b9..ce72b68ec4 100644
--- a/jetty-start/src/test/resources/usecases/assert-logging.txt
+++ b/jetty-start/src/test/resources/usecases/logging.assert.txt
@@ -3,7 +3,6 @@ XML|${jetty.home}/etc/jetty.xml
XML|${jetty.home}/etc/jetty-http.xml
# The LIBs we expect (order is irrelevant)
-LIB|${jetty.home}/lib/jetty-continuation-TEST.jar
LIB|${jetty.home}/lib/jetty-http-TEST.jar
LIB|${jetty.home}/lib/jetty-io-TEST.jar
LIB|${jetty.home}/lib/jetty-schemas-3.1.jar
@@ -18,8 +17,21 @@ LIB|${jetty.base}/lib/logging/logback-classic.jar
LIB|${jetty.base}/resources
# The Properties we expect (order is irrelevant)
+# (this is the property we actually set in jetty.base)
PROP|jetty.port=9090
-
+# (these are the ones set by default from jetty.home modules)
+PROP|http.timeout=30000
+PROP|jetty.delayDispatchUntilContent=false
+PROP|jetty.dump.start=false
+PROP|jetty.dump.stop=false
+PROP|jetty.output.buffer.size=32768
+PROP|jetty.request.header.size=8192
+PROP|jetty.response.header.size=8192
+PROP|jetty.send.date.header=false
+PROP|jetty.send.server.version=true
+PROP|threads.max=200
+PROP|threads.min=10
+PROP|threads.timeout=60000
# Other File References
FILE|logs/
FILE|resources/
diff --git a/jetty-start/src/test/resources/usecases/base.with.ext/lib/ext/logging/jul-to-slf4j.jar b/jetty-start/src/test/resources/usecases/logging/lib/logging/jul-to-slf4j.jar
index e69de29bb2..e69de29bb2 100644
--- a/jetty-start/src/test/resources/usecases/base.with.ext/lib/ext/logging/jul-to-slf4j.jar
+++ b/jetty-start/src/test/resources/usecases/logging/lib/logging/jul-to-slf4j.jar
diff --git a/jetty-start/src/test/resources/usecases/base.with.ext/lib/ext/logging/logback-classic.jar b/jetty-start/src/test/resources/usecases/logging/lib/logging/logback-classic.jar
index e69de29bb2..e69de29bb2 100644
--- a/jetty-start/src/test/resources/usecases/base.with.ext/lib/ext/logging/logback-classic.jar
+++ b/jetty-start/src/test/resources/usecases/logging/lib/logging/logback-classic.jar
diff --git a/jetty-start/src/test/resources/usecases/base.with.ext/lib/ext/logging/logback-core.jar b/jetty-start/src/test/resources/usecases/logging/lib/logging/logback-core.jar
index e69de29bb2..e69de29bb2 100644
--- a/jetty-start/src/test/resources/usecases/base.with.ext/lib/ext/logging/logback-core.jar
+++ b/jetty-start/src/test/resources/usecases/logging/lib/logging/logback-core.jar
diff --git a/jetty-start/src/test/resources/usecases/base.with.ext/lib/ext/logging/slf4j-api.jar b/jetty-start/src/test/resources/usecases/logging/lib/logging/slf4j-api.jar
index e69de29bb2..e69de29bb2 100644
--- a/jetty-start/src/test/resources/usecases/base.with.ext/lib/ext/logging/slf4j-api.jar
+++ b/jetty-start/src/test/resources/usecases/logging/lib/logging/slf4j-api.jar
diff --git a/jetty-start/src/test/resources/usecases/base.logging/modules/logging.mod b/jetty-start/src/test/resources/usecases/logging/modules/logging.mod
index e2d24ce645..e2d24ce645 100644
--- a/jetty-start/src/test/resources/usecases/base.logging/modules/logging.mod
+++ b/jetty-start/src/test/resources/usecases/logging/modules/logging.mod
diff --git a/jetty-start/src/test/resources/usecases/base.logging/resources/jetty-logging.properties b/jetty-start/src/test/resources/usecases/logging/resources/jetty-logging.properties
index 5cb8291a81..5cb8291a81 100644
--- a/jetty-start/src/test/resources/usecases/base.logging/resources/jetty-logging.properties
+++ b/jetty-start/src/test/resources/usecases/logging/resources/jetty-logging.properties
diff --git a/jetty-start/src/test/resources/usecases/base.logging/resources/logback.xml b/jetty-start/src/test/resources/usecases/logging/resources/logback.xml
index e69de29bb2..e69de29bb2 100644
--- a/jetty-start/src/test/resources/usecases/base.logging/resources/logback.xml
+++ b/jetty-start/src/test/resources/usecases/logging/resources/logback.xml
diff --git a/jetty-start/src/test/resources/usecases/base.logging/start.ini b/jetty-start/src/test/resources/usecases/logging/start.ini
index e18ff3dbf7..e18ff3dbf7 100644
--- a/jetty-start/src/test/resources/usecases/base.logging/start.ini
+++ b/jetty-start/src/test/resources/usecases/logging/start.ini

Back to the top