2015-09-25 2 views
1

Используя Eclipse Luna с m2eclipse, у меня есть родительский проект Maven (facturas_root) и два наследуемых от него модуля Maven (sharepoint_ws и api_sharepoint).Сгенерированные источники скомпилированы дважды

sharepoint_ws должен был использоваться только для создания классов JAXWS для подключения к WebServices Sharepoint, поэтому я загрузил связанные WSDL и включил их в качестве ресурсов проекта. На этапе generate-sources он работает правильно и генерирует источники в target\generated-sources\ws-consume\mypackage\.

Теперь проблема в том, что я сделал api_sharepoint импорт sharepoint_ws зависимости, но он не обнаруживает никакого класса. Я предположил, что это потому, что сгенерированные классы не были в src/main/java, поэтому я добавил плагин для их копирования. Теперь проблема заключается в том, что на этапе компиляции sharepoint_ws он находит дважды исходный файл каждого класса и выдает ошибку.

Мой pom.xml -> построить

<plugins> 
    <!-- clean /src/main/java and /target/generated-sources --> 
    <plugin> 
    <artifactId>maven-clean-plugin</artifactId> 
    <version>2.6.1</version> 
    <executions> 
     <execution> 
     <phase>generate-sources</phase> 
     <goals> 
      <goal>clean</goal> 
     </goals> 
     <configuration> 
      <filesets> 
      <fileset> 
       <directory>${basedir}/src/main/java/es</directory> 
      </fileset> 
      <fileset> 
       <directory>${basedir}/target/generated-sources</directory> 
      </fileset> 
      </configuration> 
     </execution> 
     </executions> 
    </plugin> 

    <!-- generate jaxws --> 
    <plugin> 
     <groupId>org.jboss.ws.plugins</groupId> 
     <artifactId>maven-jaxws-tools-plugin</artifactId> 
     <version>1.1.2.Final</version> 
     <executions> 
     <execution> 
      <phase>generate-sources</phase> 
      <goals> 
      <goal>wsconsume</goal> 
      </goals> 
      <configuration> 
      <wsdls> 
       <wsdl>${basedir}/resources/lists.wsdl</wsdl> 
      </wsdls> 
      <targetPackage>es.ssib.otic.facturas.sharepoint_ws</targetPackage> 
      <outputDirectory>${basedir}/target/generated-sources</outputDirectory> 
      </configuration> 
     </execution> 
     </executions> 
    </plugin> 

    <!-- copy sources --> 
    <plugin> 
     <artifactId>maven-resources-plugin</artifactId> 
     <version>2.7</version> 
     <dependencies> 
     <dependency> 
      <groupId>org.apache.maven.shared</groupId> 
      <artifactId>maven-filtering</artifactId> 
      <version>1.3</version> 
     </dependency> 
     </dependencies> 
     <executions> 
     <execution> 
      <phase>generate-sources</phase> 
      <goals> 
      <goal>copy-resources</goal> 
      </goals> 
      <configuration> 
      <outputDirectory>${basedir}/src/main/java</outputDirectory> 
      <resources> 
       <resource> 
       <directory>${basedir}/target/generated-sources/wsconsume</directory> 
       <filtering>true</filtering> 
       </resource> 
      </resources> 
      </configuration> 
     </execution> 
     </executions> 
    </plugin> 
    </plugins> 

Для того, чтобы попытаться исключить target/generated-sources я addded это:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <executions> 
     <execution> 
     <id>default-compile</id> 
     <phase>compile</phase> 
     <configuration> 
      <excludes> 
      <exclude>**/target/generated-sources/*.java</exclude> 
      </excludes> 
     </configuration> 
     </execution> 
    </executions> 
    </plugin> 
</plugins> 

Как уже говорилось выше, я комментировать "копировать" плагин, модуль в зависимости от sharepoint_ws не имеет доступных классов; Я использую его я получаю ошибки в размере

[ERROR]/C:/Users/s004256/рабочее пространство/facturas_root/sharepoint_ws/SRC/главная/Java/эс/БГСС/ушные/фактур/sharepoint_ws/DeleteList.java:[34,8] duplicate class: es.ssib.otic.facturas.sharepoint_ws.DeleteList

для каждого сгенерированного списка.

ответ

1

В первую очередь, я рекомендую вам лучше объявить target/generated-sources в качестве исходной папки, вместо того, чтобы копировать файлы здесь и там:

<plugin> 
     <groupId>org.codehaus.mojo</groupId> 
     <artifactId>build-helper-maven-plugin</artifactId> 
     <version>1.7</version> 
     <executions> 
      <execution> 
       <id>add-source</id> 
       <phase>initialize</phase> 
       <goals> 
        <goal>add-source</goal> 
       </goals> 
       <configuration> 
        <sources> 
         <source>${project.build.directory}/generated-sources</source> 
        </sources> 
       </configuration> 
      </execution> 
     </executions> 
    </plugin> 

Это должно быть достаточно, чтобы сделать Maven компиляции цель/generated- source/*. java и упаковать их все в библиотеке, а также для Eclipse распознавать целевые/сгенерированные источники как исходный каталог (после выполнения Maven/Update Project).

Кстати: Вы должны заботиться о связывании плагинов к фазе в правильном порядке: Если вы связаны все задачи «генерировать-источники», у вас нет Gurantee о, в каком порядке они будут выполняться , И то же самое относится к фазе «компиляции»: вы должны правильно установить исходные папки с ее включениями и исключениями до этап компиляции.

Посмотрите Default Maven Lifecycle и попробуйте выбрать различные, последовательные этапы для ваших задач.

+0

Благодарим за помощь. Я сделал свое изменение (мне пришлось изменить 'initialize' для' validate', чтобы он работал, m2e не распознал несколько этапов), но это не сработало; jar компилируется и со страницами в нем, но связанный модуль по-прежнему не имеет доступа к классам; похоже, проблема заключается в том, что '/ target/classes' не настроен как папка« build »(он существует в файловой системе, но не отображается в проводнике проекта). – SJuan76

+0

Hum ... Вы говорите, что проект 'api_sharepoint' по-прежнему не может получить доступ к классам' sharepoint_ws'? Но, если 'sharepoint_ws-.jar' хорошо сгенерирован, и зависимость хорошо объявлена ​​в 'api_sharepoint', она должна. Запустите «mvn dependency: tree» на 'api_sharepoint', чтобы проверить, соответствует ли объявление зависимости. –

+0

С другой стороны: О проблемах с classpath Eclipse: если по какой-то причине Eclipse не распознал целевой/сгенерированный источник в качестве исходной папки, установите его вручную: щелкните по папке, покажите контекстное меню и выполните «использовать как исходная папка ". –