2017-02-20 6 views
1

Я использую Maven нескольких модулей построить, как показано нижеПропустить сбор maven для немодифицированных модулей?

<modules> 
     <module>module1</module> 
     <module>module2</module>// dependant on module 1   
     <module>module3</module>// dependant on module 2 
     <module>warApplication</module>// its a war file dependant on above modules 
    </modules> 

Present поведение сборки: - Если я внести изменения только в модуле 1, специалист будет строить даже module2, Module3 исходные файлы, а затем положить Module1, module2, Файлы jar файла module3 под warApplication/target/lib.

Есть ли конфигурация/способ, когда я запускаю сборку, maven проверяет, был ли какой-либо файл модифицирован в модуле, если не пропустить этот модуль. Для файла войны он добавит конкретный файл библиотеки , который был изменен. Это сэкономит много времени.

Чтобы проверить, не модифицирован ли файл в модуле или нет, maven может хранить последнее время сборки. Перед началом сборки он проверяет, был ли изменен какой-либо файл после последней метки времени сборки, если да, постройте его, иначе пропустите его.

Есть ли какой-либо плагин maven для этого?

Обновление: -

Моя структура проекта

TopFolder 
.mvn directory -> extensions.xml 
build directory->build-Projects-> pom.xml 
build directory-> parent -> pom.xml 
modules - > module1 -> pom.xml 
modules - > module2 -> pom.xml 
modules - > module3 -> pom.xml 

Вот я в том числе модули в родительском ПОМ

<modules> 
     <module>../../modules/module1</module> 
     <module>../../modules/module2</module> 
</modules> 

. Я включил Scm тег <developerConnection>scm:svn:https://comp.com/svn/trunk</developerConnection> в обоих ниже проекты

build directory->build-Projects-> pom.xml 
build directory-> parent -> pom.xml 

Запуск сборки из build directory->build-Projects-> pom.xml. Но проблема в том, когда я меняю любой файл на любой модуль и запускаю сборку с build directory-> pom.xml, его модуль не обнаруживает изменения?

+0

Я знаю, это не ответ, но попробуйте град. По крайней мере, он пропустит восстановление для нетронутых модулей. – glebiuskv

+1

Вы должны учитывать, что, даже если вы не коснулись модуля 2, результат сборки может отличаться. Прежде всего, сборка модуля 2 может сломаться, потому что вы изменили какой-то класс в модуле 1, который вызывается модулем 2. По той же причине тесты модуля 2 могут проходить или ломаться в зависимости от модуля 1. Кроме того, возникают более редкие проблемы например, используя общедоступные константы модуля 1 в модуле 2. Они скомпилированы в модуль 2, чтобы байт-код модуля 2 мог измениться, даже если вы только изменяете константу в модуле 1. –

+0

@JFMeier вы правы. В этом случае мне нужно модуль сборки 2 также. Но лат говорит, что я уверен, что ничего подобного не изменилось, что может сломать модуль 2, есть ли способ пропустить сборку для модуля 2 – user3198603

ответ

0

Вы можете использовать профили для создания того, что вы знаете, есть изменения, так как метка время не поддерживается в П

Смотрите здесь для более подробной информации: Maven Modules optional in pom.xml

+0

На самом деле это не решает мою цель, так как я хочу свести к минимуму время сборки. В зависимости от того, какой модуль был изменен, я хочу создать только те из них. Из вставленной вами ссылки я должен каждый раз создавать профиль maven, содержащий модифицированные модули. Это означает, что сначала мне нужно выяснить, какой модуль был изменен, а затем включить те модули, которые сами по себе подвержены ошибкам и требуют много времени. – user3198603

+0

Я знаю, но на самом деле у вас не будет выбора. Извините за невозможность помочь вам больше – DamCx

0

Porbably лучшего вариантом является использование добавочного модуля строителя. В первый раз после внесения изменений в файл расширения вам необходимо указать mvn install и т. Д. Вы можете использовать mvn -b incremental package, которые просто строят только модули, которые были изменены из предыдущей сборки. Адрес github: https://github.com/khmarbaise/incremental-module-builder

Смежные вопросы