Простая командная строка Java компиляции - PullRequest
5 голосов
/ 16 марта 2010

Итак, я должен отправить проект Java кому-то за пределами нашей компании, у которого нет опыта работы с Java, и им нужно скомпилировать его. Есть ли простой способ сделать это в командной строке Windows, которая не требует выписывания списков файлов?

Лично я думаю, что javac должен быть достаточно умным, чтобы справиться с ним

javac *

в папке, находящейся под корнем иерархии пакетов. Есть что-нибудь на этом стадионе?

Редактировать: структура исходной папки сложна и не является классом с одной записью, поэтому некоторые из упомянутых идей пока не будут работать. Спасибо хоть! Подумайте о 9 уровнях с кодом на многих уровнях.

Ответы [ 5 ]

6 голосов
/ 16 марта 2010

Из папки, представляющей основу иерархии вашего пакета, если предположить, что ваш класс точки входа называется Main, в пакете с именем app,

javac -classpath . app/Main.java

должен генерировать правильные определения классов. Компилятор выведет зависимости и скомпилирует все остальные классы, которые необходимы. Файлы классов появятся в том же каталоге, что и их исходные файлы.

Если, как вы говорите, у вас есть класс «более одной записи», вам нужно будет как минимум идентифицировать все эти классы верхнего уровня из иерархии зависимостей, которые могут быть перечислены как дополнительные параметры для javac, указав пакеты как они происходят. Например, при условии, что вам также нужно начать с другого. Entry

javac -classpath . app/Main.java other/Entry.java 

Обратите внимание, что вам все равно придется выяснить, какие из ваших классов являются вершинами независимых иерархий зависимостей, независимо от того, создаете ли вы сценарий ant или делаете это таким образом.

5 голосов
/ 16 марта 2010

Предоставьте им сценарий Ant, который выполняет сборку с правильными библиотеками на пути к классам и т. Д. Этот сценарий также может выполнять другие задачи, такие как создание JAR-файлов и т. Д.

Это требует, чтобы этот человек загружал и устанавливал Ant, но это не сложно. (И ничто не мешает вам предоставить им соответствующий дистрибутив Ant для установки. Или даже отправлять им ZIP-файл дистрибутива с копией Ant, «предварительно установленной» в дереве.)

Предоставление сценария Ant означает, что вы избегаете их попадания в ловушки новичков Java, например, забываете указывать путь к классам, находитесь в неправильном каталоге, забываете перекомпилировать зависимые файлы и так далее. Плюс, это более "профессионально".

3 голосов
/ 16 марта 2010

javac BaseProgram.java скомпилирует BaseProgram.java из текущего каталога, и все классы, на которые он ссылается, доступные в исходном коде, в том же дереве каталогов.

Если BaseProgram ссылается на Class1 и Class2 и они доступны в Class1.java и Class2.java в одном каталоге, то они тоже будут скомпилированы. Аналогичным образом, если они находятся в пакете, а каталог пакета доступен, они будут скомпилированы.

2 голосов
/ 16 марта 2010

Вы можете создать файл со списком всех классов, которые вы хотите скомпилировать (извлечено из справочной страницы javac) -

Пример - два файла Arg Вы можете создать два файла аргументов - один для опций javac и другой для исходного файла- Имена: (Обратите внимание, что следующие списки не имеют продолжения строки символы.)

   Create a file named options containing:

          -d classes
          -g
          -sourcepath /java/pubs/ws/1.3/src/share/classes

   Create a file named classes containing:

          MyClass1.java
          MyClass2.java
          MyClass3.java

   You would then run javac with:

          % javac @options @classes

Или вы можете использовать * .java в командной строке, например

javac greetings/*.java

(Опять из man javac )

Или почему бы вам просто не скомпилировать исходный код в банку, которую ваш клиент может запустить, используя свою JRE - особенно если учесть, что они не разбираются в Java?

0 голосов
/ 20 июля 2018

Простой способ будет с помощью:

javac *.java.
...