Может быть сложно объяснить, что именно я хочу, поэтому, пожалуйста, позвольте мне сделать шаг за шагом.
Наша компания имеет долгоживущий Java-проект, который использует Spring WS, XSD-файлы для генерации WSDL иэти бобы из WSDL.Проект компилируется / строится с использованием ANT с различными целями (одна цель для генерации классов из XSD, другая для генерации JAR клиента, другая для генерации WAR / EAR сервера).Этот проект использовался для запуска сервера SOAP, а также для создания JAR на стороне клиента.Но единого источника кода больше не существует, и количество предварительно сгенерированных клиентских JAR-файлов летит вокруг.Мне нужно убрать этот беспорядок с помощью Maven.
Я создал модульный проект Maven, но в основном единственный реальный дочерний проект - это тот, который содержит весь пользовательский код, все XSD и т. Д. (Другой дочерний проект просто упаковывает EAR изВойна, созданная первым проектом).Поскольку этот проект использует Spring WS, окончательный файл WSDL генерируется динамически при запуске на сервере.
До сих пор мне удавалось сделать следующее:
- генерировать классы из XSD вручную,добавьте эти классы в / src / main / java, чтобы они сохранялись постоянно, и Maven должен сгенерировать оставшуюся часть сервисной архитектуры (WAR / EAR).
- отдельно, используя файл WSDL, импортированный из запущенного сервера, генерироватьКлиентский JAR-файл с помощью подключаемого модуля eclipse WTP (создайте новый проект, поместите в него WSDL, используйте подключаемый модуль WTP для создания файлов, затем экспортируйте проект в окончательный файл JAR), а затем распространите этот JAR-файл среди заинтересованных сторон.
Это работает, но, как вы видите, процесс обслуживания кода имеет проблемы (предварительно сгенерированные классы входят в основной источник), процесс генерации клиента в лучшем случае отсоединяется от основного проекта.Так что это беспорядок, который я бы хотел уладить.
То, что я хотел бы сделать, это примерно так:
- создать проект Maven, в котором размещается XSDфайлы
- используют его для генерации классов, а клиентские JAR
- ссылаются на этот проект из проекта на стороне сервера, так что на сгенерированные классы можно ссылаться с помощью кода на стороне сервера
- на стороне сервераЭто проект, который будет использовать Spring WS и сможет генерировать EAR-файл
Проблема, с которой я сталкиваюсь, проста: XSD-файлы для динамического генерирования WSDL должны действительно находиться в этом серверном проекте,не в клиентском проекте.Эти файлы должны находиться в / src / main / resources, поэтому они перемещаются в путь к классу встроенного файла WAR / EAR.Я мог бы использовать две разные копии XSD - одну на стороне клиента, другую на стороне сервера, но это звучит неправильно.
Поэтому мой главный вопрос на самом деле - как мне подойти к этой архитектуре проекта с помощью Maven, чтобы яиспользовать только один экземпляр любого исходного файла (XSD, Java и т. д.), и я могу удобно генерировать классы из XSD, создавать клиентские JAR и серверные WAR / EAR.Я в порядке с двумя или более отдельными командами сборки - одна генерирует JAR, другая генерирует EAR из надлежащих источников проекта.
Да, кстати - рефакторинг файлов XSD не подлежит сомнению - они даны нам и должныиспользовать как есть.
Спасибо, Николай