2014-12-18 1 views
3

Есть ли опция для javac, скажем --dry-run, которая даст указание компилятору не выполнять фактическую компиляцию, а проанализировать исходный файл (ы) и список, из которых будут создаваться файлы .class (включая путь пакета)?Можно ли просмотреть, какие файлы классов будут генерироваться компилятором Java?

Рассмотрим следующий пример:

$ cat example.java 
package whatever.example; 
class First {} 
class Second {} 
$ javac -d . example.java 
$ find . 
. 
./example.java 
./whatever 
./whatever/example 
./whatever/example/First.class 
./whatever/example/Second.class 

Исходный файл был скомпилирован в двух .class файлов и, как был указан параметр -d, был создан пакет структуры. Я хотел бы знать такую ​​информацию до сборник. Что-то вроде этого:

$ javac --dry-run -d . example.java 
./whatever/example/First.class 
./whatever/example/Second.class 

В качестве альтернативы, если нет такого варианта для javac, есть ли утилита третьей стороной, которая может сделать такую ​​вещь?

+2

Я не знаю ни одного такого варианта, но, учитывая, что в любом случае придется делать много работы, почему бы не просто скомпилировать временный каталог? –

+0

Для компиляции во временный каталог потребуется «проанализировать результаты». И сделать результаты надежными закончится написанием специализированной утилиты. Прежде чем это сделать, я хотел бы знать, какие у меня варианты. – SquidEpps

+1

Я не знаю, что вы подразумеваете под «разобрать результаты» здесь - вы просто будете ходить по дереву каталогов. Как это связано с синтаксическим разбором? –

ответ

2

попробовать

javac -verbose -d . javaclass.java 

это фактически перечисляет все действия, которые компилятор работает над. к концу вы можете, что все классы были созданы с помощью структуры пакета.

У меня есть компилятор с помощью вышеуказанного кода. Я получаю следующий результат в конце списка.

[wrote RegularFileObject[.\com\SC\JustTesting.class]] 
[wrote RegularFileObject[.\com\SC\JustTestingSecond.class]] 

Есть много других вариантов, просто введите javac в командной строке, чтобы посмотреть на них.

Я не знаю, могу ли я знать, до компиляции, эту информацию.

+0

Отлично! Половина проблемы решена. Однако это будет скомпилировать и записать файлы. Любой способ отключить это? Конечно, я могу, как предложил @Jon Skeet, скомпилировать временный каталог, но это кажется мне лишним. Может быть, есть способ сделать «сухой ход» программным путем? – SquidEpps

Смежные вопросы