juick убог — не парсит нормально ссылки и, главное, ну что за ограничение на объем ;) http://juick.com/develar/824160 придется сюда.
На встрече с Jetbrains также была затронута тема профилей для галочек Use IDE Builder — именно это решение пришло мне в голову, как тупому программисту, для решения описанной ниже проблемы (@yzh44yzh заметь, сколько запятых ;)).
В IDEA есть два способа скомпилировать модуль — Run/Debug with make before launch и Make Project.
При Run/Debug with make before launch будет скомпилирован тот модуль, что указан для runner, а также все его зависимости (модули входящие в его library path).
При Make Project все модули.
В обоих случаях модуль будет компилироваться только если для него отмечено Use IDE Builder.
Очевидно, что runner не подходит нам, если мы работает над 1) приложением (main swf) 2) динамически подгружаемый swf (стиль, плагин). Потому что никак по зависимостям модуля приложения нельзя определить, что нужно скомпилировать некие плагины.
Что я хочу как разработчик — минимизировать время компиляции. В настоящее время IDEA быстрее всех компилирует и только в ней наиболее быстрый отклик. Я и мои коллеги довольны. Мы имеем грамотно разбитый проект на модули и, выставив галочки Use IDE Builder, имеем почти мгновенную компиляцию. Но ставить эти галочки, ага, напрягает.
Что мне ответили в Jetbrains — а зачем вы расставляете галочки, если мы реализовали для больших проектов parallel compilation with up to n mxmlc/compc processes? Типа один раз соберите проект и все — IDEA то уже давно не дергает убогий компилятор, а сама проверяет актуальность и необходимость компиляции модуля. 5 месяцев назад я уже выразил свое мнение, очевидное любому — http://juick.com/develar/549041 — сосет эта техника и проигрывает — не, мой коллега, у которого руки никак не дойдут настроить linux нормально (java машину) ей пользуется, но по скорости оно проигрывает в разы. А с fcsh, очевидно, собрать 50 модулей не получится. Да и вообще, что за детский сад — компилятор от Adobe настолько убог, что собирать целиком большой проект в самой среде это идите вы в лес — в разы проще и надежнее запустить сборку мавеном и он гарантированно и за гарантированное время соберет проект.
Собственно, надеюсь, проблему я осветил и осветил понятно. И в очередной раз убедился, что они мыслят как Apple — собственно именно этим IDEA отличается от прочих IDE — Александр Дорошко четко сказал о профилях что "это чуждо IntelliJ IDEA". И правда — предложенное решение абсолютно смешно и унижает Jetbrains до уровня Adobe — мы то (клиенты компании) можем попросить и выработать, благодаря их открытой позиции, более лучшее и незаметно, но эффективно работающее решение.
И такое решение действительно есть (это и есть цель этого поста ;)) — а что если IDEA будет просто следить за разработчиком и запоминать, в каких модулях он произвел изменения в текущем сеансе работе (скажем, от момента открытие проекта до закрытия, или по Swith to Task)? По умолчанию все модули чистенькие, их компилировать не надо (полная сборка выполнена мавеном/антом/либо для новичков дать возможность нажатия кнопки которая запустит тотальную parallel compilation with up to n mxmlc/compc processes). Раз модуль стал dirty (то есть я внес некие изменения в его файлах) — значит нужно будет его собирать если это понадобится (а понадобится если он указан для runner или зависимость модуля runner, или просто make project) (а пометка то что он уже чистый и так реализована в IDEA — то есть если на второй компилции в рамках сеанса я внес изменение только и только в другой модуль, то мой первый не будет перекомпилроваться — IDEA то сама следит за актуальностью, а не дергает для этого убогий компилятор). Как вам?
Если Jetbrains одобрит эту идею и реализует — ммм... как кофе со льдом от @Constantiner ;)
Но тут есть два момента, которые немного радужную картину портят.
1) Предположим, у вас есть библиотека Cocoa (swc). От нее зависит два приложения (swf) (webEditor и assetBuilder) и стилевой плагин xpBlue (которые динамически подгружается в оба приложения). Я вношу изменения в стилевой плагин xpBlue и пользуюсь make project (это ведь динамически подгружаемый swf). Потом run но без make для webEditor. Потом run но без make для assetBuilder. Потом вношу изменения в Cocoa — что произойдет при make project? — да — будут скомпилированы оба приложения (так как они оба зависят от Cocoa) — а мне то ни черта это не нужно, если я потом делаю "run но без make для webEditor" (то есть в данном случае абсолютно зря был скомпилирован assetBuilder). Как можно решить эту проблему? Ведь для IDEA и xpBlue, и assetBuilder являются swf. Можно ввести особый make в runner — типа компилировать весь проект за исключением тех модулей, для которых есть runners (то есть IDEA по такому критерию сможет различать xpBlue и assetBuilder) — но это порнография, да ;) Поэтому проще в разы будет повесить сеансы слежения не на факт открытия/закрытия проекта, а на Swith to Task (а кого Swith to Task будет не устраивать — ну, таки не велика особенно проблема эта, модули приложения то обычно очень маленькие, там только Main).
2) Тот же самый пример, только с тем нюансом, что стилевой плагин xpBlue зависит от библиотеки aquaLaF (swc). Вношу изменения в aquaLaF. Делаю make project. Как IDEA поймет, что нужно скомпилировать xpBlue? Никак. Можно компилировать все модули зависимые от aquaLaF (их список можно получить по Analyze -> Analyze Module Dependencies). Штука в том, что в случае с ручными галочками у нас не будет компилироваться весь список — я то с любовью галочки поставил где нужно. А в случае предложенного решения я буду иметь каждый раз при изменении aquaLaF определенный overhead (в реальном примере в 6 раз — то есть у меня с ручной галочкой будет компилироваться 1 модуль, а с автогалочкой все 6). Тут нужно еще подумать.
На встрече с Jetbrains также была затронута тема профилей для галочек Use IDE Builder — именно это решение пришло мне в голову, как тупому программисту, для решения описанной ниже проблемы (@yzh44yzh заметь, сколько запятых ;)).
В IDEA есть два способа скомпилировать модуль — Run/Debug with make before launch и Make Project.
При Run/Debug with make before launch будет скомпилирован тот модуль, что указан для runner, а также все его зависимости (модули входящие в его library path).
При Make Project все модули.
В обоих случаях модуль будет компилироваться только если для него отмечено Use IDE Builder.
Очевидно, что runner не подходит нам, если мы работает над 1) приложением (main swf) 2) динамически подгружаемый swf (стиль, плагин). Потому что никак по зависимостям модуля приложения нельзя определить, что нужно скомпилировать некие плагины.
Что я хочу как разработчик — минимизировать время компиляции. В настоящее время IDEA быстрее всех компилирует и только в ней наиболее быстрый отклик. Я и мои коллеги довольны. Мы имеем грамотно разбитый проект на модули и, выставив галочки Use IDE Builder, имеем почти мгновенную компиляцию. Но ставить эти галочки, ага, напрягает.
Что мне ответили в Jetbrains — а зачем вы расставляете галочки, если мы реализовали для больших проектов parallel compilation with up to n mxmlc/compc processes? Типа один раз соберите проект и все — IDEA то уже давно не дергает убогий компилятор, а сама проверяет актуальность и необходимость компиляции модуля. 5 месяцев назад я уже выразил свое мнение, очевидное любому — http://juick.com/develar/549041 — сосет эта техника и проигрывает — не, мой коллега, у которого руки никак не дойдут настроить linux нормально (java машину) ей пользуется, но по скорости оно проигрывает в разы. А с fcsh, очевидно, собрать 50 модулей не получится. Да и вообще, что за детский сад — компилятор от Adobe настолько убог, что собирать целиком большой проект в самой среде это идите вы в лес — в разы проще и надежнее запустить сборку мавеном и он гарантированно и за гарантированное время соберет проект.
Собственно, надеюсь, проблему я осветил и осветил понятно. И в очередной раз убедился, что они мыслят как Apple — собственно именно этим IDEA отличается от прочих IDE — Александр Дорошко четко сказал о профилях что "это чуждо IntelliJ IDEA". И правда — предложенное решение абсолютно смешно и унижает Jetbrains до уровня Adobe — мы то (клиенты компании) можем попросить и выработать, благодаря их открытой позиции, более лучшее и незаметно, но эффективно работающее решение.
И такое решение действительно есть (это и есть цель этого поста ;)) — а что если IDEA будет просто следить за разработчиком и запоминать, в каких модулях он произвел изменения в текущем сеансе работе (скажем, от момента открытие проекта до закрытия, или по Swith to Task)? По умолчанию все модули чистенькие, их компилировать не надо (полная сборка выполнена мавеном/антом/либо для новичков дать возможность нажатия кнопки которая запустит тотальную parallel compilation with up to n mxmlc/compc processes). Раз модуль стал dirty (то есть я внес некие изменения в его файлах) — значит нужно будет его собирать если это понадобится (а понадобится если он указан для runner или зависимость модуля runner, или просто make project) (а пометка то что он уже чистый и так реализована в IDEA — то есть если на второй компилции в рамках сеанса я внес изменение только и только в другой модуль, то мой первый не будет перекомпилроваться — IDEA то сама следит за актуальностью, а не дергает для этого убогий компилятор). Как вам?
Если Jetbrains одобрит эту идею и реализует — ммм... как кофе со льдом от @Constantiner ;)
Но тут есть два момента, которые немного радужную картину портят.
1) Предположим, у вас есть библиотека Cocoa (swc). От нее зависит два приложения (swf) (webEditor и assetBuilder) и стилевой плагин xpBlue (которые динамически подгружается в оба приложения). Я вношу изменения в стилевой плагин xpBlue и пользуюсь make project (это ведь динамически подгружаемый swf). Потом run но без make для webEditor. Потом run но без make для assetBuilder. Потом вношу изменения в Cocoa — что произойдет при make project? — да — будут скомпилированы оба приложения (так как они оба зависят от Cocoa) — а мне то ни черта это не нужно, если я потом делаю "run но без make для webEditor" (то есть в данном случае абсолютно зря был скомпилирован assetBuilder). Как можно решить эту проблему? Ведь для IDEA и xpBlue, и assetBuilder являются swf. Можно ввести особый make в runner — типа компилировать весь проект за исключением тех модулей, для которых есть runners (то есть IDEA по такому критерию сможет различать xpBlue и assetBuilder) — но это порнография, да ;) Поэтому проще в разы будет повесить сеансы слежения не на факт открытия/закрытия проекта, а на Swith to Task (а кого Swith to Task будет не устраивать — ну, таки не велика особенно проблема эта, модули приложения то обычно очень маленькие, там только Main).
2) Тот же самый пример, только с тем нюансом, что стилевой плагин xpBlue зависит от библиотеки aquaLaF (swc). Вношу изменения в aquaLaF. Делаю make project. Как IDEA поймет, что нужно скомпилировать xpBlue? Никак. Можно компилировать все модули зависимые от aquaLaF (их список можно получить по Analyze -> Analyze Module Dependencies). Штука в том, что в случае с ручными галочками у нас не будет компилироваться весь список — я то с любовью галочки поставил где нужно. А в случае предложенного решения я буду иметь каждый раз при изменении aquaLaF определенный overhead (в реальном примере в 6 раз — то есть у меня с ручной галочкой будет компилироваться 1 модуль, а с автогалочкой все 6). Тут нужно еще подумать.
Leave a comment