У нас есть достаточно большая взаимозависимая многопроектная база кода, в которой в настоящее время используется Java7 & Groovy, построенная с использованием Eclipse/WTP & Ant под управлением Tomcat 7. В принципе, что-то, что вы найдете в возможно большей части разработки программного обеспечения Java Enterprise. Мы модифицировали наш процесс сборки на протяжении многих лет, но он довольно хрупкий в Eclipse, Ant-only build работает отлично, хотя и медленно:
Мы использовали исключительно Ant, создавая common.jar, common-web.jar и т.д. И копируем в webN/WebContent/WEB-INF/lib. Это работало, но было медленным, и замена горячего кода и инкрементная компиляция невозможны (по крайней мере, для общих изменений *).
Теперь мы разрешаем Eclipse/WTP компилировать и собирать статические ресурсы. Общие и общие веб-проекты добавляются в сборку развертывания как виртуальные банки, чтобы предотвратить время, затрачиваемое на создание баннеров. Ant все еще выполняет некоторые шаблоны и копирование динамических ресурсов, а также копирует все внешние банки в WEB-INF/lib (это выполняется Ant по сравнению с библиотеками Eclipse/Web App, поэтому нам нужно поддерживать только наш список баннеров в одном месте, build.xml, а именно, что необходимо поддерживать их отдельно для каждого проекта в Eclipse в дополнение к build.xml для производственных сборок). После завершения Ant автоматически обновляет папки WEB-INF/lib и WEB-INF/classes, чтобы Eclipse/WTP знал об обновленных файлах.
Для развертывания на сервере мы просто позволяем Ant обрабатывать как компиляцию, так и сборку.
Наша стратегия позволить Eclipse/WTP иметь дело с автоматическим инкрементным построением и публикацией в Tomcat для разработки, сократила время компиляции Ant только в 2+ до практически мгновенного и разрешила замену горячих кодов обычных * классов. Однако эта настройка очень хрупка, поскольку любое изменение файла в файловой системе без знания Eclipse ломает сборку. Это также означает, что наша настройка проекта сложна и, следовательно, ее необходимо проверить, что, конечно же, означает, что она часто ломается, так как коллеги случайно проверяют локальные изменения.
Должен быть лучший способ легко работать с плоскими многомодульными проектами в среде IDE
Я посмотрел на maven и gradle, но оба признали, что когда дело доходит до плоских мультимодульных настроек, они просто не работают (или они?). Вложение невозможно из-за нескольких проектов верхнего уровня, требующих одинаковых подмодулей. Да, вы можете поместить корень pom.xml или gradle.settings в папку над проектами, но это не позволяет осуществлять бесшовное управление конструкцией/зависимостью Intellij или Eclipse, поскольку эта папка не видна.
К сожалению, все учебники и примеры, с которыми я столкнулся, касаются настроек размера хобби-проекта. Никогда не был примером для предприятий с несколькими ушами/войнами и совместными проектами.
Мы рады изменить инструменты сборки или даже IDE, если есть целая цепочка инструментов, на которой можно эффективно собирать и собирать, не покидая среду разработки и быстро.
В принципе, то, что мы делаем, "просто":
ТАК, вы можете помочь?
В градиенте вы можете иметь разные настройки.gradle в каждом из своих модулей, например: в web1, добавить settings.gradle, которые имеют:
include ':common'
project(':common').projectDir = "../common" as File
include ':common-web'
project(':common-web').projectDir = "../common-web" as File
то вы можете добавить зависимости в build.gradle как:
compile project(':common')
compile project(':common-web')
gradle может помочь вам:
Gradle очень гибкий и управляемый по сравнению с maven, но он медленнее и имеет больше ошибок, чем maven, так как он намного моложе.
includeFlat
вместо include
в settings.gradle
. Инкрементная компиляция Java Gradle является инкубационной функцией. Общая функция инкрементальной сборки сэкономит время.
I have looked into maven and gradle but both admit that when it comes to flat multi-module setups they just don't work (or do they?).
?