发表于: 2016-10-21 21:58:01

0 2482


今天完成的事情:继续写接口,来了很多新的需求,希望app的逻辑不要在修改了。

遇到的问题:

1.

setclasspath文件干了点啥

if not "%JAVA_HOME%" == "" goto gotJdkHome 如果JAVA_HOME不为空去gotJdkHome节点,怪不得配置java环境

变量要叫JAVA_HOME,这估计是业界默认,从以前流传下来的吧。

if not "%JRE_HOME%" == "" goto gotJreHome 如果JRE_HOME不为空去gotJreHome节点,如果出现启动startup.bat

闪退的情况,通过在startup.bat文件中设置JAVA_HOME和JRE_HOME就可以解决

echo Neither the JAVA_HOME nor the JRE_HOME environment variable is defined 打印JAVA_HOME和JRE_HOME

都没有定义

echo At least one of these environment variable is needed to run this program 打印运行此程序需要这两

个环境变量中的至少一个

goto exit 去exit节点


:gotJreHome

if not exist "%JRE_HOME%\bin\java.exe" goto noJavaHome 如果jre目录中没有存在java.exe文件去noJavaHome节点

if not exist "%JRE_HOME%\bin\javaw.exe" goto noJavaHome 如果jre目录中没有存在javaw.exe文件去noJavaHome节点

if not ""%1"" == ""debug"" goto okJavaHome 如果第一个传进来的第一个参数不是debug就去okJavaHome节点

echo JAVA_HOME should point to a JDK in order to run in debug mode. 打印 JAVA_HOME应指向jdk为了能够

在debug模式下运行

goto exit 去exit节点


:gotJdkHome

if not exist "%JAVA_HOME%\bin\java.exe" 

if not exist "%JAVA_HOME%\bin\javaw.exe" goto noJavaHome

if not exist "%JAVA_HOME%\bin\jdb.exe" goto noJavaHome

if not exist "%JAVA_HOME%\bin\javac.exe" goto noJavaHome

if not "%JRE_HOME%" == "" goto okJavaHome

set "JRE_HOME=%JAVA_HOME%" 给JRE_HOME变量赋值,

goto okJavaHome 去okJavaHome节点


goto noJavaHome 如果java目录下没有java.exe或者javaw.exe或者jdb.exe或者javac.exe就去noJavaHome节点,

如果JRE_HOME不为空就去okJavaHome节点 ,

java.exe:Java解释器,直接从类文件执行Java应用程序代码;

javaw.exe:和java.exe一样二者都是Java的虚拟机,用来执行Java程序

与java.exe的区别

区别:javaw.exe运行程序时不会输出控制台信息,如果是双击打开jar文件的话(假设已经设置好了打开方式),

那么根本就不会出现控制台窗口,主要用来运行带窗体的应用程序,其中的“w”就是window的意思,


所以用它来运行控制台程序时虽不会报错,但不会输出任何结果。而java.exe无论运行控制台程序,

还是运行窗体程序都没有任何问题。

jdb.exe:Java调试器,可以逐行地执行程序、设置断点和检查变量;

Javac.exe:Java编译器,将Java源代码换成字节代;


其他的java程序

javadoc.exe:根据Java源代码及其说明语句生成的HTML文档;使用这个可以通过注释生成说明文档

另外的java程序没有接触过


:noJavaHome

echo The JAVA_HOME environment variable is not defined correctly 打印没有正确定义JAVA_HOME环境变量

echo This environment variable is needed to run this program 运行这个程序需要这个环境变量

echo NB: JAVA_HOME should point to a JDK not a JRE JAVA_HOME应指向jdk或者jre

goto exit 去exit节点


:okJavaHome

if not "%BASEDIR%" == "" goto gotBasedir 如果BASEDIR不为空去gotBastedir节点,这里BASEDIR的值

是CATALINA_HOME环境变量的值

echo The BASEDIR environment variable is not defined 打印 BASEDIR环境变量没有定义

echo This environment variable is needed to run this program 打印 运行这个项目需要这个环境变量

goto exit 


:gotBasedir

if exist "%BASEDIR%\bin\setclasspath.bat" goto okBasedir 如果存在这个文件去okBasedir节点

echo The BASEDIR environment variable is not defined correctly 打印 BASEDIR环境变量没有被正确定义

echo This environment variable is needed to run this program 打印 运行这个项目需要这个环境变量

goto exit


:okBasedir


if not "%JAVA_ENDORSED_DIRS%" == "" goto gotEndorseddir 如果 JAVA_ENDORSED_DIRS不为空去

gotEndorseddir节点

set "JAVA_ENDORSED_DIRS=%BASEDIR%\endorsed" 给JAVA_ENDORSED_DIRS变量赋值


:gotEndorseddir 

set _RUNJAVA="%JRE_HOME%\bin\java" 给变量赋值

set _RUNJDB="%JAVA_HOME%\bin\jdb"

goto end 去end节点


下面是 exit节点

exit /b 1 返回1,证明程序出错,setclasspath.bat返回1,catalina.bat文件就会直接去end节点

end节点

exit /b 0 返回0,证明程序成功执行


然后就是139行,


if "%CLASSPATH%" == "" goto emptyClasspath 如果CLASSPATH 为空去emptyClasspath节点

set "CLASSPATH=%CLASSPATH%;" 给变量赋值


:emptyClasspath

set "CLASSPATH=%CLASSPATH%%CATALINA_HOME%\bin\bootstrap.jar" 给变量赋值

if not "%CATALINA_BASE%" == "" goto gotBase 如果CATALINA_BASE环境变量不为空去gotBase节点 

set "CATALINA_BASE=%CATALINA_HOME%" 给变量赋值


:gotBase

if not "%CATALINA_TMPDIR%" == "" goto gotTmpdir 如果CATALINA_TMPDIR不为空去 gotTmpdir节点

set "CATALINA_TMPDIR=%CATALINA_BASE%\temp" 给变量赋值


:gotTmpdir

if not exist "%CATALINA_BASE%\bin\tomcat-juli.jar" goto juliClasspathHome 如果不存在tomcat-juli.jar

去juliClasspathHome节点

set "CLASSPATH=%CLASSPATH%;%CATALINA_BASE%\bin\tomcat-juli.jar" 给变量赋值

goto juliClasspathDone 去juliClasspathDone节点


:gotTmpdir

if not exist "%CATALINA_BASE%\bin\tomcat-juli.jar" goto juliClasspathHome  文件不存在就去

juliClasspathHome节点

set "CLASSPATH=%CLASSPATH%;%CATALINA_BASE%\bin\tomcat-juli.jar" 给变量添加值

goto juliClasspathDone 去juliClasspathHome节点


:juliClasspathHome

set "CLASSPATH=%CLASSPATH%;%CATALINA_HOME%\bin\tomcat-juli.jar"给变量添加值


http://www.cnblogs.com/fantiantian/p/3623740.html

blog的解释下面的设置都是关于log的选项

: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%


后面是关键部分


echo Using CATALINA_BASE:   "%CATALINA_BASE%" 输出设置的内容,这里CATALINA_BASE 一般为空在catalina.bat

 122行设置 然后在148行设置为CATALINA_HOME一样的值

echo Using CATALINA_HOME:   "%CATALINA_HOME%" CATALINA_HOME 是 catalina.bat文件的目录,

D:\install\开发环境\apache-tomcat-8.0.33 也就是进入到tomcat文件下  在startup.bat文件27行设置

echo Using CATALINA_TMPDIR: "%CATALINA_TMPDIR%"  在152行设置为 D:\install\开发环境

\apache-tomcat-8.0.33\temp 目录

if ""%1"" == ""debug"" goto use_jdk 如果执行catalina.bat文件时传入的第一个参数是debug时,去use_jdk节点

echo Using JRE_HOME:        "%JRE_HOME%" 打印JRE_HOME环境变量

goto java_dir_displayed 去java_dir_displayed

:use_jdk

echo Using JAVA_HOME:       "%JAVA_HOME%"

:java_dir_displayed

echo Using CLASSPATH:       "%CLASSPATH%" 打印CLASSPATH环境变量


set _EXECJAVA=%_RUNJAVA% 这里的值是"%JRE_HOME%\bin\java"

set MAINCLASS=org.apache.catalina.startup.Bootstrap 这里指的是bootstrap.jar中的一个类

set ACTION=start 

set SECURITY_POLICY_FILE=

set DEBUG_OPTS=

set JPDA=


if not ""%1"" == ""jpda"" goto noJpda 这里配置的是关于jpda的内容,jpda是Java 平台调试体系结构的缩写,

通过 JPDA 提供的 API,开发人员可以方便灵活的搭建 Java 调试应用程序,

http://www.ibm.com/developerworks/cn/java/j-lo-jpda1/放一个链接,先挖个坑

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 咱们使用的一般是start,去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%   这里的值是"%JAVA_HOME%\bin\jdb"

set DEBUG_OPTS=-sourcepath "%CATALINA_HOME%\..\..\java"

if not ""%1"" == ""-security"" goto execCmd 如果指定参数"-security",那么就需要加载安全策略文件,

安全策略文件为%CATALINA_BASE%\conf\catalina.policy,里面涉及到一些权限的设置。这里挖个坑。

shift

echo Using Security Manager

set "SECURITY_POLICY_FILE=%CATALINA_BASE%\conf\catalina.policy"

goto execCmd 最终执行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 一般使用doStart节点 如果%OS%环境变量不是Windows_NT,那么不设置标题,直接判断是否需要加

载安全配置文件,如果%OS%环境变量的值为Windows_NT,那么设置Title变量,如果没有指定Title变量,默认


值为Tomcat,设置完_EXECJAVA变量以后,执行execCmd节点的脚本。

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 主要设置一下ACTION变量

shift

set ACTION=stop

set CATALINA_OPTS=

goto execCmd


:doVersion  就是调用了一下"%CATALINA_HOME%\lib\catalina.jar"中的

org.apache.catalina.util.ServerInfo方法

%_EXECJAVA% -classpath "%CATALINA_HOME%\lib\catalina.jar" org.apache.catalina.util.ServerInfo

goto end



:execCmd 重点  循环读出参数中的内容追加到CMD_LINE_ARGS变量中

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  没有设置JPDA

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


%_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% 


这种启动方式是没有jdpa和SECURITY_POLICY_FILE的启动。


这种模式的%_EXECJAVA%=start "Tomcat" 


"%JRE_HOME%\bin\java.exe";


%JAVA_OPTS%是line174~184对日志的处理;


CATALINA_OPTS="";


%DEBUG_OPTS%="";



%JAVA_ENDORSED_DIRS%在setclasspath.bat设置为%CATALINA_HOME%\endorsed;


%CLASSPATH%是拼接了bootstrap.jar和tomcat-juli.jar俩个jar包的绝对路径;


%MAINCLASS%="org.apache.catalina.startup.Bootstrap"是bootstrap.jar的要启动的main方法所在类;


%CMD_LINE_ARGS%是catalina.bat启动时传入参数拼接而成(从第三个参数开始拼接,因为doStart节点的line263

和line267有2处shift)

一般为空;


%ACTION%=start。简言,就是启动了bootstrap.jar,main方法是org.apache.catalina.startup.Bootstrap,

参数肯定会有一个start(如果有其他参数,这个会在最后)。




: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_L


INE_ARGS% %ACTION%

goto end


:end



返回列表 返回列表
评论

    分享到