嗨,我一直在使用IDE,但現在我需要從命令行運行和編譯。使用Java中的命令行編譯多個軟件包
問題是我有多個包,我試圖找到答案,但沒有任何工作。
所以我
src/
Support/ (.java files)
Me/ (.java files)
Wrapers/ (.java files)
你知道如何編譯用javac一切嗎?
嗨,我一直在使用IDE,但現在我需要從命令行運行和編譯。使用Java中的命令行編譯多個軟件包
問題是我有多個包,我試圖找到答案,但沒有任何工作。
所以我
src/
Support/ (.java files)
Me/ (.java files)
Wrapers/ (.java files)
你知道如何編譯用javac一切嗎?
這應該做它(可能需要通過-cp
命令行開關的其他路徑元素):
javac Support/*.java Me/*.java Wrapers/*.java
但是,如果你的構建過程變得更加複雜(它會!),你應該考慮使用Apache Ant用於構建自動化。
如果你真的只是需要使用javac和標準UNIX命令,你可以這樣:
find src -name \*.java -print0 | xargs -0 javac -d classes
在許多情況下,螞蟻是矯枉過正。如果你使用的是windows或shell腳本(sh文件),只要使用BAT文件即可。您可以創建一個包含所有javac命令的文本文件,並在您想構建時運行該文件。
例如,我用下面的bat文件來構建我的應用程序之一:
@echo off
echo Building Shazaam...
del classes\com\aepryus\shazaam\*.* /q
del classes\com\aepryus\shazaam\engine\*.* /q
del classes\com\aepryus\shazaam\domain\*.* /q
del classes\com\aepryus\shazaam\persist\*.* /q
del classes\com\aepryus\shazaam\view\*.* /q
del classes\com\aepryus\shazaam\task\*.* /q
del classes\com\aepryus\shazaam\action\*.* /q
del classes\com\aepryus\shazaam\controller\*.* /q
javac src\com\aepryus\shazaam\*.java -classpath \lib\AepUtil.jar;\lib\AepXML.jar;\lib\AepLoom.jar; -d classes
javac src\com\aepryus\shazaam\engine\*.java -classpath \lib\AepUtil.jar;\lib\AepXML.jar;\lib\AepLoom.jar;\lib\Sprout.jar;classes; -d classes
javac src\com\aepryus\shazaam\domain\*.java -classpath \lib\AepUtil.jar;\lib\AepLoom.jar;\lib\Sprout.jar;classes; -d classes
javac src\com\aepryus\shazaam\persist\*.java -classpath \lib\AepUtil.jar;\lib\AepLoom.jar;\lib\Sprout.jar;classes; -d classes
javac src\com\aepryus\shazaam\view\*.java -classpath \lib\Servlet.jar;\lib\AepUtil.jar;\lib\AepXML.jar;\lib\AepLoom.jar;\lib\AepHTML.jar;\lib\Sprout.jar;classes; -d classes
javac src\com\aepryus\shazaam\task\*.java -classpath \lib\AepUtil.jar;\lib\AepLoom.jar;\lib\AepHTML.jar;\lib\Sprout.jar;classes; -d classes
javac src\com\aepryus\shazaam\action\*.java -classpath \lib\Servlet.jar;\lib\AepUtil.jar;\lib\AepLoom.jar;\lib\AepHTML.jar;\lib\Sprout.jar;classes; -d classes
javac src\com\aepryus\shazaam\controller\*.java -classpath \lib\Servlet.jar;\lib\AepUtil.jar;\lib\AepXML.jar;\lib\AepRPC.jar;\lib\AepLoom.jar;\lib\AepHTML.jar;\lib\Sprout.jar;classes; -d classes
cd classes
jar cf ..\war\WEB-INF\lib\Shazaam.jar .
cd..
echo Complete
如果你重構一個包或者添加一個新的包,你每次都必須觸摸這個文件?有一個http://skillsmatter.com/podcast/java-jee/zen-and-the-art-of-build-script-maintenance的手錶,如果你需要說服... – 2010-08-18 13:56:45
不知道別人。但是在項目過程中,我需要修改這樣一個批處理文件的次數是微乎其微的。毫無疑問,Maven和Ant是有保證的;但我沒有遇到過它們。有時爲了殺死一隻蒼蠅,一把關槍不是必要的(也不是核彈) – aepryus 2010-08-18 14:10:05
真正的答案是javac的-d -sourcepath(其中類建立和安裝的地方)(來源包的根目錄)-cp(依賴關係的類路徑,它可以再次成爲構建和保存類的類文件夾)Java文件的全限定名稱。
實施例的javac -d類-sourcepath SRC -cp類SRC \ COM \測試\ FirstSample.java
的FirstSample.java包含的主要方法。 Pacjage結構如下所述。
之前編譯
HomeApp
--src
------ COM \測試\ FirstSample.java(使用FirstPojo.java第一個樣品)
------ COM \測試\ FirstPojo.java
--classes
編譯
HomeApp
--src 後------ com \ test \ FirstSample.java(FirstSample.java使用FirstPojo。JAVA)
------ COM \測試\ FirstPojo.java
--classes
------ COM \測試\ FirstSample.class(FirstSample.class使用FirstPojo.class)
- ----- com \ test \ FirstPojo.class
+1 - 對於一個外部最少的項目依賴,Ant比(例如)Maven更簡單。他的IDE甚至可以生成一個初始的「build.xml」文件。 – 2010-08-18 13:39:33
謝謝我試過這個,它編譯所有東西,但它不會生成類結構,所以當我嘗試運行我的主要它說:「」main「java.lang.NoClassDefFoundError:Wrapper/java」 – Altober 2010-08-18 13:46:56
@Altober:'java'工具期望*類名*,而不是文件名,特別是不是源文件名。你可能需要做一些事情,比如'java wrapers.wrapper',假設你在一個包中有一個類「Wrapper」「Wrapers」 – 2010-08-18 13:50:06