| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > Запуск компилятора |
| Автор: simanyay 30.6.2005, 20:41 | ||
т.е., насколько вы уже поняли, мне необходимо скомпилировать некий .java файл. Полный путь до компилятора, в виде c:/jdk/bin/javac.exe лежит в переменной compiler, флаги компиляции в flags и полный путь до сурца (в том же виде) в source. Все переменные существуют и не равны null. При этом метод возвращает true, если компиляция прошла успешно, т.е. javac не выдал на консоль ничего. В случае исключительной ситуации или ошибки в исходнике возвращается false. А ещё необходима мультиплатформенность. В зависимости от системы уже прибавляется .exe, но мне кажется, что могут быть заморочки с \\ и /. Я использую /. Проблема заключается в том, что ничего не компилируется. P.S. На TODO внимания не обращайте. Заранее спасибо. Пойду поем. |
| Автор: tux 1.7.2005, 03:01 | ||
У меня все работает в таком виде. Slackware Linux 10.1, JDK 1.4.2_08. Даже не представляю в чем может быть проблема, хотя в Windows не проверял, может быть там не все так гладко. Альтернативный способ откомпилить классы:
Класс com.sun.tools.javac.Main находится в jdk.home/lib/tools.jar. |
| Автор: simanyay 1.7.2005, 10:27 |
| tux, спасибо, если с тем ничего не выйдет, попробую. Мне, просто, ещё и другие компиляторы других языков поддерживать нужно будет (C#, C, etc.). |
| Автор: Domestic Cat 1.7.2005, 10:34 | ||||
|
| Автор: simanyay 1.7.2005, 12:17 | ||
Опаньки, спасибки. |
| Автор: simanyay 1.7.2005, 13:26 | ||||
В связи с тем, что вот такой код
работает, смею предположить, что не работает
Ни у кого никаких мыслей нет? |
| Автор: simanyay 1.7.2005, 18:21 |
| После курсов вождения я смело запускаю все программы, кроме Sunовских. Почему-то и javac, java и другие запускаются (т.е. процесс в памяти висит) и... не останавливаются. Так и остаются висеть |
| Автор: Domestic Cat 1.7.2005, 18:44 | ||||
Может, переставить СДК?
Попробуй примеры отсюда http://java.sun.com/developer/JDCTechTips/2003/tt0304.html - будут работать? |
| Автор: simanyay 1.7.2005, 19:27 | ||||||
Так с консольки (cmd) они работают.
После того, как я поменял ls на cmd /c заработали. Но когда я попытался javac запустить через cmd /c:
Добавлено @ 19:37 (поговорив по телефону) Кстати, насколько я помню, error=2 это когда не найдена программа |
| Автор: Domestic Cat 1.7.2005, 19:39 | ||||
Это в винде означает File Not Found Error, то есть javacу ты не дал никакого файла компилить Т. е. это означает что все работает. Можно проще
|
| Автор: simanyay 1.7.2005, 23:18 |
| Сделал. Короче, поговорив сначала с Котом в аське, а потом с котом васькой я решил взглянуть на эту проблему по другому. Опишу (вдруг кому ещё такая фигня попадется): Моей целью было написать класс, который компилировал бы представляемые .java файлы. Так как в разных системах javac располагается в разных местах, сл-но я хотел прописывать полный путь, который хранился бы в конфиге. Но тут возникла проблема, которую я так и не смог решить. Почему-то .exec(...) упорно отказывается запускать такого вида строку: cmd /c c:\\Program Files\\Java\\jdk1.5.0\\bin\\javac.exe e:\\dev\\java\\jizer-data\\java_src\\Hello.java Причём я пробовал и в кавычки брать - всё равно не работал. Ошибка была интересная 'C:\Program' is not recognized as an internal or external command, operable program or batch file. Кстати, попробуйте запустить эту строку (с кавычками и без) в start > run. Тоже не получится. (Hint: чтобы видеть результы надо поменять флаг /c на /k) Но если я запускал не через полный путь, т.е. просто javac ..., то всё работало. Сл-но я решил, что просто буду динамически управлять переменной окружения PATH. Всем спасибо за помощь, а Коту + в репу |
| Автор: simanyay 2.7.2005, 23:26 | ||||||
| Нашёл альтернативный способ запуска программ из Java. Предисловие: В стандартном способе запуска программ, есть проблема, которая в официальной документации описывается так:
Что в переводе означает
Решение нашёл на JavaWorld (http://www.javaworld.com/javaworld/jw-12-2000/jw-1229-traps_p.html) и немного переписал класс под себя. В зависимости от ситуации, удобно пользоваться и тем и другим, поскольку в большей части они похожи:
Засим моя проблема запуска компилятора решена полностью. Благодарю за внимание. P.S. Думаю, неплохо было бы это как дополнение к статье Антона Сабурова про вызов внешних программ, которая в ФАКе, добавить. |