-
tomcat的classPath
2018-01-29 15:05:46在很多Apache Tomcat用户论坛,一个问题经常被提出,那就是如何配置Tomcat的classpath,使得一个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如何不同于标准的ClasspathApache 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,你可能需要重新考虑你的开发过程了。 -
理解Tomcat的classpath
2016-09-01 14:37:50在很多Apache Tomcat用户论坛,一个问题经常被提出,那就是如何配置Tomcat的classpath,使得一个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如何不同于标准的ClasspathApache 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,你可能需要重新考虑你的开发过程了。Reference:http://www.mulesoft.com/tomcat-classpath。 -
Intellij IDEA Tomcat设置CLASSPATH 不生效 配置分离实现
2018-03-30 19:56:07在开发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:47set "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 -
理解Tomcat的Classpath-常见问题以及如何解决
2016-03-10 11:17:00在很多Apache Tomcat用户论坛,一个问题经常被提出,那就是如何配置Tomcat的classpath,使得一个web应用程序能够找到类或者jar文件,从而可以正常工作。就像许多困扰Tomcat新用户的问题一样,这个问题也很容易解决。... -
Tomcat配置文件setclasspath.bat详解
2018-02-27 16:24:01tomcat启动调用文件顺序:startup.bat->catalia.bat->setclasspath.bat setclasspath.bat内容如下 @echo off rem Licensed to the Apache Software Foundation (ASF) under one or more rem ... -
[转载]理解Tomcat的Classpath-常见问题以及如何解决
2012-04-30 16:29:48在很多Apache Tomcat用户论坛,一个问题经常被提出,那就是如何配置Tomcat的classpath,使得一个web应用程序能够找到类或者jar文件,从而可以正常工作。就像许多困扰Tomcat新用户的问题一样,这个问题也很容易解决。... -
tomcat 自定义classpath(亲自测试)
2016-12-25 19:54:00因为一直以来使用tomcat和weblogic作为应用服务器为主,最近在升级新中间件的过程中遇到一个问题,我们的web前端应用现在升级是进行全量包升级的,因为现在的系统架构为前端和后端通过rpc框架交互的,后端使用java ... -
java配置jdk配置tomcat配置
2019-04-12 20:14:26java配置jdk配置tomcat配置 所有关于java的配置 path classpath配置都在 -
tomcat配置
2012-11-06 11:50:43tomcat配置 因为要开始做网站开发,想用jsp做开发,所以需要tomcat。今天对tomcat进行了配置,刚开始没配置之前觉得这个可能很复杂,但其实很简单。 之前装了jdk6.0,而且也配置了classpath环境,因此这次配置... -
[Tomcat] classpath resource [hbm.xml] cannot be opened because it does not exist
2015-05-28 09:42:21SSH配置问题,错误很明显,就是hibernate的配置文件有问题,位置不对。查看applicationContext.xml文件,其初始配置如下(example): ./user.hbm.xml ./User.hbm.xml于是我去查找这个文件的位置,发现在做完... -
Tomcat 配置文件
2017-11-19 17:46:00Tomcat 站点配置1、bin目录下 1、catalina tomcat 主脚本、执行Java命令调用tomcat的启动与停止 2、cpappend 用于windows系统内部,将项目路径追加至tomcat的classpath 环境变量中 3、digest 生成tomcat密码... -
Tomcat 配置
2015-08-26 22:04:181.新建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:00tomcat安装配置下载 解压设置环境变量必须先设置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:541,下载jdk,安装 2,配置JAVA_HOME(jdk),path,classpath,等环境变量 3,下载tomcat,Eclipse的Tomcat插件 4,配置TOMCAT_HOME,配置path...5,测试JDK配置(java -version),测试Tomcat配置(http://localhost:8080) 6