Как исключить класс как зависимость от maven из банки, которая не построена с помощью maven?

Я пытаюсь создать простое приложение javafx для использования веб-службы на основе SOAP, когда я читаю книгу веб-службы Java: запуск и работа (вопрос не о java), я использую: - netbeans 7.3 - javafx-maven-plugin 1.5 для управления зависимостями (я использую maven 3.0.4 ) - tiwulfx 1.1 для взаимодействия с POJO

Вот мой файл POM:

<groupId>org.tarrsalah</groupId>
  <artifactId>teams-client</artifactId>
  <version>0.0.99</version>
  <packaging>jar</packaging>

  <name>teams-client</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <netbeans.hint.license>apache20</netbeans.hint.license>
  </properties> 

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging</artifactId>
      <version>1.1.1</version>
      <scope>compile</scope>
    </dependency
    >
    <dependency>      
      <groupId>org.apache.poi</groupId>
      <artifactId>poi</artifactId>
      <version>3.8</version>
    </dependency>

    <dependency>
      <groupId>com.panemenu</groupId>
      <artifactId>tiwulfx</artifactId>
      <scope>compile</scope>
      <version>1.1</version>
      <type>jar</type>    
    </dependency>

    <dependency>
      <groupId>commons-beanutils</groupId>
      <artifactId>commons-beanutils</artifactId>
      <scope>compile</scope>
      <version>1.8.3</version>
    </dependency>
  </dependencies>     

  <build>
    <plugins>
      <plugin>
        <groupId>org.jvnet.jax-ws-commons</groupId>
        <artifactId>jaxws-maven-plugin</artifactId>
        <version>2.2</version>
        <executions>
          <execution>
            <goals>
              <goal>wsimport</goal>
            </goals>
            <phase>generate-sources</phase>
          </execution>
        </executions>
        <configuration>         
          <wsdlUrls>
            <wsdlUrl>http://localhost:8080/teams?wsdl</wsdlUrl>
          </wsdlUrls>
          <packageName>org.tarrsalah.teams.client.generated</packageName>          >
        </configuration>
      </plugin>            

      <plugin>
        <groupId>com.zenjava</groupId>
        <artifactId>javafx-maven-plugin</artifactId>
        <version> 1.5 </version>
        <configuration>         
          <mainClass>org.tarrsalah.teams.client.app.App</mainClass>
          <jarFileName>teams-client.jar</jarFileName>
          <vendor>tarrsalah</vendor>                                                           
        </configuration>                                    
      </plugin>
    </plugins>
  </build>
</project>

Я скачал jar-файл tiwulfx и добавил все зависимости в файл POM, а также Я установил его в свой локальный репозиторий maven (проект, использующий простую сборку netbeans/ant и предоставляющий только файл jar).

Я пытаюсь создать автономный исполняемый jar, когда я запускаю: mvn clean compile jfx: build-jar

Я получаю это сообщение об ошибке сборки:

[INFO] Java home is: /home/tarrsalah/local/jdk1.7.0_15/jre
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 14.445s
[INFO] Finished at: Sat Feb 23 23:39:31 CET 2013
[INFO] Final Memory: 21M/350M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal com.zenjava:javafx-maven-plugin:1.5:build-jar (default-cli) on project teams-client: Invocation of JavaFX method 'packageAsJar' failed with an error. It's possible this plugin is not compatible with the version of JavaFX you are using. InvocationTargetException: Error: Failed to create jar file teams-client-0.0.99-jfx.jar: duplicate entry: com/javafx/main/Main.class -> [Help 1]
[ERROR] 
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR] 
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoExecutionException

кажется, что классы javafx уже включены в файл jar tiwulfx и конфликтуют с классами javafx в JDK (я я использую 1.7u15), импортированный javafx-maven-plugin на этапе упаковки.

вот как выглядит дерево зависимостей:

[INFO] Scanning for projects...
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building teams-client 0.0.99
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-dependency-plugin:2.1:tree (default-cli) @ teams-client ---
[INFO] org.tarrsalah:teams-client:jar:0.0.99
[INFO] +- junit:junit:jar:3.8.1:test
[INFO] +- commons-logging:commons-logging:jar:1.1.1:compile
[INFO] +- org.apache.poi:poi:jar:3.8:compile
[INFO] |  \- commons-codec:commons-codec:jar:1.5:compile
[INFO] +- com.panemenu:tiwulfx:jar:1.1:compile
[INFO] \- commons-beanutils:commons-beanutils:jar:1.8.3:compile
[INFO]    \- (commons-logging:commons-logging:jar:1.1.1:compile - omitted for duplicate)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2.137s
[INFO] Finished at: Sun Feb 24 00:21:34 CET 2013
[INFO] Final Memory: 10M/163M
[INFO] ------------------------------------------------------------------------

Мой вопрос: как исключить классы javafx (пакет) из tiwulfx на этапе упаковки? это может быть тривиальным вопросом, потому что я новичок в экосистеме maven.

P.S: сгенерированный после операции jar работает без проблем, я просто пытаюсь добиться идеального результата сборки.


person Salah Eddine Taouririt    schedule 23.02.2013    source источник


Ответы (2)


Поскольку вам нужно добавить jar tiwulfx в репозиторий Maven вручную (он не создан Maven и нигде не размещен в репозитории Maven), вы можете сначала просто переупаковать его вручную. Просто откройте банку в zip-редакторе и удалите папку com/javafx. Затем запустите обычную install:install-file цель.

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

person artbristol    schedule 23.02.2013
comment
Спасибо @artbristol, надеюсь, мы сможем избавиться от этого глупого взлома сборки в следующем javafx 8 :) - person Salah Eddine Taouririt; 24.02.2013
comment
Вы также можете связаться с panemu и попросить, чтобы они не размещали код javafx в своих распространяемых jar-файлах - я действительно не вижу никаких веских причин для того, чтобы он был там в первую очередь. - person jewelsea; 24.02.2013

Теперь TiwulFX доступен в Maven.

<dependency>
    <groupId>com.panemu</groupId>
    <artifactId>tiwulfx</artifactId>
    <version>1.1</version>
</dependency>

Спасибо.

person amru    schedule 19.03.2013