发表于: 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
评论