2014-02-15 41 views
0

以下是一個批處理文件,用於運行& t ARO數據分析器。無法在java中找到或加載主類

@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 
+0

如果目錄名稱中沒有空白,會發生什麼情況? –

+0

您是否要求我更改目錄名稱工業培訓? – DesirePRG

+0

我試過了,它沒有工作 – DesirePRG

回答

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。

+2

從http://docs.oracle.com/javase/6/docs/technotes/tools/windows/java.html:「作爲一種特殊的便利,一個類路徑元素包含*的基名稱被認爲相當於指定擴展名爲.jar或.JAR的目錄中所有文件的列表「 –

相關問題