2010-06-24 2 views
1

Один из наших классов использует связанный jaxb api jdk 1.6. Когда я пытаюсь скомпилировать это с помощью maven (JAVA_HOME установлен в JDK 1.6, и он показывает в IDE, что maven работает с использованием JDK 1.6), я получаю ошибку класса, не найденную для библиотеки jaxb. рассматриваемый класс присутствует в rt.jar в папке JDK 1.6 lib. Есть идеи???Maven не собирает библиотеки JDK 1.6

+0

Какое исключение, в частности? – skaffman

ответ

2

Ну ... ошибка была связана с использованием одного из внутренних классов солнца, который не был доступен во время компиляции maven. Его интересный сценарий, хотя ...

В моем проекте используется пространство имен, предоставляемое внутренними библиотеками JAXB от солнца. Он скомпилирован в среде без затухания eclipse (с предупреждением), поскольку rt.jar был в пути к классам. Мы начали обманывать этот проект, и внезапно я получил ClassNotFound для этого. После некоторого гуглинга я наткнулся на эти два поста, которые заставили меня двигаться в правильном направлении.

http://forums.java.net/jive/thread.jspa?threadID=24225

http://www-01.ibm.com/support/docview.wss?rs=180&uid=swg1PK88316

BottomLine: Не использовать внутренние библиотеки (имена пакетов имеют внутреннее в них).

1

Попробуйте добавить этот плагин для вашего pom.xml Maven сборки секции:

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>2.3.1</version> 
      <configuration> 
       <source>1.6</source> 
       <target>1.6</target> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 

Update: Это не работает.

Вы пробовали это?

<dependency> 
    <groupId>javax.xml.bind</groupId> 
    <artifactId>jaxb-api</artifactId> 
    <version>2.1</version> 
    <scope>system</scope> 
    <systemPath>${java.home}/lib/rt.jar</systemPath> 
</dependency> 
+0

Нет ... это не работает .... – Manoj

+0

Попробуйте мое второе решение. Мне жаль, но я не могу воспроизвести вашу проблему в данный момент :-) – sourcerebels

+0

Hi SourceRebels, Спасибо за сообщение. Как указано в моем ответе, использование внутреннего класса (com.sun.xml.internal.bind.marshaller.NamespacePrefixMapper) не является хорошей практикой и, следовательно, вместо того, чтобы заставить его работать как есть, я удалил зависимость от внутренней реализации jaxb и изменил мой код для импорта из jaxb ri. Это решило мою проблему. – Manoj