Использование генерации кода Maven и Apache CXF с разными конечными точками при тестировании и производстве.

У меня есть веб-проект Java, который использует веб-службу, используя Apache CXF для создания базового кода на основе WSDL, опубликованного службой.

У меня есть тестовая версия сервиса для разработки и рабочая версия. Конечные точки двух сервисов находятся по разным URL-адресам, и хотя их общедоступные интерфейсы в значительной степени идентичны, я регенерирую код CXF (используя плагин cxf-codegen-plugin), продвигая свой проект в производственной среде.

Как лучше всего настроить Maven для этого?

На данный момент я установил свойство в pom.xml под названием ws_status

<properties>
    <ws_status>test</ws_status>
</properties>

который я впоследствии использую для настройки пути к файлу WSDL, используемому плагином codegen:

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>${cxf.version}</version>
    <configuration>
    <fork>once</fork>
    <encoding>UTF-8</encoding>
    <additionalJvmArgs>-Djava.endorsed.dirs=${project.build.directory}/endorsed</additionalJvmArgs>
    <!-- rest of the normal codegen configuration options -->
    </configuration>
    <dependencies>
    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-impl</artifactId>
        <version>2.2</version>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.bind</groupId>
        <artifactId>jaxb-xjc</artifactId>
        <version>2.2</version>
    </dependency>
    </dependencies>
    <executions>
    <execution>
        <id>generate-sources</id>
        <phase>generate-sources</phase>
        <goals>
        <goal>wsdl2java</goal>
        </goals>
        <configuration>
        <wsdlOptions>
            <wsdlOption>
            <wsdl>${basedir}/src/main/resources/wsdl/${ws_status}/Cmis.wsdl</wsdl>
            <wsdlLocation>classpath:wsdl/${ws_status}/Cmis.wsdl</wsdlLocation>
            <extraargs>
                <extraarg>-client</extraarg>
                <extraarg>-verbose</extraarg>
                <extraarg>-compile</extraarg>
            </extraargs>
            </wsdlOption>
        </wsdlOptions>
        </configuration>
    </execution>
    </executions>
</plugin>

Это работает нормально, но меня раздражает, что мне нужно менять ws_status внутри pom.xml каждый раз, когда я выпускаю производственную версию, так как файл pom отслеживается git.

Я хочу, чтобы переключатель командной строки maven сообщал ему, что он должен ссылаться на тот или иной файл WSDL, чтобы я мог генерировать источники для тестовой или производственной среды без необходимости изменять код внутри проекта. Это «профиль сборки» в Maven?

Любые идеи? Спасибо.


person Geeb    schedule 14.03.2013    source источник


Ответы (1)


Вы должны удалить свою собственность в верхней части вашего POM. Вы можете вызвать свои командные строки Maven следующим образом:

mvn goal -Dws_status=your_status_value

И должно быть Ок.

person YMomb    schedule 14.03.2013
comment
Спасибо, хороший совет! Это имело бы желаемый эффект. Но... На самом деле я искал пример использования профилей сборки Maven для достижения этой цели. - person Geeb; 14.03.2013
comment
Проблема в том, что для активации вашего профиля вам придется вызывать командную строку с -P имя_профиля, что похоже на использование -Dproperty=value. - person YMomb; 14.03.2013
comment
Абсолютно. Но я подумал, что если есть какие-либо другие различия между тестом и производством, было бы полезно реализовать разные профили сборки, чтобы учесть это, и посмотреть пример. В этом случае при изменении одного свойства предоставленного вами решения будет достаточно. - person Geeb; 14.03.2013
comment
Я думаю, что я действительно хочу разобраться в концепции профилей сборки Maven, но я нахожу документацию запутанной. Я ловил рыбу для примера, правда. Может быть, я должен пойти и RTFM! - person Geeb; 14.03.2013