2012-01-05 3 views
1

Я работаю над довольно большим проектом, который использует maven для управления зависимостями. В рамках этого мы используем профили Maven для создания и замены определенных файлов свойств, которые отличаются между средами test/dev/production.Проблемы с интеграцией Eclipse (STS)/Maven

Чтобы выполнить сборку, я выполнил бы Maven: build, используя правильный профиль и реактор mavens, затем построил проекты в правильном порядке и сохранил банки в папке .m2, например, сначала в банке домена, затем в службу jar (с банком домена, включенным в его банку в качестве зависимости) и т. д. Это приводит к военному файлу в конечном итоге со всеми необходимыми для войны войнами.

Когда eclipse выполняет свою сборку по умолчанию, которую он выполняет каждый раз, когда вы сохраняете файл, банки не построены с каким-либо профилем, а всего лишь обычная сборка.

Когда я толкаю окончательный файл войны на сервер, и он взорван, когда сервер запускается (запускается и развертывается через eclipse). Я получаю в папке lib все банки, которые maven упаковали в файл войны, но также все банки, которые затмение построили.

например

lib/ 
    domain.jar (built by eclipse) 
    domain.SNAPSHOT.1.0.jar (built by maven) 
    etc 

Есть ли способ, чтобы предотвратить это? Это имеет конечное следствие наличия двух файлов свойств и только порядок, в котором они загружаются, определяет, какой из них используется. Реальная проблема, поскольку различные свойства используются в разных средах.

+0

Вы импортировали проект в Eclipse в качестве проекта Maven? работает ли сборка в командной строке? Вы используете «mvn install» вместо первого «mvn clean package» ... – khmarbaise

+0

У вас есть свойство finalName, определенное в нескольких местах в POM (ых)? – Perception

+0

My full Maven Build Goal: clean install -PprofileTest. Проверка времени на файлах jar внутри взрывоподобной войны на Tomcat в модифицированной дате указывает, что domain.jar был построен с разрешением 10,00, а домен .SNAPSHOT.1.0.jar был построен в 10.06 (где моя полная сборка и развертывание заняла i будет оценивать 6 минут). Я не думаю, что это не проблема с maven, так как это eclipse пытается разрешить зависимости и подталкивать свою собственную версию банок к серверу. –

ответ

1

Я нашел немного хакерское решение этой проблемы.

В Сети проецирует свойства -> Сборка развертывания Я изменил путь к нарушившей банке файлы например domain.jar из

WEB-INF/lib/domain.jar

в

WEB-INF/autogen/domain.jar

Это приводит к затмению генерируемого jar (с неправильными файлами свойств), которые будут развернуты в папку, которая не будет загружена при запуске tomcat. Это не идеальное решение, но оно позволяет всем приятным вещам автозаполнения затмения, таким как завершение кода и сообщения об ошибках в веб-проекте, если интерфейс домена изменяется и т. Д., А также обеспечивая правильный профиль при развертывании.

Оставляя это здесь для кого-то еще в этой ситуации.

+0

Из того, что я видел, это довольно распространенное решение, когда m2e не сотрудничает. – deterb

+0

Удаление ответа на этот ответ. Даже это не полностью решило проблему. Проблема в том, что каждый раз, когда maven обновляет зависимости, он будет изменять файлы обратно на WEB_INF/lib/domain.jar. Также после обновления (регулярно требуемого для принудительного затмения распознавания того, что сборка maven завершена) это вызовет проблемы с пути сборки, поскольку все файлы, ссылающиеся на эту банку, не смогут ее использовать. Я думаю, что могу написать несколько строк в сценарий tomcat startup.bat, чтобы удалить файлы перед запуском tomcat. –

+0

Попробуйте пойти в другом направлении - измените каталог maven, в который вставляются файлы, а затем убедитесь, что каталог возвращается в соответствующий военный каталог. – deterb