Играть! Веб-инфраструктура Java. Как их сервер разработки автоматически компилируется?
Посмотрев на Play! Я считаю, что он действительно продуктивен, что сервер разработки, с которым он поставляется автоматически, может компилировать .java файлы и немедленно показывать изменения. Там нет горячего сканера развертывания, который запускает каждую тысячу секунд или около того. Компиляция происходит, когда вы нажимаете обновление, и это намного быстрее, чем мой инкрементный mvn package
. Как они это делают?
Я хотел бы знать, потому что мне интересно знать, но и потому, что я не хочу использовать всю игру! рамки для моего небольшого проекта. Меня интересует только процесс компиляции разработки, потому что я бы хотел его принять:).
Любые идеи?
Ответы
Ответ 1
Я читал об этом только сегодня утром. Он фактически принимает ваши измененные исходные файлы и использует Eclipse Java Compiler (ECJ) внутри, прежде чем выплескивать скомпилированные файлы на встроенный сервер dev.
Дело в том, что вы, вероятно, не хотите прикладывать усилия к подключению ECJ к вашему "маленькому проекту".
Вы можете определенно аппроксимировать его, но трюк заключается в не делать mvn-пакет, вместо этого вы хотите отбросить измененные файлы .class в ваш каталог warplay взорванных warfile в файловой системе.
Если вы не привязаны к определенному серверу/контейнеру приложения, посмотрите на Eclipse Jetty Plugin - выглядит так, как вы необходимо, и Jetty быстро
Ответ 2
JDT - Играйте! использует Eclipse JDT для компиляции и загрузки классов динамически. Совсем так же, как вы код в Eclipse, и вы видите сообщение об ошибке или предупреждении, как только вы вводите что-то нежелательное. См. ApplicationCompiler класс.
Вы также можете посмотреть JDT.
Ответ 3
Play использует компилятор Eclipse для компиляции кода во время выполнения.
Взгляните на следующий класс, который используется Play для выполнения необходимой компиляции во время выполнения.
https://github.com/playframework/play/blob/master/framework/src/play/classloading/ApplicationCompiler.java
Ответ 4
То, как они это делают, - это использовать пользовательский загрузчик классов, который будет обнаруживать изменения исходных файлов, использовать компилятор Java Eclipse для компиляции файлов, а затем горячую замену соответствующих классов в JVM. Если вы ищете что-то подобное, проверьте ZeroTurnaround JRebel
он не является бесплатным, но стоит экономить время, когда вам нужно перераспределить крупный проект.
Ответ 5
Я не разработчик Play, но Struts2 тоже способен на это, но хотя struts2- spring -plugin. Так как перезагрузка класса обеспечивается Spring, возможно, эта функция Spring может быть использована любым проектом.
http://struts.apache.org/2.2.1/docs/spring-plugin.html
Найдите страницу "Перезагрузка класса".