Java: как я могу скомпилировать всю структуру каталогов кода?
случай использования прост. У меня есть исходные файлы, которые были созданы с помощью Eclipse. Таким образом, существует глубокая структура каталогов, где любой класс Java может ссылаться на другой класс Java в той же самой дочерней, сестринской или родительской папке.
Как мне скомпилировать все это из терминала с помощью javac ?
9 ответов:
вы должны знать все каталоги, или иметь возможность использовать подстановочный знак ..
javac dir1/*.java dir2/*.java dir3/dir4/*.java dir3/dir5/*.java dir6/*src/*.java
если все, что вы хотите сделать, это запустить свой основной класс (без компиляции
.java
файлы, на которых основной класс не зависит), то вы можете сделать следующее:cd <root-package-directory> javac <complete-path-to-main-class>
или
javac -cp <root-package-directory> <complete-path-to-main-class>
javac
автоматически разрешит все зависимости и скомпилирует все зависимости.
Ниже приведен метод, который я нашел:
1) Составьте список файлов с относительными путями в файле (скажем FilesList.txt) следующим образом (либо через пробел, либо через строку):
foo/AccessTestInterface.java foo/goo/AccessTestInterfaceImpl.java
2) используйте команду:
javac @FilesList.txt -d classes
Это позволит скомпилировать все файлы и поместить файлы класса в каталог классов.
Теперь простой способ создать список файлов.txt - это: Перейдите в исходный корневой каталог.
dir *.java /s /b > FilesList.txt
но, это заполнит абсолютный путь. С помощью текстового редактора "заменить все" путь до исходного каталога (include \ in the end) с "" (т. е. пустая строка) и сохранить.
вы должны были бы использовать что-то вроде муравья, чтобы сделать это иерархически:
http://ant.apache.org/manual/Tasks/javac.html
вам нужно будет создать сценарий сборки с целевым объектом compile, содержащим следующее:
<javac sourcepath="" srcdir="${src}" destdir="${build}" > <include name="**/*.java"/> </javac>
тогда вы сможете скомпилировать все файлы, запустив:
ant compile
кроме того, импортируйте свой проект в Eclipse, и он автоматически скомпилирует все исходные файлы для этого проект.
уже существующие ответы, похоже, касаются только *.сами файлы java, а не как легко сделать это с файлами библиотеки, которые могут потребоваться для сборки.
хорошая однострочная ситуация, которая рекурсивно получает все *.java файлы, а также включает в себя *.jar файлы, необходимые для построения является:
javac -cp ".:lib/*" -d bin $(find ./src/* | grep .java)
здесь файл bin является местом назначения файлов классов, lib (и, возможно, текущий рабочий каталог) содержат файлы библиотеки и все файлы java в каталоге src и ниже компилируются.
есть способ сделать это без использования символа канала, что удобно, если вы не запускающий процесс с другого языка программирования, для этого:
find $JAVA_SRC_DIR -name '*.java' -exec javac -d $OUTPUT_DIR {} +
хотя, если вы находитесь в Баш и/или не возражаете использовать трубу, то вы можете сделать:
find $JAVA_SRC_DIR -name '*.java' | xargs javac -d $OUTPUT_DIR