你可能熟悉如下使用start.jar启动jetty的方式:
java -jar start.jar [config file list]
让我们看看start.jar的工作方式和如何定制它(如果你需要的话)。
start.config文件
机制的关键是start.config文件。这个文件包含了很多设置信息,例如classpath和系统属性。默认的start.config文件在start.jar/org/mortbay/start/start.config。
当从命令行输入java -jar start.jar运行的时候, jvm查看META-INF/MANIFEST.MF文件中的入口:
Main-Class: org.mortbay.start.Main
然后激活命名类的main()方法,在这个实例中就是org.mortbay.start.Main,它依次分析start.config文件,然后激活其它命名类的main方法。当我们看例子的时候会清晰一些,但是让我们先看看start.config的语法。
语法
每行包含如下形式的记录:
SUBJECT [ [!] CONDITION [AND|OR] ]*
这里 SUBJECT:
● 以".class"结尾的是要运行的主类(Main class)。
● 以".xml"结尾的是用于命令行的配置文件。
● 以"/"结尾的是要加载的jar和zip文件的目录。
● 以"/*"结尾的是加载所有不重要的jar和zip文件的目录。
● 以"/**"结尾的是递归加载所有不重要的jar和zip文件的目录。
● "=" 用来指定系统属性。
● 所有其它条目被作为文件添加到classpath中。
● SUBJECT也可以使用$(propertyname)语法来包含系统属性。
文件以"/"开始被认为是绝对路径,所有其它的是相对于主目录(home)。
CONDITION为如下之一:
● "always" (永远为真)
● "never" (永远为假)
● "available" 类名 (真,如果类名在classpath中)
● 属性名 (如果设置了即为真)
● "java" OPERATOR version (java version compared to literal)
● nargs OPERATOR number (number of command line args compared to literal)
OPERATOR:
● 是"<",">","<=",">=","==","!="其中之一
CONTITION 可以是"AND", "OR" 或者 "!"的联合, 使用 "AND"意味着是一个条件列表。
Classpath操作计算非常快,因此一旦一个类或者jar被添加到classpath中,这个类会对后续的条件可用。
例子
下面是一个start.config文件的例子,实际上就是当前jetty发布版中的文件。
$(jetty.class.path) always
# Try different settings of jetty.home until the jetty.jar is found.
jetty.home=. ! exists $(jetty.home)/lib/jetty.jar
jetty.home=.. ! exists $(jetty.home)/lib/jetty.jar
jetty.home=/home/jetty ! exists $(jetty.home)/lib/jetty.jar
jetty.home=/C:/jetty ! exists $(jetty.home)/lib/jetty.jar
jetty.home=. ! exists $(jetty.home)/lib/jetty.jar
# The main class to run after this
org.mortbay.xml.XmlConfiguration.class
# The default configuration files if none are specified on the command line
$(jetty.home)/etc/jetty.xml nargs == 0
# javax.servlet classes
$(jetty.home)/lib/servlet-api-2.5.jar ! available javax.servlet.Servlet
# Set the jetty classpath
$(jetty.home)/lib/* always
# Set the classpath for the supporting cast
$(jetty.home)/lib/jsp-2.1/* java >= 1.5
$(jetty.home)/lib/jsp-2.0/* ! available org.apache.jasper.servlet.JspServlet
$(jetty.home)/lib/management/*
$(jetty.home)/lib/naming/*
$(jetty.home)/lib/plus/*
$(jetty.home)/lib/xbean/*
# Recursively add all jars and zips from the ext lib
$(jetty.home)/lib/ext/** always
# Try some standard locations for anything missing.
/usr/share/java/ant.jar ! available org.apache.tools.ant.Main
# Add a resources directory if it is there
$(jetty.home)/resources/
定制start.config
你有两个选择。你可以解压start.jar文件,提取start.config文件,修改完毕后重新打包start.jar文件。或者,你也可以创建自己的start.config文件,然后在命令行中指定它:
java -DSTART=/my/dir/start.config -jar start.jar
如果你仅希望改变在分析完start.config文件之后调用那个主类,那么你可以使用jetty.server属性:
java -Djetty.server=com.acme.my.Main
警告:在改变main class之前要考虑清楚。默认的配置确保了在命令行中的任何配置文件和Jetty启动是正确的。
posted @ 2008-08-02 14:17
蓉青姚 阅读(20)
评论(0) 编辑 收藏 网摘 所属分类:
SOLR