start.jar机制一瞥

你可能熟悉如下使用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

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
Google站内搜索

相关文章:

相关链接:


 
http://www.520.hb.cn
http://www.520.ha.cn
http://www.520.hl.cn
www.diidii.com
www.badaotang.com