| // ======================================================================== |
| // Copyright (c) 1995-2017 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. |
| // ======================================================================== |
| |
| [[startup-classpath]] |
| === Managing Server Classpath |
| |
| Jetty Server Classpath is determined by a combination of factors. |
| |
| The java.class.path System Property:: |
| If you start Jetty with a JVM specified classpath, then Jetty will use the java.class.path System Property to populate the initial classpath. |
| Module specified Libraries:: |
| The module system declares various libraries that are required for that module to operate. |
| These module defined libraries are added to the Jetty Server classpath when any module is activated with library declarations. |
| Command Line Libraries:: |
| The command line option `--lib=<path>` can be used as a final means to add arbitrary entries to the Jetty Server classpath. |
| |
| Of special note, there are 2 structural modules defined to ease some of this for you. |
| |
| --module=ext:: |
| The `ext` module will enable the `lib/ext/*.jar` logic. |
| + |
| If this module is activated, then all jar files found in the lib/ext/ paths will be automatically added to the Jetty Server Classpath. |
| --module=resources:: |
| The `resources` module will add the `resources/` directory the classpath. |
| + |
| If you have 3rd party libraries that lookup resources from the classpath, put your files in here. |
| + |
| Logging libraries often have classpath lookup of their configuration files (eg: `log4j.properties`, `log4j.xml`, `logging.properties`, and `logback.xml`), so this would be the ideal setup for this sort of configuration demand. |
| |
| ____ |
| [NOTE] |
| Both the `ext` and `resources` modules declare relative paths that follow link:#base-vs-home-resolution[Jetty Base and Jetty Home path resolution rules]. |
| ____ |
| |
| ==== Interrogating the Server Classpath |
| |
| The Jetty `start.jar` has the ability to resolve the classpath from the command line, modules and configuration, and to list the classpath entries it will use to start jetty. |
| |
| The `--list-classpath` command line option is used as such. |
| |
| (Demonstrated with the link:#demo-base[demo-base from the Jetty Distribution]) |
| |
| [source, screen, subs="{sub-order}"] |
| .... |
| [demo-base]$ java -jar $JETTY_HOME/start.jar --list-classpath |
| |
| Jetty Server Classpath: |
| ----------------------- |
| Version Information on 42 entries in the classpath. |
| Note: order presented here is how they would appear on the classpath. |
| changes to the --module=name command line options will be reflected here. |
| 0: {VERSION} | ${jetty.home}/lib/jetty-client-{VERSION}.jar |
| 1: 1.4.1.v201005082020 | ${jetty.base}/lib/ext/javax.mail.glassfish-1.4.1.v201005082020.jar |
| 2: {VERSION} | ${jetty.base}/lib/ext/test-mock-resources-{VERSION}.jar |
| 3: (dir) | ${jetty.home}/resources |
| 4: 3.1.0 | ${jetty.home}/lib/servlet-api-3.1.jar |
| 5: 3.1.RC0 | ${jetty.home}/lib/jetty-schemas-3.1.jar |
| 6: {VERSION} | ${jetty.home}/lib/jetty-http-{VERSION}.jar |
| 7: {VERSION} | ${jetty.home}/lib/jetty-continuation-{VERSION}.jar |
| 8: {VERSION} | ${jetty.home}/lib/jetty-server-{VERSION}.jar |
| 9: {VERSION} | ${jetty.home}/lib/jetty-xml-{VERSION}.jar |
| 10: {VERSION} | ${jetty.home}/lib/jetty-util-{VERSION}.jar |
| 11: {VERSION} | ${jetty.home}/lib/jetty-io-{VERSION}.jar |
| 12: {VERSION} | ${jetty.home}/lib/jetty-jaas-{VERSION}.jar |
| 13: {VERSION} | ${jetty.home}/lib/jetty-jndi-{VERSION}.jar |
| 14: 1.1.0.v201105071233 | ${jetty.home}/lib/jndi/javax.activation-1.1.0.v201105071233.jar |
| 15: 1.4.1.v201005082020 | ${jetty.home}/lib/jndi/javax.mail.glassfish-1.4.1.v201005082020.jar |
| 16: 1.2 | ${jetty.home}/lib/jndi/javax.transaction-api-1.2.jar |
| 17: {VERSION} | ${jetty.home}/lib/jetty-rewrite-{VERSION}.jar |
| 18: {VERSION} | ${jetty.home}/lib/jetty-security-{VERSION}.jar |
| 19: {VERSION} | ${jetty.home}/lib/jetty-servlet-{VERSION}.jar |
| 20: 3.0.0 | ${jetty.home}/lib/jsp/javax.el-3.0.0.jar |
| 21: 1.2.0.v201105211821 | ${jetty.home}/lib/jsp/javax.servlet.jsp.jstl-1.2.0.v201105211821.jar |
| 22: 2.3.2 | ${jetty.home}/lib/jsp/javax.servlet.jsp-2.3.2.jar |
| 23: 2.3.1 | ${jetty.home}/lib/jsp/javax.servlet.jsp-api-2.3.1.jar |
| 24: 2.3.3 | ${jetty.home}/lib/jsp/jetty-jsp-jdt-2.3.3.jar |
| 25: 1.2.0.v201112081803 | ${jetty.home}/lib/jsp/org.apache.taglibs.standard.glassfish-1.2.0.v201112081803.jar |
| 26: 3.8.2.v20130121-145325 | ${jetty.home}/lib/jsp/org.eclipse.jdt.core-3.8.2.v20130121.jar |
| 27: {VERSION} | ${jetty.home}/lib/jetty-plus-{VERSION}.jar |
| 28: {VERSION} | ${jetty.home}/lib/jetty-webapp-{VERSION}.jar |
| 29: {VERSION} | ${jetty.home}/lib/jetty-annotations-{VERSION}.jar |
| 30: 4.1 | ${jetty.home}/lib/annotations/asm-4.1.jar |
| 31: 4.1 | ${jetty.home}/lib/annotations/asm-commons-4.1.jar |
| 32: 1.2 | ${jetty.home}/lib/annotations/javax.annotation-api-1.2.jar |
| 33: {VERSION} | ${jetty.home}/lib/jetty-deploy-{VERSION}.jar |
| 34: 1.0 | ${jetty.home}/lib/websocket/javax.websocket-api-1.0.jar |
| 35: {VERSION} | ${jetty.home}/lib/websocket/javax-websocket-client-impl-{VERSION}.jar |
| 36: {VERSION} | ${jetty.home}/lib/websocket/javax-websocket-server-impl-{VERSION}.jar |
| 37: {VERSION} | ${jetty.home}/lib/websocket/websocket-api-{VERSION}.jar |
| 38: {VERSION} | ${jetty.home}/lib/websocket/websocket-client-{VERSION}.jar |
| 39: {VERSION} | ${jetty.home}/lib/websocket/websocket-common-{VERSION}.jar |
| 40: {VERSION} | ${jetty.home}/lib/websocket/websocket-server-{VERSION}.jar |
| 41: {VERSION} | ${jetty.home}/lib/websocket/websocket-servlet-{VERSION}.jar |
| .... |
| |
| Of note is that an attempt is made to list the internally declared version of each artifact on the Server Classpath, which can potentially help when diagnosing classpath issues. |