Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在java中找到或加载主类_Java_Batch File_Main - Fatal编程技术网

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

无法在java中找到或加载主类,java,batch-file,main,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

以下是为运行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 

-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不太熟悉。

From:“为了方便起见,一个包含basename*的类路径元素被认为等同于指定一个扩展名为.jar或.jar的目录中所有文件的列表”如果您的目录名中不再有空白,会发生什么情况?您是在要求我更改目录名Industrial training吗?我尝试过,但没有效果