Вариант использования прост. Я получил исходные файлы, созданные с помощью Eclipse. Итак, существует глубокая структура каталогов, где любой класс Java может ссылаться на другой класс Java в той же, дочерней, родственной или родительской папке.
Как мне скомпилировать все это из терминала с помощью javac?
java
compilation
javac
directory-structure
эйфория83
источник
источник
Ответы:
Вы должны знать все каталоги или уметь использовать подстановочные знаки ..
javac dir1/*.java dir2/*.java dir3/dir4/*.java dir3/dir5/*.java dir6/*src/*.java
источник
javac $(find . -name "*.java")
.В Bash 4+ вы можете просто включить globstar
shopt -s globstar
а затем сделать
источник
Если все, что вам нужно сделать, это запустить основной класс (без компиляции
.java
файлов, от которых основной класс не зависит), вы можете сделать следующее:cd <root-package-directory> javac <complete-path-to-main-class>
или же
javac -cp <root-package-directory> <complete-path-to-main-class>
javac
автоматически разрешит все зависимости, а также скомпилирует все зависимости.источник
-sourcepath .
опцию, а затем назвать основной файл для того же эффектаfind . -type f -name "*.java" | xargs javac
как номер 2, и этот метод только при наличии единственной точки входа основного метода, охватывающей все приложение.Я бы взял джона и использовал Ant, поскольку это довольно сложная задача.
Однако, если вы настроены поместить все это в одну строку в Терминале, в Linux вы можете использовать команду find . Но я не рекомендую это вообще, поскольку нет гарантии, что, скажем, Foo.java будет скомпилирован после Bar.java, даже если он
Foo
используетBar
. Примером может быть:find . -type f -name "*.java" -exec javac {} \;
Если все ваши классы еще не скомпилированы, если есть одна основная проводка или класс драйвера (в основном тот, который содержит ваш основной метод), компиляция этого основного класса по отдельности должна скомпилировать большую часть проекта, даже если они находятся в разных папках, поскольку Javac будет стараться изо всех сил решать проблемы с зависимостями.
источник
find_gnu . -type f -name "*.java" | xargs javac
после того, как версия find.exe для gnu будет переименована в find_gnu.exe. Я получил свой gnu find.exe из msysgit.for /f "usebackq" %f in (``dir /s /b *.java``) do javac %f
(используйте одинарные обратные кавычки,dir /s /b
но я не могу найти способ его правильно отформатировать).find
решение проблемное, потому что оно компилирует каждый класс java отдельно, что делает его очень медленным.Я нашел следующий метод:
1) Составьте список файлов с относительными путями в файле (скажем, FilesList.txt) следующим образом (либо через пробел, либо через строку):
2) Используйте команду:
javac @FilesList.txt -d classes
Это скомпилирует все файлы и поместит файлы классов в каталог классов.
Теперь простой способ создать FilesList.txt таков: перейдите в исходный корневой каталог.
Но это заполнит абсолютный путь. Используя текстовый редактор «Заменить все», укажите путь к исходному каталогу (включая \ в конце) на «» (т.е. пустую строку) и сохраните.
источник
Уже существующие ответы, похоже, касаются только самих файлов * .java, а не того, как легко сделать это с файлами библиотеки, которые могут потребоваться для сборки.
Хорошая однострочная ситуация, которая рекурсивно получает все файлы * .java, а также включает файлы * .jar, необходимые для сборки:
javac -cp ".:lib/*" -d bin $(find ./src/* | grep .java)
Здесь bin-файл является местом назначения файлов классов, lib (и, возможно, текущий рабочий каталог) содержит файлы библиотеки, а все java-файлы в каталоге src и ниже компилируются.
источник
Чтобы сделать это иерархически, вам нужно будет использовать что-то вроде Ant:
http://ant.apache.org/manual/Tasks/javac.html
Вам нужно будет создать сценарий сборки с целью под названием compile, содержащей следующее:
<javac sourcepath="" srcdir="${src}" destdir="${build}" > <include name="**/*.java"/> </javac>
Тогда вы сможете скомпилировать все файлы, запустив:
Или импортируйте свой проект в Eclipse, и он автоматически скомпилирует все исходные файлы для этого проекта.
источник
Есть способ сделать это без использования вертикальной черты, что удобно, если для этого вы создаете процесс с другого языка программирования:
find $JAVA_SRC_DIR -name '*.java' -exec javac -d $OUTPUT_DIR {} +
Хотя, если вы используете Bash и / или не возражаете против использования канала, вы можете:
find $JAVA_SRC_DIR -name '*.java' | xargs javac -d $OUTPUT_DIR
источник
Решение для Windows: предполагается, что все файлы содержатся в подкаталоге src, и вы хотите скомпилировать их в bin.
for /r src %i in (*.java) do javac %i -sourcepath src -d bin
Если src содержит файл .java непосредственно под ним, это быстрее
источник