无法在java中找到或加载主类

时间:2014-02-15 08:22:53

标签: java batch-file main

以下是为运行at& t ARO数据分析器而编写的批处理文件。

@setlocal

if "%JAVA_HOME%" == "" goto noJavaHome
if not exist "%JAVA_HOME%\bin\java.exe" goto noJavaHome
if "%_JAVA%" == "" set _JAVA=%JAVA_HOME%\bin\java.exe
goto run

:noJavaHome
if "%_JAVA%" == "" set _JAVA=java.exe

:run
"%_JAVA%" -cp "%~dp0..\lib\*" -Xms100m -Xmx1024m com.att.aro.main.Launch 

“lib”目录包含几个可执行jar文件。当我运行上面的批处理文件时,我收到如下错误。

   Error: Could not find or load main class D:\Industrial Training\ARO-master\ARODa
taAnalyzer\bin\..\lib\ddmlib.jar

应用程序主要入口点位于com.att.aro.main.Launch。该类包含在lib目录中的jar文件名ARO.jar中。但是由于某种原因,java无法找到这个类。这里出了什么问题?

注意:当我按如下方式编辑批处理文件的最后一行时,应用程序运行时没有任何错误。

"%_JAVA%" -cp "%~dp0..\lib\*; \classes\*" -Xms100m -Xmx1024m com.att.aro.main.Launch 

1 个答案:

答案 0 :(得分:0)

-cp选项不符合您的想法。您认为它包含该lib文件夹中的所有jar文件,但事实并非如此。如果你把\ lib放在你的类路径上,那么它所在的任何类都会被加载(这就是为什么当你把/ classes目录放在它里面时,它可以工作。那里有一个com /目录,等等到类)。这对JAR文件不起作用。

您需要在脚本中执行的操作是列出要包含的所有jar文件,并在for循环中将它们逐个添加到类路径中。这有点奇怪,但我怀疑它与确保你得到你要求的东西有关,而不是错误地加载你不想要的一些JAR文件。

Windows上的这些内容:

setLocal EnableDelayedExpansion
set CLASSPATH="
for /R %~dp0..\lib %%j in (*.jar) do (
  set CLASSPATH=!CLASSPATH!;%%j
)
set CLASSPATH=!CLASSPATH!"
echo !CLASSPATH!

如果您不想太疯狂,可以使用此选项:

-Djava.ext.dirs=%~dp0..\lib

让JVM全力以赴。当然,它只适用于您的应用程序尚未需要该属性的其他内容。我不熟悉ARO。