Простая компиляция Java из командной строки

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

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

javac *

когда в папке прямо под корнем иерархии пакетов. На этом стадионе есть что-нибудь?

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


person nash    schedule 15.03.2010    source источник
comment
Если они не могут использовать Java, кто не может просто дать им уже скомпилированную версию?   -  person skaffman    schedule 16.03.2010


Ответы (5)


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

javac -classpath . app/Main.java

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

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

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

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

person JustJeff    schedule 15.03.2010

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

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

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

person Stephen C    schedule 15.03.2010

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

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

person Cheeso    schedule 15.03.2010

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

Пример — два файла аргументов. Вы можете создать два файла аргументов — один для параметров 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?

person Robert Conn    schedule 15.03.2010

Простым способом было бы использование:

javac *.java.
person Philip Bergström    schedule 20.07.2018