параметры компилятора Java, то есть javac -d - PullRequest
2 голосов
/ 07 мая 2011

Я компилирую программу с оператором пакета.Например,

package APPC_LU62.Runtime ;

У меня также есть уже существующая структура каталогов, которая соответствует выражению пакета.

C:\APPC_LU62\Runtime

Как мне удержать компилятор javac от создания такой же структуры каталогов в рамках уже существующей?т.е.

C:\APPC_LU62\Runtime\APPC_LU62\Runtime   

Мне кажется, что компилятор должен быть достаточно "умным", чтобы сначала проверить существующую структуру каталогов, прежде чем создавать ее.

Спасибо

Ответы [ 2 ]

8 голосов
/ 08 мая 2011

Обычно компилятор ожидает исходные файлы и выводит файлы классов в соответствии со структурой пакета.

Если вы не зададите какие-либо параметры -sourcepath (или -classpath, если не указан исходный путь), исходные файлы ищутся относительно текущего каталога. Если указан исходный путь, исходные файлы ищутся относительно этого пути (в дополнение к любому файлу, непосредственно указанному в командной строке).

Аналогично, если вы не укажете какие-либо параметры -d, файлы классов будут помещены в каталоги в соответствии со структурой пакета относительно текущего каталога. Если вы укажете опцию -d, файлы классов будут размещены относительно каталога, заданного опцией. Здесь будут созданы несуществующие каталоги.

Таким образом, если вы хотите создать вывод в том же дереве каталогов, в котором находятся ваши исходные файлы, обычным способом будет перейти в корень этого дерева (C:\ в вашем случае) и оттуда Позвоните в Javac:

javac -classpath ... -sourcepath . APPC_LU62\Runtime\*.java

(или перечислить только те файлы Java, которые вы на самом деле хотите скомпилировать). В качестве альтернативы, вы можете добавить опции -d C:\ и -sourcepath C:\, а затем вызывать команду из любого удобного вам места:

javac -classpath ... -sourcepath C:\ -d C:\  C:\APPC_LU62\Runtime\*.java

То же самое справедливо позже для выполнения классов с помощью команды java: Это также предполагает, что классы в каталогах соответствуют структуре пакета, причем корень является каталогом или файлом jar, указанным в пути к классам. Таким образом, вам придется добавить C:\ к -classpath для вашего java вызова.

(Кстати, я бы не использовал корень какого-либо диска в качестве корня иерархии пакетов - лучше переместить все на один каталог вниз.)

3 голосов
/ 07 мая 2011

Было бы лучше, если бы вы на самом деле разместили свою команду javac и четко указали, где находятся ваши источники, но все равно все равно: при вводе javac -d somedir blahblah.java javac создаст соответствующую структуру каталогов (соответствующий пакетиерархия имен) начиная с каталог somedir.

Так что в вашем случае вам просто нужно сделать:

javac -d c:\ your_files.java
...