精华内容
下载资源
问答
  • tomcatclassPath

    2018-01-29 15:05:46
    在很多Apache Tomcat用户论坛,一个问题经常被提出,那就是如何配置Tomcatclasspath,使得一个web应用程序能够找到类或者jar文件,从而可以正常工作。就像许多困扰Tomcat新用户的问题一样,这个问题也很容易解决。...
    在很多Apache Tomcat用户论坛,一个问题经常被提出,那就是如何配置Tomcat的classpath,使得一个web应用程序能够找到类或者jar文件,从而可以正常工作。就像许多困扰Tomcat新用户的问题一样,这个问题也很容易解决。在这篇文章中,我们将会介绍Tomcat是如何产生和利用classpath的,然后一个一个解决大多数常见的与classpath相关的问题。
    

    为什么Classpaths给Tomcat用户带来了麻烦

    一个classpath就是一个参数,来告诉java虚拟机在哪里可以找到类和包去运行一个程序。classpath总是在程序源码外设置的,将其同程序分开可以允许java代码以一种抽象的方式来引用类和包,允许程序可以在任何系统上被配置。为什么那些很有经验的java用户,他们已经非常清楚classpath是什么了,但是在Tomcat运行程序的时候,还是会遇到这样那样的问题呢?

    可能有以下三个原因:
    1、Tomcat处理classpaths的方式与其他java程序是不同的
    2、Tomcat的版本不同,其处理classpaths的方式也可能不同
    3、Tomcat的文档和默认的配置要求以一种特定的方式来完成某些事情。如果你不遵循这种方式,那么你就会陷入麻烦之中。关于如何解决常见的classpath问题,没有信息可以提供,比如外部依赖,共享依赖或者多版本的相同依赖。

    Tomcat的Classpath如何不同于标准的Classpath

    Apache Tomcat目的是尽可能的独立,直观和自动化,为了有效的管理,标准化web应用程序的配置和部署过程,为了安全和命名控件的考虑,限制对不同库的访问。这就是为什么不使用java classpath环境变量的原因了,java的classpath是声明依赖类库默认的地方,Tomcat的start脚本忽略了这个变量,在创建Tomcat系统classloader的时候产生了自己的classpaths。

    想要理解Tomcat如何处理classpath的,看看以下Tomcat6的启动过程:
    1、java虚拟机的bootstrap loader加载java的核心类库。java虚拟机使用JAVA_HOME环境变量来定位核心库的位置。
    2、Startup.sh,使用start参数调用Catalina.sh,重写系统的classpath并加载bootstrap.jar和tomcat-juli.jar。这些资源仅对Tomcat可见。
    3、为每一个部署的Context创建Class loader,加载位于每个web应用程序WEB-INF/classes和WEB-INF/lib目录下的所有类和jar文件。每个web应用程序仅仅可见自己目录下的资源。
    4、Common class loader加载位于$CATALINA_HOME/lib目录下的所有类和jar文件,这些资源对所有应用程序和Tomcat可见。
    Tomcat的类加载机制是如何在不同版本之间变化的

    之前的Tomcat版本,其类加载机制有一些不同

    Tomcat 4.x以及更早的版本,一个server loader负责加载Catalina类,现在由commons loader负责了。
    Tomcat 5.x,一个shared loader负责加载在应用程序间共享的类,这些类位于$CATALINA_HOME/shared/lib。在Tomcat6中,这种方式被取消了。
    Tomcat 5.x也包括了一个Catalina loader,加载所有的Catalina组件,现在也被Common loader取代了。

    当你不能按照Tomcat要求的方式做事的时候,怎么办

    如果你使用Tomcat文档推荐的方式做事,你不应该有关于classpath的问题。你的wars包含了所有库和包的复本,你没有任何理由去在多个应用程序间共享一个jar文件,你不需要调用任何外在的资源,你也将不会遇到复杂的情况,例如一个web应用程序运行的时候需要一个jar文件的多个版本。但是如果你确实不能按照推荐的方式来做的时候,一个文件可以解决你所有的问题:catalina.properties。

    使用catalina.properties来配置Tomcat Classpath

    对于那些不想使用默认来加载方式的用户来说,幸运的是,Tomcat的classpath选项不是硬编码的,它们是从$CATALINA_HOME/conf/catalina.properties文件中读取的。

    这个文件包含了除bootstrap和system loader之外的所有其他的loaders,检查这个文件,你会有一些新发现:
    1、Server以及Shared loader还没有被删除,如果它们的属性没有定义,Commons loader负责处理。
    2、被各种loaders加载的类和jar文件不会被自动加载,它们只是用一个简单的通配符语法指定为一组。
    3、这里没有说你不能指定一个额外的仓库,事实上就是说你是可以的。

    server loader不应该改动,但是shared loader还是有许多有用的应用。(shared loader将会在启动过程的最后阶段加载它的类,在Commons loader之后)。现在让我们看看一些常见的问题以及如何解决。

    问题、解决方案和最佳实践

    问题:我的应用程序依赖一个外部的仓库,我不能引用它。
    让Tomcat知道一个外部的仓库,在catalina.properties文件的shared loader位置,使用正确的语法,声明这个仓库。语法基于你要配置的文件或仓库的类型:
    1、增加一个文件夹作为类仓库,使用“path/to/foldername”
    2、增加一个文件夹下的所有jar文件作为类仓库,使用"path/to/foldername/*.jar"
    3、增加单个jar文件作为类仓库,使用"file://path/to/foldername/jarname.jar"
    4、调用环境变量,使用${}格式,例如${VARIABLE_NAME}
    5、声明多个资源,用逗号分隔开
    6、所有的路径相对于CATALINA_BASE或CATALINA_HOME,或者是绝对路径

    问题:我想多个应用程序共享一个jar文件,这个jar文件在Tomcat里面。
    除了一些常见的第三方库(比如JDBC drivers),最好不要在$CATALINA_HOME/lib目录下包含额外的库,即使这样在一些情况下是可行的。应该重新创建比如/shared/lib和/shared/classes目录,然后在catalina.properties配置shared.loader属性:
    "shared/classes,shared/lib/*.jar"

    问题:除了另一个框架,我在一个应用中使用了一个嵌入式Tomcat server,当我访问框架组件的时候遇到classpath errors。
    这个问题好像超出了这篇文章的范畴,但是作为一个常见的classpath相关的问题,这里对如何引起你的错误作一个简单的介绍。
    当嵌入到包含另外核心框架(Wicket或者Spring)的应用中时,Tomcat将在启动框架的时候,使用System classloader加载核心类,而不是从应用的WEB-INF/lib目录下加载。
    java的类加载是懒加载,就是说请求某个类的第一个加载器拥有这个类剩下的生命周期。如果System classloader,它的类对web应用是不可见的,首先加载了框架相关的类,java虚拟机将会阻止来的其他实例被创建,这样就引起了classpath错误。
    解决这个问题的一种方式就是增加一个自定义的bootstrap classloader,使得这个classloader加载合适的库,然后对程序剩下部分的启动正常对待。

    问题:我使用一个标准的应用程序,程序的war包含了依赖的所有包,但是我仍然遇到类定义错误。
    这个问题可能是由许多事情引起的,包括编译或部署过程不是很正确,但是最有可能是web应用程序的目录结构不对造成的。
    java命名转换要求类名映射到存放这个类的目录结构。例如,一个类com.mycompany.mygreat.class需要被存放到目录WEB-INF/classes/com/mycompany/。
    经常代码中丢失一个点号就会引起classpath相关的问题。

    问题:我的web应用程序的不同模块需要使用同一个jar包的两个不同版本。
    这种情况常常出现在一个应用程序中使用多个web框架,这些web框架依赖一个库的不同版本。
    有几种解决方案,但是它们都和classpath不相关。我们在这里说这个问题,是因为一些用户试图在框架的jar文件中的Manifest文件中指定依赖的库的不同版本的classpath,来解决这个问题。
    这种方式在一些web应用服务器中是支持的,所以一些用户想要在Tomcat中也使用这种方式。但是在Manifest文件中指定classpath在Tomcat中是不支持的,这也不是Servlet说明的一部分。
    有以下四种方式来解决这个问题:
    1、你可以更新框架的版本,如果这里能够使得与其他框架依赖相同的版本。
    2、你可以创建两个或更多的自定义classloaders,每个jar文件一个,在WEB/INF/context.xml文件中配置,创建你所需要的两个不同版本的类的实例。
    3、你可以使用jarjar工具将框架和它依赖的库打包成一个jar文件,那么它们会一起被加载。
    4、如果你发现你每隔一天就要处理这种情况,你应该考虑使用OSGI框架,这个框架有许多方法专门就是用来处理这种一个类的多个版本需要运行在同一个java虚拟机里的情况的。

    最佳实践
    1、避免在Tomcat里使用Commons loader加载不属于Tomcat标准发布的库和包,这可能会引起兼容错误。如果你需要在多个应用程序间共享一个库或包,创建shared/lib和shared/classes目录,然后配置到catalina.properties文件的Shared loader。
    2、以上规则的一个例外就是常用的第三方共享库,例如JDBC driver。这些应该放到$CATALINA_HOME/lib目录下。
    3、可能的话,尽可能按照Tomcat的开发者推荐的方式使用Tomcat,如果你发现你不得不频繁配置classpath,你可能需要重新考虑你的开发过程了。

    展开全文
  • 理解Tomcatclasspath

    千次阅读 2016-09-01 14:37:50
    在很多Apache Tomcat用户论坛,一个问题经常被提出,那就是如何配置Tomcatclasspath,使得一个web应用程序能够找到类或者jar文件,从而可以正常工作。就像许多困扰Tomcat新用户的问题一样,这个问题也很容易解决。...
         在很多Apache Tomcat用户论坛,一个问题经常被提出,那就是如何配置Tomcat的classpath,使得一个web应用程序能够找到类或者jar文件,从而可以正常工作。就像许多困扰Tomcat新用户的问题一样,这个问题也很容易解决。在这篇文章中,我们将会介绍Tomcat是如何产生和利用classpath的,然后一个一个解决大多数常见的与classpath相关的问题。

    为什么Classpaths给Tomcat用户带来了麻烦

    一个classpath就是一个参数,来告诉java虚拟机在哪里可以找到类和包去运行一个程序。classpath总是在程序源码外设置的,将其同程序分开可以允许java代码以一种抽象的方式来引用类和包,允许程序可以在任何系统上被配置。为什么那些很有经验的java用户,他们已经非常清楚classpath是什么了,但是在Tomcat运行程序的时候,还是会遇到这样那样的问题呢?

    可能有以下三个原因:
    1、Tomcat处理classpaths的方式与其他java程序是不同的
    2、Tomcat的版本不同,其处理classpaths的方式也可能不同
    3、Tomcat的文档和默认的配置要求以一种特定的方式来完成某些事情。如果你不遵循这种方式,那么你就会陷入麻烦之中。关于如何解决常见的classpath问题,没有信息可以提供,比如外部依赖,共享依赖或者多版本的相同依赖。

    Tomcat的Classpath如何不同于标准的Classpath

    Apache Tomcat目的是尽可能的独立,直观和自动化,为了有效的管理,标准化web应用程序的配置和部署过程,为了安全和命名控件的考虑,限制对不同库的访问。这就是为什么不使用java classpath环境变量的原因了,java的classpath是声明依赖类库默认的地方,Tomcat的start脚本忽略了这个变量,在创建Tomcat系统classloader的时候产生了自己的classpaths。

    想要理解Tomcat如何处理classpath的,看看以下Tomcat6的启动过程:
    1、java虚拟机的bootstrap loader加载java的核心类库。java虚拟机使用JAVA_HOME环境变量来定位核心库的位置。
    2、Startup.sh,使用start参数调用Catalina.sh,重写系统的classpath并加载bootstrap.jar和tomcat-juli.jar。这些资源仅对Tomcat可见。
    3、为每一个部署的Context创建Class loader,加载位于每个web应用程序WEB-INF/classes和WEB-INF/lib目录下的所有类和jar文件。每个web应用程序仅仅可见自己目录下的资源。
    4、Common class loader加载位于$CATALINA_HOME/lib目录下的所有类和jar文件,这些资源对所有应用程序和Tomcat可见。
    Tomcat的类加载机制是如何在不同版本之间变化的

    之前的Tomcat版本,其类加载机制有一些不同

    Tomcat 4.x以及更早的版本,一个server loader负责加载Catalina类,现在由commons loader负责了。
    Tomcat 5.x,一个shared loader负责加载在应用程序间共享的类,这些类位于$CATALINA_HOME/shared/lib。在Tomcat6中,这种方式被取消了。
    Tomcat 5.x也包括了一个Catalina loader,加载所有的Catalina组件,现在也被Common loader取代了。

    当你不能按照Tomcat要求的方式做事的时候,怎么办

    如果你使用Tomcat文档推荐的方式做事,你不应该有关于classpath的问题。你的wars包含了所有库和包的复本,你没有任何理由去在多个应用程序间共享一个jar文件,你不需要调用任何外在的资源,你也将不会遇到复杂的情况,例如一个web应用程序运行的时候需要一个jar文件的多个版本。但是如果你确实不能按照推荐的方式来做的时候,一个文件可以解决你所有的问题:catalina.properties。

    使用catalina.properties来配置Tomcat Classpath

    对于那些不想使用默认来加载方式的用户来说,幸运的是,Tomcat的classpath选项不是硬编码的,它们是从$CATALINA_HOME/conf/catalina.properties文件中读取的。

    这个文件包含了除bootstrap和system loader之外的所有其他的loaders,检查这个文件,你会有一些新发现:
    1、Server以及Shared loader还没有被删除,如果它们的属性没有定义,Commons loader负责处理。
    2、被各种loaders加载的类和jar文件不会被自动加载,它们只是用一个简单的通配符语法指定为一组。
    3、这里没有说你不能指定一个额外的仓库,事实上就是说你是可以的。

    server loader不应该改动,但是shared loader还是有许多有用的应用。(shared loader将会在启动过程的最后阶段加载它的类,在Commons loader之后)。现在让我们看看一些常见的问题以及如何解决。

    问题、解决方案和最佳实践

    问题:我的应用程序依赖一个外部的仓库,我不能引用它。
    让Tomcat知道一个外部的仓库,在catalina.properties文件的shared loader位置,使用正确的语法,声明这个仓库。语法基于你要配置的文件或仓库的类型:
    1、增加一个文件夹作为类仓库,使用“path/to/foldername”
    2、增加一个文件夹下的所有jar文件作为类仓库,使用"path/to/foldername/*.jar"
    3、增加单个jar文件作为类仓库,使用"file://path/to/foldername/jarname.jar"
    4、调用环境变量,使用${}格式,例如${VARIABLE_NAME}
    5、声明多个资源,用逗号分隔开
    6、所有的路径相对于CATALINA_BASE或CATALINA_HOME,或者是绝对路径

    问题:我想多个应用程序共享一个jar文件,这个jar文件在Tomcat里面。
    除了一些常见的第三方库(比如JDBC drivers),最好不要在$CATALINA_HOME/lib目录下包含额外的库,即使这样在一些情况下是可行的。应该重新创建比如/shared/lib和/shared/classes目录,然后在catalina.properties配置shared.loader属性:
    "shared/classes,shared/lib/*.jar"

    问题:除了另一个框架,我在一个应用中使用了一个嵌入式Tomcat server,当我访问框架组件的时候遇到classpath errors。
    这个问题好像超出了这篇文章的范畴,但是作为一个常见的classpath相关的问题,这里对如何引起你的错误作一个简单的介绍。
    当嵌入到包含另外核心框架(Wicket或者Spring)的应用中时,Tomcat将在启动框架的时候,使用System classloader加载核心类,而不是从应用的WEB-INF/lib目录下加载。
    java的类加载是懒加载,就是说请求某个类的第一个加载器拥有这个类剩下的生命周期。如果System classloader,它的类对web应用是不可见的,首先加载了框架相关的类,java虚拟机将会阻止来的其他实例被创建,这样就引起了classpath错误。
    解决这个问题的一种方式就是增加一个自定义的bootstrap classloader,使得这个classloader加载合适的库,然后对程序剩下部分的启动正常对待。

    问题:我使用一个标准的应用程序,程序的war包含了依赖的所有包,但是我仍然遇到类定义错误。
    这个问题可能是由许多事情引起的,包括编译或部署过程不是很正确,但是最有可能是web应用程序的目录结构不对造成的。
    java命名转换要求类名映射到存放这个类的目录结构。例如,一个类com.mycompany.mygreat.class需要被存放到目录WEB-INF/classes/com/mycompany/。
    经常代码中丢失一个点号就会引起classpath相关的问题。

    问题:我的web应用程序的不同模块需要使用同一个jar包的两个不同版本。
    这种情况常常出现在一个应用程序中使用多个web框架,这些web框架依赖一个库的不同版本。
    有几种解决方案,但是它们都和classpath不相关。我们在这里说这个问题,是因为一些用户试图在框架的jar文件中的Manifest文件中指定依赖的库的不同版本的classpath,来解决这个问题。
    这种方式在一些web应用服务器中是支持的,所以一些用户想要在Tomcat中也使用这种方式。但是在Manifest文件中指定classpath在Tomcat中是不支持的,这也不是Servlet说明的一部分。
    有以下四种方式来解决这个问题:
    1、你可以更新框架的版本,如果这里能够使得与其他框架依赖相同的版本。
    2、你可以创建两个或更多的自定义classloaders,每个jar文件一个,在WEB/INF/context.xml文件中配置,创建你所需要的两个不同版本的类的实例。
    3、你可以使用jarjar工具将框架和它依赖的库打包成一个jar文件,那么它们会一起被加载。
    4、如果你发现你每隔一天就要处理这种情况,你应该考虑使用OSGI框架,这个框架有许多方法专门就是用来处理这种一个类的多个版本需要运行在同一个java虚拟机里的情况的。

    最佳实践
    1、避免在Tomcat里使用Commons loader加载不属于Tomcat标准发布的库和包,这可能会引起兼容错误。如果你需要在多个应用程序间共享一个库或包,创建shared/lib和shared/classes目录,然后配置到catalina.properties文件的Shared loader。
    2、以上规则的一个例外就是常用的第三方共享库,例如JDBC driver。这些应该放到$CATALINA_HOME/lib目录下。
    3、可能的话,尽可能按照Tomcat的开发者推荐的方式使用Tomcat,如果你发现你不得不频繁配置classpath,你可能需要重新考虑你的开发过程了。


    展开全文
  • 在开发JavaWeb应用时,为了实现配置分离,我们有时候需要在CLASSPATH中设置的配置文件的路径。但是在使用Intellij idea时发现发现设置的CLASSPATH不生效。尝试过的方法:1.在intellij idea 项目中的module中添加2.在...

    在开发JavaWeb应用时,为了实现配置分离,我们有时候需要在CLASSPATH中设置的配置文件的路径。

    但是在使用Intellij idea时发现发现设置的CLASSPATH不生效。

    尝试过的方法:

    1.在intellij idea 项目中的module中添加

    2.在Windows --我的电脑--属性--高级系统变量里设置CLASSPATH

    都没有效果!

    找了许久的原因,偶然发现原来创建Tomcat server时 指定的是 自己的tomcat版本;所以在intellij idea启动时加载的CLASSPATH时,是加载本地的tomcat中的CLASSPATH;而本地的CLASSPATH又是catalina.bat中设置的。所以我们需要更改intellij IDEA使用的本地的Catalina.bat 或者Catania.sh 文件

    修改前--intellij idea output:

    :\apache\apache-tomcat-7.0.84\bin\catalina.bat run
    [2018-03-30 06:58:40,011] Artifact boss:war exploded: Waiting for server connection to start artifact deployment...
    Using CATALINA_BASE:   "C:\Users\mingj\.IntelliJIdea2017.3\system\tomcat\Unnamed_pay_2"
    Using CATALINA_HOME:   "D:\apache\apache-tomcat-7.0.84"
    Using CATALINA_TMPDIR: "D:\apache\apache-tomcat-7.0.84\temp"
    Using JRE_HOME:        "D:\Program Files\Java\jdk1.7.0_80"
    Using CLASSPATH:       "D:\apache\apache-tomcat-7.0.84\bin\bootstrap.jar;D:\apache\apache-tomcat-7.0.84\bin\tomcat-juli.jar"
    Connected to the target VM, address: '127.0.0.1:57543', transport: 'socket'
    2018-03-30 18:58:41 JRebel: Contacting myJRebel server ..

    修改后--intellij idea output:

    D:\apache\apache-tomcat-7.0.84\bin\catalina.bat run
    [2018-03-30 06:58:40,011] Artifact boss:war exploded: Waiting for server connection to start artifact deployment...
    Using CATALINA_BASE:   "C:\Users\mingj\.IntelliJIdea2017.3\system\tomcat\Unnamed_pay_2"
    Using CATALINA_HOME:   "D:\apache\apache-tomcat-7.0.84"
    Using CATALINA_TMPDIR: "D:\apache\apache-tomcat-7.0.84\temp"
    Using JRE_HOME:        "D:\Program Files\Java\jdk1.7.0_80"
    Using CLASSPATH:       "D:\apache\apache-tomcat-7.0.84\bin\bootstrap.jar ;d:\pay_conf/;D:\apache\apache-tomcat-7.0.84\bin\tomcat-juli.jar"
    Connected to the target VM, address: '127.0.0.1:57543', transport: 'socket'
    2018-03-30 18:58:41 JRebel: Contacting myJRebel server ..;d:\pay_conf/;D:\apache\apache-tomcat-7.0.84\bin\tomcat-juli.jar"
    Connected to the target VM, address: '127.0.0.1:57543', transport: 'socket'
    2018-03-30 18:58:41 JRebel: Contacting myJRebel server ..

     

    观察catalina.bat,发现catalina设置CLASSPATH时会先找setenv.bat(属于用户自定义属性文件) 然后再找setclasspath.bat(属于java environment属性文件),我们直接在这两者的后面(加粗标红处)添加我们定义的属性可以了。

     

    set CLASSPATH=
    
    
    rem Get standard environment variables
    if not exist "%CATALINA_BASE%\bin\setenv.bat" goto checkSetenvHome
    call "%CATALINA_BASE%\bin\setenv.bat"
    goto setenvDone
    :checkSetenvHome
    if exist "%CATALINA_HOME%\bin\setenv.bat" call "%CATALINA_HOME%\bin\setenv.bat"
    :setenvDone
    
    
    rem Get standard Java environment variables
    if exist "%CATALINA_HOME%\bin\setclasspath.bat" goto okSetclasspath
    echo Cannot find "%CATALINA_HOME%\bin\setclasspath.bat"
    echo This file is needed to run this program
    goto end
    :okSetclasspath
    call "%CATALINA_HOME%\bin\setclasspath.bat" %1
    if errorlevel 1 goto end
    
    
    rem Add on extra jar file to CLASSPATH
    rem Note that there are no quotes as we do not want to introduce random
    rem quotes into the CLASSPATH
    if "%CLASSPATH%" == "" goto emptyClasspath
    set "CLASSPATH=%CLASSPATH%;"
    :emptyClasspath
    set "CLASSPATH=%CLASSPATH%%CATALINA_HOME%\bin\bootstrap.jar"
    
    rem 设置自定义属性文件
    set "CLASSPATH=%CLASSPATH% ;d:\pay_conf\ "
    
    
    if not "%CATALINA_TMPDIR%" == "" goto gotTmpdir
    set "CATALINA_TMPDIR=%CATALINA_BASE%\temp"
    :gotTmpdir
    set "CLASSPATH=%CLASSPATH% ;d:\pay_conf\ "
    
    
    if not "%CATALINA_TMPDIR%" == "" goto gotTmpdir
    set "CATALINA_TMPDIR=%CATALINA_BASE%\temp"
    :gotTmpdir
    

    这样,如果在系统中有通过class.getClassLoader().getResourceAsStream(resource)直接就能读取到配置文件了。

    当使用spring加载配置文件时需要注意的是:我们通常使用PropertyPlaceholderConfigurer加载配置文件,这个地方需要设置 来指引spring 去系统的环境变量里面寻找相同名称的配置文件,才能找得到。

    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />

    具体配置如下:

    	<bean id="propertyConfigurer"
    		  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    		<property name="ignoreResourceNotFound" value="true"/>
    		<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
    		<property name="locations">
    			<list>
    				<value>classpath:system.properties</value>
    				<value>classpath:redis.properties</value>
    			</list>
    		</property>
    	</bean>

     

    bingo!

     

    展开全文
  • java tomcat 设置classpath 配置文件分离

    千次阅读 2014-09-16 10:13:47
    set "CLASSPATH=%CLASSPATH%%CATALINA_BASE%\bin\tomcat-juli.jar;%CATALINA_HOME%\bin\bootstrap.jar" goto juliClasspathDone :juliClasspathHome set "CLASSPATH=%CLASSPATH%%CATALINA_HOME%\bin\bootstrap...
    @echo off
    rem Licensed to the Apache Software Foundation (ASF) under one or more
    rem contributor license agreements.  See the NOTICE file distributed with
    rem this work for additional information regarding copyright ownership.
    rem The ASF licenses this file to You under the Apache License, Version 2.0
    rem (the "License"); you may not use this file except in compliance with
    rem the License.  You may obtain a copy of the License at
    rem
    rem     http://www.apache.org/licenses/LICENSE-2.0
    rem
    rem Unless required by applicable law or agreed to in writing, software
    rem distributed under the License is distributed on an "AS IS" BASIS,
    rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    rem See the License for the specific language governing permissions and
    rem limitations under the License.


    if "%OS%" == "Windows_NT" setlocal
    rem ---------------------------------------------------------------------------
    rem Start/Stop Script for the CATALINA Server
    rem
    rem Environment Variable Prerequisites
    rem
    rem   CATALINA_HOME   May point at your Catalina "build" directory.
    rem
    rem   CATALINA_BASE   (Optional) Base directory for resolving dynamic portions
    rem                   of a Catalina installation.  If not present, resolves to
    rem                   the same directory that CATALINA_HOME points to.
    rem
    rem   CATALINA_OPTS   (Optional) Java runtime options used when the "start",
    rem                   or "run" command is executed.
    rem
    rem   CATALINA_TMPDIR (Optional) Directory path location of temporary directory
    rem                   the JVM should use (java.io.tmpdir).  Defaults to
    rem                   %CATALINA_BASE%\temp.
    rem
    rem   JAVA_HOME       Must point at your Java Development Kit installation.
    rem                   Required to run the with the "debug" argument.
    rem
    rem   JRE_HOME        Must point at your Java Runtime installation.
    rem                   Defaults to JAVA_HOME if empty.
    rem
    rem   JAVA_OPTS       (Optional) Java runtime options used when the "start",
    rem                   "stop", or "run" command is executed.
    rem
    rem   JAVA_ENDORSED_DIRS (Optional) Lists of of semi-colon separated directories
    rem                   containing some jars in order to allow replacement of APIs 
    rem                   created outside of the JCP (i.e. DOM and SAX from W3C). 
    rem                   It can also be used to update the XML parser implementation.
    rem                   Defaults to $CATALINA_HOME/endorsed.
    rem
    rem   JPDA_TRANSPORT  (Optional) JPDA transport used when the "jpda start"
    rem                   command is executed. The default is "dt_socket".
    rem
    rem   JPDA_ADDRESS    (Optional) Java runtime options used when the "jpda start"
    rem                   command is executed. The default is 8000.
    rem
    rem   JPDA_SUSPEND    (Optional) Java runtime options used when the "jpda start"
    rem                   command is executed. Specifies whether JVM should suspend
    rem                   execution immediately after startup. Default is "n".
    rem
    rem   JPDA_OPTS       (Optional) Java runtime options used when the "jpda start"
    rem                   command is executed. If used, JPDA_TRANSPORT, JPDA_ADDRESS,
    rem                   and JPDA_SUSPEND are ignored. Thus, all required jpda
    rem                   options MUST be specified. The default is:
    rem
    rem                   -agentlib:jdwp=transport=%JPDA_TRANSPORT%,
    rem                       address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND%
    rem
    rem   LOGGING_CONFIG  (Optional) Override Tomcat's logging config file
    rem                   Example (all one line)
    rem                   set LOGGING_CONFIG="-Djava.util.logging.config.file=%CATALINA_BASE%\conf\logging.properties"
    rem
    rem   LOGGING_MANAGER (Optional) Override Tomcat's logging manager 
    rem                   Example (all one line)
    rem                   set LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
    rem
    rem   TITLE           (Optional) Specify the title of Tomcat window. The default
    rem                   TITLE is Tomcat if it's not specified.
    rem                   Example (all one line)
    rem                   set TITLE=Tomcat.Cluster#1.Server#1 [%DATE% %TIME%]
    rem
    rem
    rem
    rem $Id: catalina.bat 1040547 2010-11-30 14:47:49Z markt $
    rem ---------------------------------------------------------------------------


    rem Guess CATALINA_HOME if not defined
    set "CURRENT_DIR=%cd%"
    if not "%CATALINA_HOME%" == "" goto gotHome
    set "CATALINA_HOME=%CURRENT_DIR%"
    if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
    cd ..
    set "CATALINA_HOME=%cd%"
    cd "%CURRENT_DIR%"
    :gotHome
    if exist "%CATALINA_HOME%\bin\catalina.bat" goto okHome
    echo The CATALINA_HOME environment variable is not defined correctly
    echo This environment variable is needed to run this program
    goto end
    :okHome


    rem Ensure that any user defined CLASSPATH variables are not used on startup,
    rem but allow them to be specified in setenv.bat, in rare case when it is needed.
    set CLASSPATH=


    rem Get standard environment variables
    if "%CATALINA_BASE%" == "" goto gotSetenvHome
    if exist "%CATALINA_BASE%\bin\setenv.bat" call "%CATALINA_BASE%\bin\setenv.bat"
    goto gotSetenvBase
    :gotSetenvHome
    if exist "%CATALINA_HOME%\bin\setenv.bat" call "%CATALINA_HOME%\bin\setenv.bat"
    :gotSetenvBase


    rem Get standard Java environment variables
    if exist "%CATALINA_HOME%\bin\setclasspath.bat" goto okSetclasspath
    echo Cannot find "%CATALINA_HOME%\bin\setclasspath.bat"
    echo This file is needed to run this program
    goto end
    :okSetclasspath
    set "BASEDIR=%CATALINA_HOME%"
    call "%CATALINA_HOME%\bin\setclasspath.bat" %1
    if errorlevel 1 goto end


    if not "%CATALINA_BASE%" == "" goto gotBase
    set "CATALINA_BASE=%CATALINA_HOME%"
    :gotBase


    if not "%CATALINA_TMPDIR%" == "" goto gotTmpdir
    set "CATALINA_TMPDIR=%CATALINA_BASE%\temp"
    :gotTmpdir


    rem Add tomcat-juli.jar and bootstrap.jar to classpath
    rem tomcat-juli.jar can be over-ridden per instance
    rem Note that there are no quotes as we do not want to introduce random
    rem quotes into the CLASSPATH
    if "%CLASSPATH%" == "" goto emptyClasspath
    set "CLASSPATH=%CLASSPATH%;"
    :emptyClasspath
    if "%CATALINA_BASE%" == "%CATALINA_HOME%" goto juliClasspathHome
    if not exist "%CATALINA_BASE%\bin\tomcat-juli.jar" goto juliClasspathHome
    set "CLASSPATH=%CLASSPATH%%CATALINA_BASE%\bin\tomcat-juli.jar;%CATALINA_HOME%\bin\bootstrap.jar"
    goto juliClasspathDone
    :juliClasspathHome
    set "CLASSPATH=%CLASSPATH%%CATALINA_HOME%\bin\bootstrap.jar"
    :juliClasspathDone


    if not "%LOGGING_CONFIG%" == "" goto noJuliConfig
    set LOGGING_CONFIG=-Dnop
    if not exist "%CATALINA_BASE%\conf\logging.properties" goto noJuliConfig
    set LOGGING_CONFIG=-Djava.util.logging.config.file="%CATALINA_BASE%\conf\logging.properties"
    :noJuliConfig
    set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG%


    if not "%LOGGING_MANAGER%" == "" goto noJuliManager
    set LOGGING_MANAGER=-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
    :noJuliManager
    set JAVA_OPTS=%JAVA_OPTS% %LOGGING_MANAGER% -Dopencms.config=D:\work\OpenCMS\config\ -Dsearch.config=D:\work\OpenCMS\config\ -Dsolr.solr.home=D:\work\OpenCMS\nfsc\index-home -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=9520


    rem ----- Execute The Requested Command ---------------------------------------


    echo Using CATALINA_BASE:   "%CATALINA_BASE%"
    echo Using CATALINA_HOME:   "%CATALINA_HOME%"
    echo Using CATALINA_TMPDIR: "%CATALINA_TMPDIR%"
    if ""%1"" == ""debug"" goto use_jdk
    echo Using JRE_HOME:        "%JRE_HOME%"
    goto java_dir_displayed
    :use_jdk
    echo Using JAVA_HOME:       "%JAVA_HOME%"
    :java_dir_displayed
    set CLASSPATH=D:\work\OpenCMS\config;%CLASSPATH%;
    echo Using CLASSPATH:       "%CLASSPATH%"


    set _EXECJAVA=%_RUNJAVA%
    set MAINCLASS=org.apache.catalina.startup.Bootstrap
    set ACTION=start
    set SECURITY_POLICY_FILE=
    set DEBUG_OPTS=
    set JPDA=


    if not ""%1"" == ""jpda"" goto noJpda
    set JPDA=jpda
    if not "%JPDA_TRANSPORT%" == "" goto gotJpdaTransport
    set JPDA_TRANSPORT=dt_socket
    :gotJpdaTransport
    if not "%JPDA_ADDRESS%" == "" goto gotJpdaAddress
    set JPDA_ADDRESS=8000
    :gotJpdaAddress
    if not "%JPDA_SUSPEND%" == "" goto gotJpdaSuspend
    set JPDA_SUSPEND=n
    :gotJpdaSuspend
    if not "%JPDA_OPTS%" == "" goto gotJpdaOpts
    set JPDA_OPTS=-agentlib:jdwp=transport=%JPDA_TRANSPORT%,address=%JPDA_ADDRESS%,server=y,suspend=%JPDA_SUSPEND%
    :gotJpdaOpts
    shift
    :noJpda


    if ""%1"" == ""debug"" goto doDebug
    if ""%1"" == ""run"" goto doRun
    if ""%1"" == ""start"" goto doStart
    if ""%1"" == ""stop"" goto doStop
    if ""%1"" == ""version"" goto doVersion


    echo Usage:  catalina ( commands ... )
    echo commands:
    echo   debug             Start Catalina in a debugger
    echo   debug -security   Debug Catalina with a security manager
    echo   jpda start        Start Catalina under JPDA debugger
    echo   run               Start Catalina in the current window
    echo   run -security     Start in the current window with security manager
    echo   start             Start Catalina in a separate window
    echo   start -security   Start in a separate window with security manager
    echo   stop              Stop Catalina
    echo   version           What version of tomcat are you running?
    goto end


    :doDebug
    shift
    set _EXECJAVA=%_RUNJDB%
    set DEBUG_OPTS=-sourcepath "%CATALINA_HOME%\..\..\java"
    if not ""%1"" == ""-security"" goto execCmd
    shift
    echo Using Security Manager
    set "SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy"
    goto execCmd


    :doRun
    shift
    if not ""%1"" == ""-security"" goto execCmd
    shift
    echo Using Security Manager
    set "SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy"
    goto execCmd


    :doStart
    shift
    if not "%OS%" == "Windows_NT" goto noTitle
    if "%TITLE%" == "" set TITLE=Tomcat
    set _EXECJAVA=start "%TITLE%" %_RUNJAVA%
    goto gotTitle
    :noTitle
    set _EXECJAVA=start %_RUNJAVA%
    :gotTitle
    if not ""%1"" == ""-security"" goto execCmd
    shift
    echo Using Security Manager
    set "SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy"
    goto execCmd


    :doStop
    shift
    set ACTION=stop
    set CATALINA_OPTS=
    goto execCmd


    :doVersion
    %_EXECJAVA% -classpath "%CATALINA_HOME%\lib\catalina.jar" org.apache.catalina.util.ServerInfo
    goto end




    :execCmd
    rem Get remaining unshifted command line arguments and save them in the
    set CMD_LINE_ARGS=
    :setArgs
    if ""%1""=="""" goto doneSetArgs
    set CMD_LINE_ARGS=%CMD_LINE_ARGS% %1
    shift
    goto setArgs
    :doneSetArgs


    rem Execute Java with the applicable properties
    if not "%JPDA%" == "" goto doJpda
    if not "%SECURITY_POLICY_FILE%" == "" goto doSecurity
    %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
    goto end
    :doSecurity
    %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
    goto end
    :doJpda
    if not "%SECURITY_POLICY_FILE%" == "" goto doSecurityJpda
    %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %JPDA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
    goto end
    :doSecurityJpda
    %_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %JPDA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Djava.security.manager -Djava.security.policy=="%SECURITY_POLICY_FILE%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION%
    goto end


    :end
    展开全文
  • 在很多Apache Tomcat用户论坛,一个问题经常被提出,那就是如何配置Tomcatclasspath,使得一个web应用程序能够找到类或者jar文件,从而可以正常工作。就像许多困扰Tomcat新用户的问题一样,这个问题也很容易解决。...
  • Tomcat配置文件setclasspath.bat详解

    千次阅读 2018-02-27 16:24:01
    tomcat启动调用文件顺序:startup.bat-&gt;catalia.bat-&gt;setclasspath.bat setclasspath.bat内容如下 @echo off rem Licensed to the Apache Software Foundation (ASF) under one or more rem ...
  • 在很多Apache Tomcat用户论坛,一个问题经常被提出,那就是如何配置Tomcatclasspath,使得一个web应用程序能够找到类或者jar文件,从而可以正常工作。就像许多困扰Tomcat新用户的问题一样,这个问题也很容易解决。...
  • tomcat 自定义classpath(亲自测试)

    千次阅读 2016-12-25 19:54:00
    因为一直以来使用tomcat和weblogic作为应用服务器为主,最近在升级新中间件的过程中遇到一个问题,我们的web前端应用现在升级是进行全量包升级的,因为现在的系统架构为前端和后端通过rpc框架交互的,后端使用java ...
  • java配置jdk配置tomcat配置 所有关于java的配置 path classpath配置都在
  • tomcat配置

    2012-11-06 11:50:43
    tomcat配置 因为要开始做网站开发,想用jsp做开发,所以需要tomcat。今天对tomcat进行了配置,刚开始没配置之前觉得这个可能很复杂,但其实很简单。 之前装了jdk6.0,而且也配置了classpath环境,因此这次配置...
  • SSH配置问题,错误很明显,就是hibernate的配置文件有问题,位置不对。查看applicationContext.xml文件,其初始配置如下(example): ./user.hbm.xml ./User.hbm.xml于是我去查找这个文件的位置,发现在做完...
  • Tomcat 配置文件

    2017-11-19 17:46:00
    Tomcat 站点配置1、bin目录下 1、catalina tomcat 主脚本、执行Java命令调用tomcat的启动与停止 2、cpappend 用于windows系统内部,将项目路径追加至tomcatclasspath 环境变量中 3、digest 生成tomcat密码...
  • Tomcat 配置

    2015-08-26 22:04:18
    1.新建Tomcat_Home: XXX/Tomcat2.CLASSPATH加入一句%Tomcat_Home%\lib\...如果是把java项目部署到服务器,只需在Tomcat配置文件的 host节点内加入:<Context path="/hello" docBase="C:/Users/XX/IdeaProjects/fi
  • Tomcat配置

    2020-10-25 21:05:45
    安装Tomcat(提前请先安装JDK) 1.下载好压缩包后,直接解压至某一目录下,目录中不能包含中文。解压后如图所示: 2.将此文件夹拷贝到你常用...4.在Classpath中最后添加%TOMCAT_HOME%\lib\servlet-api.jar; 在Path中最前
  • tomcat 配置

    2018-11-13 14:58:00
    tomcat安装配置下载 解压设置环境变量必须先设置jdk环境1:setclasspath.batset JRE_HOME=C:\Program Files\Java\jre1.8.0_181set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_181 2:系统配置环境变量 查看安装: ...
  • jdk配置 tomcat配置

    2014-03-11 10:54:54
    1,下载jdk,安装 2,配置JAVA_HOME(jdk),path,classpath,等环境变量 3,下载tomcat,Eclipse的Tomcat插件 4,配置TOMCAT_HOME,配置path...5,测试JDK配置(java -version),测试Tomcat配置(http://localhost:8080) 6

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,663
精华内容 1,065
关键字:

tomcat配置classpath