В Netbeans + Ant, как мне избежать перестройки wsimport клиентов веб-сервисов при каждой сборке? - PullRequest
1 голос
/ 11 июня 2010

Я нахожусь в проекте, где мы используем NetBeans (6.8).Мы используем несколько различных веб-сервисов, которые мы добавили в качестве ссылок на веб-сервисы, и Netbeans автоматически генерирует скрипты Ant wsimport для нас.Очень удобно, с одним недостатком: клиенты веб-служб перекомпилируются каждый раз, когда вызывается ant.Это значительно замедляет процесс сборки и приводит к тому, что количество связанных с мечом травм, увечий и смертей резко возрастет.

Обычно, я бы исправил это, изменив элемент wsimportот

<wsimport 
    sourcedestdir="${build.generated.dir}/jax-wsCache/PonyService"
    destdir="${build.generated.dir}/jax-wsCache/PonyService"
    wsdl="${wsdl-PonyService}" 
    catalog="catalog.xml" 
    verbose="true"/>

до

<wsimport 
    sourcedestdir="${build.generated.dir}/jax-wsCache/PonyService"
    destdir="${build.generated.dir}/jax-wsCache/PonyService"
    wsdl="${wsdl-PonyService}" 
    catalog="catalog.xml" 
    verbose="true">
    <produces dir="${build.generated.dir}/jax-wsCache/PonyService" />
</wsimport>

Но я не могу, потому что эта часть скрипта Ant генерируется автоматически.Если щелкнуть правой кнопкой мыши ссылку на веб-службу PonyService и выбрать Изменить атрибуты веб-службы wsimport опции , я могу добавить атрибуты к элементу wsimport, но не дочернему элементуelements.

Итак: Как добавить дочерний элемент produces в wsimport, кроме взлома автоматически сгенерированного скрипта Ant?

Или более широко: Как заставить сгенерированные NetBeans wsimport не перекомпилировать клиентов веб-служб каждый раз, когда я строю?

(также имеется в Форум NetBeans EE .)

Ответы [ 2 ]

3 голосов
/ 15 января 2013

У меня может быть ответ на этот заплесневелый вопрос. Генерация автоматического кода предназначена для обеспечения проекта клиентом веб-службы. Код создается в отдельной папке пакета веб-службы, а созданный пакет - в соответствии с этим. Как только этот код был сгенерирован, автоматическая генерация больше не требуется. Код должен быть использован.

РЕЗЕРВНОЕ ВСЕ ДО ДЕЛАТЬ НИЧЕГО!

Перетащите сгенерированный пакет кода из этой папки в вашу первичную исходную папку. Папка пакета веб-службы, конечно, исчезает, потому что там ничего нет. Определение клиента веб-службы остается - именно здесь мы обычно обновляем определение. Удалить это. Это больше не нужно. Теперь сделайте Чистую Перестройку. В результате получается пакет кода в вашем проекте, который выглядит так же, как и все, что вы написали, и удаленная веб-служба не запрашивается при каждой сборке.

Да, вы потеряли способность динамически восстанавливать код из WSDL, но если вам действительно нужно это сделать, просто переименуйте текущий пакет, затем сгенерируйте новый код и повторите, как указано выше, и удалите избыточный код, когда вы комфортно. Вы также можете удалить узлы META-INF из исходного дерева. Я обнаружил, что для этого потребовалось несколько операций удаления. После удаления всего, кроме модулей кода .java и выполнения перестройки. Мой код сделал удаленное соединение без проблем.

Я сделал то же, что и выше, когда понял, что сгенерированный код игнорируется Subversion. Сгенерированные папки не содержали файл .svn, поэтому я не смог зафиксировать этот код в своем хранилище. Единственный способ интегрировать код в проект - это физически скопировать его, и тогда я понял, что эта другая проблема также решена.

Потребовалось 2 года, чтобы найти решение, но я надеюсь, что это кому-нибудь поможет ...

0 голосов
/ 15 июля 2010

Вы пробовали NetBeans 6.9? Я спрашиваю только потому, что мой jaxws-build.xml выглядит иначе, чем ваш (все сгенерированные автоматически NetBeans).

<wsimport 
    sourcedestdir="${build.generated.dir}/jax-wsCache/ListProductsService" 
    destdir="${build.generated.dir}/jax-wsCache/ListProductsService"
    wsdl="${wsdl-ListProductsService}"
    catalog="catalog.xml"
    extension="true"
    verbose="true" 
    wsdlLocation="file:/C:/NetBeansProjects/wsclient/ListProductsService.wsdl" 
    xendorsed="true">
    <depends file="${wsdl-ListProductsService}"/>
    <produces dir="${build.generated.dir}/jax-wsCache/ListProductsService"/>
</wsimport>

Вышеупомянутый wsclient проект можно очистить и построить без ссылки на веб-сервис.

...