Java 类在运行时找不到,但在编译时使用命令行找到

Java 类在运行时找不到,但在编译时使用命令行找到,java,android,command-line,classpath,noclassdeffounderror,Java,Android,Command Line,Classpath,Noclassdeffounderror,我知道我的源代码在eclipse中编译得很好,但为了反复使用同一个源代码更容易生产,我选择设置一个.bat来为我处理大部分工作。我的外部jar很短很好用,在编译时不可用,但在运行时不可用,我会收到force closes(Android classnotfounddereror)。我确信问题在于如何在我的.bat文件上设置我的命令,在阅读了网站(我将在最后列出我使用的一组引用)之后,我找到了这段代码 echo on @REM %1 NOTUSED @REM %2 SHORT NAME (DIR

我知道我的源代码在eclipse中编译得很好,但为了反复使用同一个源代码更容易生产,我选择设置一个.bat来为我处理大部分工作。我的外部jar很短很好用,在编译时不可用,但在运行时不可用,我会收到force closes(Android classnotfounddereror)。我确信问题在于如何在我的.bat文件上设置我的命令,在阅读了网站(我将在最后列出我使用的一组引用)之后,我找到了这段代码

echo on
@REM %1 NOTUSED
@REM %2 SHORT NAME (DIR HIERARCHY POINTER)
@REM %3 SRCPATH (RECEIVES PACKAGE PATH)
@SET PREV_PATH=%CD%
@cd /d %0\..

@rmdir %2\bin /S /Q
@rmdir %2\gen /S /Q
@mkdir %2\bin || goto EXIT
@mkdir %2\gen || goto EXIT
@SET APP_NAME=%2
@SET ANDROID_REV=android-7

@SET ANDROID_AAPT_ADD="%ANDROID-SDK%\platform-tools\aapt.exe" add

@SET ANDROID_AAPT_PACK="%ANDROID-SDK%\platform-tools\aapt.exe" package -v -f -I "%ANDROID-SDK%\platforms\%ANDROID_REV%\android.jar" -j ".\usrsrc\libs\MobileSDK.jar" -j ".\usrsrc\libs\MobileSDK2.jar"

@SET ANDROID_DX="%ANDROID-SDK%\platform-tools\dx.bat" --dex

@SET JAVAC="%JAVABIN%\javac.exe" -classpath ".\%2;%ANDROID-SDK%\platforms\%ANDROID_REV%\android.jar;%2\libs\MobileSDK.jar;%2\libs\MobileSDK2.jar"

@SET JAVAC_BUILD=%JAVAC% -sourcepath "%2\src;%2\gen" -d "%2\bin" -jar "%2\libs\MobileSDK.jar;%2\libs\MobileSDK2.jar"

call %ANDROID_AAPT_PACK% -M "%2\AndroidManifest.xml" -A "%2\assets" -S "%2\res" -m -J "%2\gen" -F "%2\bin\resources.ap_" -j "%2\libs\MobileSDK.jar" -j "%2\libs\MobileSDK2.jar" || goto EXIT

call %JAVAC_BUILD% %2%3*.java || goto EXIT

call %ANDROID_DX% --output="%CD%\%2\bin\classes.dex" %CD%\%2\bin || goto EXIT

copy "%CD%\%2\bin\resources.ap_" "%CD%\%2\bin\%APP_NAME%.ap_" || goto EXIT

call %ANDROID_AAPT_ADD% "%CD%\%2\bin\%APP_NAME%.ap_" "%CD%\%2\bin\classes.dex" || goto EXIT

call "%JAVABIN%\jarsigner" -keystore "%CD%\keystore.keystore" -storepass "XXXXXXXXXX" - keypass "XXXXXXXX" -signedjar "%CD%\%2\%APP_NAME%.apk" "%CD%\%2\bin\%APP_NAME%.ap_" "XXXXXXXXX" || goto EXIT
del "%2\bin\%APP_NAME%.ap_"
:EXIT
cd "%PREV_PATH%"
ENDLOCAL
pause
exit /b %ERRORLEVEL%
现在我知道,每当有人告诉我答案是多么显而易见的时候,我会觉得自己真的很愚蠢。但我已经做这件事24小时了,我再也受不了了。我将非常感谢任何帮助

仅供参考:输入这个bat的大多数变量都来自另一个程序,该程序在我们进入.bat之前设置了文件层次结构和其他所有内容。关于这个问题,我只能这样描述了

参考资料:


以及所有关于外部jar的堆栈溢出问题;
还有一些;我现在找不到会像我一样更新的东西。

因为不像有些人;我确实想提供帮助,以前也收到过隐藏在堆栈溢出中的答案。过去,我在研究答案后回来,因为我在堆栈溢出中多次看到这个问题,但没有人给出正确的答案:

“您必须在dx.bat内显式调用外部JAR”

对于他们来说,在编译期间是显而易见的,并且拥有可供编译器使用的类,以避免由于缺少更好的术语而抛出错误。

将它们包含在dx.bat中,并告诉它在将这些.jar压缩到APK中时将其与所有.class文件一起包含。但我希望这对将来的人有所帮助。

我只能说。。。这是一种多么可怕的方式。了解ApacheAnt,我同意。你应该问问自己为什么要这样做,然后解决这个问题。放弃这糟糕的批量工作,帮你保持理智。这是甲骨文所写的:)是的,谢谢,你们两个都为我提供了常识,谢谢。我已经研究过蚂蚁和其他东西了。出于个人原因,我想尝试通过命令行来实现这一点;但是,是的,我很喜欢被质问。
call %ANDROID_DX% --output="%CD%\%2\bin\classes.dex" "%CD%\%2\bin" "C:\<dir>\mobileSDK.jar" "C:\<dir>\MobileSDK2.jar" || goto EXIT
@SET ANDROID_AAPT_PACK="%ANDROID-SDK%\platform-tools\aapt.exe" package -v -f -I "%ANDROID-SDK%\platforms\%ANDROID_REV%\android.jar" -j ".\usrsrc\libs\MobileSDK.jar" -j ".\usrsrc\libs\MobileSDK2.jar"