Я ищу компиляцию приложения на Java, состоящего из различного количества классов Java в определенном количестве пакетов. В командной строке можно изменить к папке, содержащей пакет корневой системы и типа:Программно скомпилировать Java-класс в пакете, хранящемся в произвольной подпапке
javac rootpackage/subpackage/*.java
или
javac rootpackage/*/*.java
собрать все классы Java во всех первичных подпакетах моего rootpackage.
Однако я хотел бы иметь возможность сделать это в приложении Java. (Идея состоит в том, что мы предоставляем приложение для студентов, которое содержит модульные тесты. Модульные тесты должны выполняться против их кода, тогда приложение создает файл JAR, содержащий исходные файлы, которые были «отмечены знаком» с результатами теста. это работает нормально, но мы хотели бы удостовериться, что проверенные файлы классов созданы из исходных файлов, представленных, следовательно, идея программно скомпилировать источники java).
Проблема заключается в том, что каждый ученик хранит свой корневой пакет в произвольной позиции, и я не могу передать местоположение файла в JavaCompiler (javax.tools).
Возможно ли, и если да, может кто-нибудь дать некоторые подсказки о том, как правильно сформировать корневой пакет с произвольным размещением.
Приветствия
Richard
Дополнительная информация:
студент имеет структуру папок:
/home/student/work/java/myproject/
, который содержит корневой пакет. Они запускают приложение (возможно, хранятся в этой папке - и, следовательно, никаких проблем - как бы более вероятно, они не сохранены в другом месте), которые запрашивают у них папку, содержащую корневой пакет. После входа ученики нажимают кнопку создания JAR, которая компилирует файлы в своих пакетах, запускает тесты для вновь скомпилированных файлов, а затем создает JAR.
Хотя, рассматривая эту проблему, возможно, что решение состоит в том, чтобы сообщить учащимся установить наше приложение «создать JAR» в папке, содержащей их корневой пакет.
Не могли бы вы заставить учеников сделать свой собственный jar'ing? ... Ваш инструмент мог бы стать чем-то, где они загружают свою банку, и она проводит свои тесты, что избавляет вас от головной боли при создании инструмента для банок и воспитывает их в том, как использовать банку (что, по моему мнению, очень важно) –
В качестве альтернативы, похоже, что у вашего инструмента есть какой-то графический интерфейс, поэтому вы можете просто дать им JFileDialog, чтобы выбрать путь к исходному файлу. –