Catalina.bat能否更改环境变量?

3

我正在接手一个项目,根据另一位开发者的指示,用他的catalina.bat覆盖了我的Tomcat版本(他使用的是相同的版本)。然后我尝试重新启动Tomcat,但出现了与commons-logging.jar有关的异常,这是Tomcat的依赖项。

经过很多挫折,我只是下载了一个不同版本的Tomcat,并尝试直接运行它(没有配置)...结果我得到了相同的错误!

所以我几天前在SO上问了这个问题。共识是我的类路径某种方式变得“脏”,现在我想知道我盲目复制的catalina.bat文件是否设置了环境变量,影响了Tomcat跨版本引导的能力。

我知道这个问题与我之前提出的问题类似,但是不同。虽然我的第一个问题是“这里有什么问题”,而且更加普遍,但我现在提出的问题(虽然相关),更具体,涉及到catalina.bat和它如何与Windows 7环境变量相关联。

感谢任何帮助。

编辑:我看到这个问题已经有一个关闭投票,理由是“离题”。我的反驳如下:SO是一个用于提问与代码和编程有关的具体问题的编程问答网站。catalina.bat是一个脚本,也就是一段代码,而这个问题涉及我正在使用的脚本中可能存在的错误/缺陷。 编辑:在catalina.bat中找到了错误信息来自的那一行(同样也是Tomcat启动失败的地方)。这是从7.0.19版本中未改变的行:

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

我能够在脚本中放置echos并获取到以下值:

JAVA_OPTS = -Djava.util.logging.config.file="C:\Program Files\Apache\apache-to
mcat-7.0.19\conf\logging.properties" -Djava.util.logging.manager=org.apache.juli
.ClassLoaderLogManager
CATALINA_OPTS =
DEBUG_OPTS =
JAVA_ENDORSED_DIRS = C:\Program Files\Apache\apache-tomcat-7.0.19\endorsed
CLASSPATH = C:\Program Files\Apache\apache-tomcat-7.0.19\bin\bootstrap.jar
CATALINA_BASE = C:\Program Files\Apache\apache-tomcat-7.0.19
CATALINA_HOME = C:\Program Files\Apache\apache-tomcat-7.0.19
CATALINA_TMPDIR = C:\Program Files\Apache\apache-tomcat-7.0.19\temp
MAINCLASS is org.apache.catalina.startup.Bootstrap
CMD_LINE_ARGS =
ACTION = start

JAVA_OPTS引起了我的注意,其中包括logging.propertiesClassLoaderLogManager条目。这对任何人来说都有意义吗?!?

它将设置自己的环境变量。如果不知道您看到的错误信息,那么就无法提供帮助。 - Dave Newton
2
请检查该目录中是否有 setenv.bat 文件,它可能会影响 Java 选项。 - user330315
很好的建议 @horse 但是那个目录下没有 setenv.bat 文件。 - IAmYourFaja
@Dave - 不想在SO上放置重复的错误信息。它在我提供的链接中。 - IAmYourFaja
2个回答

2

您可以在任何批处理文件中设置环境变量,包括catalina.bat。但是这些更改仅在当前运行环境中保留,并不会影响所有其他运行环境。

对于CLASSPATH,请查看相应的批处理文件,如果您看到像set CLASSPATH=这样的内容,这将为您提供有关设置类路径的信息。


如果你在代码中只有 set CLASSPATH= 这一行,那么这意味着你的 catalina.bat 确实破坏了整个 CLASSPATH。尝试将其注释掉 (rem set CLASSPATH=),然后检查是否解决了问题。 - belgther
感谢belgther - 请查看我的第二次编辑,其中包括EXECJAVA命令的回显值。 - IAmYourFaja

1

从您在其他问题中的先前答案来看,似乎共识并不是类路径变得“脏了”。而是Tomcat设置本身已经变得混乱,因为它是几个不同Tomcat版本的混合体。

请注意,默认情况下,Tomcat不使用您的CLASSPATH值,以避免像您概述的那样的问题。您应该检查您的同事给您的文件,看看他到底在其中做了什么更改(考虑到您可以在BAT文件中编写几乎任何内容,根据您提供的描述很难确定确切的问题)。

祝你好运。


感谢您的回复Perception,但我想说的是,即使我下载了不同版本的Tomcat并直接运行startup.bat(零更改),我仍然遇到了相同的问题。环境变量是我能想到的罪魁祸首。我认为我的同事给我的catalina.bat文件干扰了我的环境变量,现在没有任何版本的Tomcat可以工作。我只是想问这是否是一个疯狂的想法。再次感谢您的反馈! - IAmYourFaja
啊,我以为你下载了一个更新的Tomcat版本并且它起作用了,是我的错。但是,你检查过环境变量了吗?检查所有的“CATALINA”变量,特别是检查是否设置了“JAVA_OPTS”。 - Perception
我没有看到JAVA_OPTS,只有JAVA_HOME。 - IAmYourFaja
尝试这两件事情 - 第一件事,完全设置您的类路径。如果您确实需要,可以将其保存在某个地方,然后在测试后恢复它。第二件事,验证JRE ext目录中没有第三方库。然后尝试启动Tomcat。 - Perception
感谢您的回复 - 我尝试了两种建议,但都没有成功。请参见我的第二次编辑,其中包含EXECJAVA命令选项的回显值。 - IAmYourFaja

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接