javac opcja kompilacji wszystkich plików java pod danym katalogiem rekurencyjnie
Używam kompilatora javac do kompilacji plików java w moim projekcie. Pliki są dystrybuowane w kilku pakietach, takich jak ten: com.vistas.util
, com.vistas.converter
, com.vistas.LineHelper
, com.current.mdcontect
.
Każdy z tych pakietów zawiera kilka plików java. Ja używam javaca w ten sposób:
javac com/vistas/util/*.java com/vistas/converter/*.java
com.vistas.LineHelper/*.java com/current/mdcontect/*.java
(w jednej linii)
Zamiast podawać tak wiele ścieżek, jak Mogę poprosić kompilator o rekursywne skompilowanie wszystkich plików Javy z nadrzędnego katalogu com?
8 answers
Sugerowałbym również użycie jakiegoś narzędzia do budowania (Ant lub Maven , Ant jest już sugerowany i łatwiej zacząć od niego) lub IDE, które obsługuje kompilację (Eclipse używa kompilacji przyrostowej ze strategią uzgadniania, a nawet nie musisz się przejmować naciśnięciem przycisków "Compile" ).
Korzystanie Z Javac
Jeśli chcesz wypróbować coś dla większego projektu i nie masz żadnych odpowiednich narzędzi do budowania w pobliżu, zawsze możesz użyć małego sztuczka, którą oferuje javac
: nazwy klas do kompilacji mogą być określone w pliku. Po prostu musisz przekazać nazwę pliku {[3] } z prefiksem @
.
Jeśli możesz utworzyć listę wszystkich plików *.java
w swoim projekcie, jest to proste:
# Linux / MacOS
$ find -name "*.java" > sources.txt
$ javac @sources.txt
:: Windows
> dir /s /B *.java > sources.txt
> javac @sources.txt
- zaletą jest to, że jest to szybkie i łatwe rozwiązanie.
-
wadą jest to, że musisz zregenerować plik
sources.txt
za każdym razem, gdy tworzysz nowe źródło lub zmieniasz nazwę istniejącego pliku, który jest łatwe do zapomnienia (a więc podatne na błędy) i męczące zadanie.
Używanie narzędzia do budowania
Na dłuższą metę lepiej jest użyć narzędzia, które zostało zaprojektowane do tworzenia oprogramowania.
Używanie Ant
Jeśli utworzysz prosty plik build.xml
, który opisuje jak zbudować oprogramowanie:
<project default="compile">
<target name="compile">
<mkdir dir="bin"/>
<javac srcdir="src" destdir="bin"/>
</target>
</project>
Możesz skompilować całe oprogramowanie, uruchamiając następujące polecenie:
$ ant
- zaletą jest to, że używasz standardowego narzędzia do budowania, które jest łatwe rozszerzyć.
- wadą jest to, że musisz pobrać, skonfigurować i nauczyć się dodatkowego narzędzia. Zauważ, że większość IDE (takich jak NetBeans i Eclipse) oferuje świetne wsparcie dla pisania plików kompilacji, więc nie musisz nic pobierać w tym przypadku.
Używanie Mavena
Maven nie jest tak trywialny w konfiguracji i pracy, ale nauka dobrze się opłaca. Oto świetny samouczek, aby rozpocząć projekt w ciągu 5 minut.- to główną zaletą (dla mnie) jest to, że obsługuje również zależności, więc nie będziesz musiał pobierać więcej plików Jar i zarządzać nimi ręcznie i uznałem, że jest bardziej przydatny do budowania, pakowania i testowania większych projektów.
- wadą jest to, że ma stromą krzywą uczenia się, a jeśli wtyczki Mavena lubią tłumić błędy :-) inną rzeczą jest to, że sporo narzędzi działa również z repozytoriami Mavena (jakSBT dla Scali, Ivy dla Ant, Graddle dla Groovy).
Używanie IDE
Teraz, co może zwiększyć wydajność rozwoju. Istnieje kilka alternatyw open source (jak Eclipse i NetBeans, wolę pierwszą), a nawet komercyjne (jak IntelliJ), które są dość popularne i potężne.
Mogą zarządzać budową projektu w tle, dzięki czemu nie musisz zajmować się wszystkimi sprawami z linii poleceń. Jednak zawsze się przydaje jeśli wiesz, co faktycznie dzieje się w tle, dzięki czemu możesz wytropić sporadyczne błędy, takie jak ClassNotFoundException
.
Jedna uwaga dodatkowa
W przypadku większych projektów zawsze zaleca się użycie IDE i narzędzia do budowania. Pierwsze z nich zwiększa twoją produktywność, podczas gdy drugie umożliwia używanie różnych IDE w projekcie (np. Maven może generować deskryptory projektu Eclipse za pomocą prostego poleceniamvn eclipse:eclipse
). Ponadto posiadanie projektu, który można przetestować/zbudować za pomocą jednego wiersza polecenie jest łatwe do wprowadzenia do nowych kolegów i do serwera ciągłej integracji na przykład. Bułka z masłem: -)Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-25 08:58:01
find . -name "*.java" -print | xargs javac
Trochę brutalne, ale działa jak diabli. (Używaj tylko na małych programach, to absolutnie nie jest wydajne)Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-30 20:00:52
Jeśli twoja powłoka go obsługuje, czy coś takiego zadziała ?
javac com/**/*.java
Jeśli twoja powłoka nie obsługuje **
, to może
javac com/*/*/*.java
Działa (dla wszystkich pakietów z 3 komponentami-dostosuj do mniej więcej).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-08 14:41:34
W zwykłym przypadku, gdy chcesz skompilować cały projekt, możesz po prostu dostarczyć javac ze swoją główną klasą i pozwolić jej skompilować wszystkie wymagane zależności:
javac -sourcepath . path/to/Main.java
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-02 11:32:31
Radzę nauczyć się używać ant , który jest bardzo-dobrze nadaje się do tego zadania, jest bardzo łatwy do uchwycenia i dobrze udokumentowany.
Musiałbyś tylko zdefiniować taki cel w kompilacji.plik xml:
<target name="compile">
<javac srcdir="your/source/directory"
destdir="your/output/directory"
classpath="xyz.jar" />
</target>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-08 10:32:29
Używam tylko make z prostym makefile, który wygląda tak:
JAVAC = javac -Xlint:unchecked
sources = $(shell find . -type f -name '*.java')
classes = $(sources:.java=.class)
all : $(classes)
clean :
rm -f $(classes)
%.class : %.java
$(JAVAC) $<
Kompiluje źródła pojedynczo i rekompiluje tylko w razie potrzeby.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-03 18:52:22
Polecenie Javac nie wykonuje rekurencyjnego procesu kompilacji, więc musisz albo określić każdy katalog podczas uruchamiania polecenia, albo podać plik tekstowy z katalogami, które chcesz dołączyć:
javac -classpath "${CLASSPATH}" @java_sources.txt
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-18 04:03:12
Używałem tego w projekcie Xcode JNI do rekurencyjnego budowania klas testowych:
find ${PROJECT_DIR} -name "*.java" -print | xargs javac -g -classpath ${BUILT_PRODUCTS_DIR} -d ${BUILT_PRODUCTS_DIR}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-12-04 22:09:27