2010-08-18 15 views
9

Merhaba, bir IDE kullanıyordum ama şimdi komut satırından çalıştırıp derlemem gerekiyor. Sorun şu ki, birden fazla paketim var ve cevabı bulmaya çalıştım ama hiçbir şey işe yaramadı.Java'da komut satırını kullanarak birden fazla paket derlemek

yüzden

src/ 
    Support/ (.java files) 
    Me/ (.java files) 
    Wrapers/ (.java files) 

sen javactır ile herşeyi derlemek için nasıl biliyor musunuz var?

cevap

6

Bu yapmalıdır: Proje (@Michael önerdiği gibi) yerine uygun sınıf yolunda olan, derlemek için aşağıdaki satırı kullanabilirsiniz çok karmaşık değil ilk aşamalarında

, o ( -cp komut satırı anahtarı aracılığıyla ek sınıf yolu elemanlarını gerektirebilir):

javac Support/*.java Me/*.java Wrapers/*.java 

Ama derleme işlemi (! ve olacak), sen Apache Ant kullanarak içine bakmak gerekir daha karmaşık alırsa yapı otomasyonu için.

+2

+ 1'i kullanmanıza engel olmaz - Ekstra harici bir proje için Bağımlılıklar, Karınca (örneğin) Maven daha basittir. IDE'si bir ilk "build.xml" dosyası bile oluşturabilir. –

+0

Bunu denedim, her şeyi derler ama ana yapıyı çalıştırmaya çalıştığımda bu sınıf yapısını oluşturmaz "ana" diyor java.lang.NoClassDefFoundError: Wrapper/java " – Altober

+1

@Altober:" java "aracı * sınıf adlarını * bekler, dosya adlarını ve özellikle kaynak dosya isimlerini değil. Muhtemelen bir paket "Sarmalayıcılar" içinde bir sınıf "Sarıcı" var varsayarak "java Wrapers.Wrapper" gibi bir şey yapmanız gerekir –

8

Bu tür görevler için Maven veya Ant gibi derleme araçlarını kullanmalısınız.

javac Support/*.java Me/*.java Wrapers/*.java

+0

evet, sorun şu ki, bunu harici bir sunucuda yapmam gerekiyor ve ben de herhangi bir eki yükleyemiyorum. – Altober

+0

Ant/maven kodunu, kodunuzu sakladığınız aynı dosya sisteminde çözebilirsiniz, "yüklemeniz" gerekmez, bu nedenle bu, –

6
javac -d compiled $(find src -name *.java) 
+0

teşekkürler denedim ama "yasadışı değişken isimler" alıyorum neden olduğunu biliyor musun. Teşekkürler – Altober

+0

Belki de '-sourcepath src' gerekir. (veya classpath'in bir parçası olarak 'src' dizinini belirtmeniz gerekir) –

+0

Snippet'imi netbeans projemde denedim ve çalışıyor: – auraham

2

Eğer gerçekten sadece javac kullanmak gerekir ve standart UNIX bu için elinden komutları ise:

find src -name \*.java -print0 | xargs -0 javac -d classes 
0

Birçok durumda Ant overkill. Eğer linux iseniz windows ya da kabuk betiğini (sh dosyası) kullanıyorsanız sadece bir BAT dosyası kullanın. Tüm javac komutlarınızı içeren bir metin dosyası oluşturabilir ve sadece bu dosyayı oluşturmak istediğinizde çalıştırabilirsiniz. arasında

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

Bir paketi yeniden düzenlerseniz veya yeni bir paket eklerseniz, her seferinde bu dosyaya dokunmanız gerekir? Eğer ikna ihtiyacınız varsa http://skillsmatter.com/podcast/java-jee/zen-and-the-art-of-build-script-maintenance bir göz atın ... –

+2

Başkaları hakkında fikir yok. Fakat bir proje boyunca, böyle bir toplu iş dosyasını değiştirmem gereken zamanların miktarı, eğer küçükse, küçüktür. Maven ve Karınca'nın garanti altına alındığı kuşkusu yoktur; ama ben bunlarla karşılaşmadım. Bazen bir sineği öldürmek için, bir kepenk gerekli değildir (ne de bir nükleer silah) – aepryus

0

gerçek cevabı Javac -d olan -sourcepath (sınıflar inşa ve yerleştirilmek için yerler) (kaynak:

Örneğin, benim uygulamalardan birini inşa etmek şu bat dosyası kullanmak java dosyasının tam özellikli adı -cp (sınıfların oluşturulduğu ve saklandığı sınıflar klasörü olabilir bağımlılıkların sınıf yolu).

Ör Javac test \ FirstSample.java \ -sourcepath src cp sınıfları \ com src

FirstSample.java ana yöntemi içeren sınıfları -d. Aşağıda belirtilen pasaj yapısı.


HomeApp
--src
------ com \ test \ FirstSample.java (FirstPojo.java kullanarak ilk örnek)
------ com \ derlemeden önce Test \ FirstPojo.java

HomeApp
--src derleme sonra

--classes------ com \ test \ FirstSample.java (FirstPojo kullanarak FirstSample.java.Java)
------ com \ test \ FirstPojo.java
------ com
--classes \ test \ FirstSample.class (FirstSample.class FirstPojo.class kullanılarak)
- ----- com \ test \ FirstPojo.class