Maven не получает связанные библиотеки JDK 1.6

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


person Manoj    schedule 24.06.2010    source источник
comment
В чем конкретно исключение?   -  person skaffman    schedule 24.06.2010


Ответы (2)


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

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

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

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

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

person Manoj    schedule 25.06.2010

Попробуйте добавить этот плагин в раздел сборки 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>

Обновление: это не работает.

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

<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>
person sourcerebels    schedule 24.06.2010
comment
Попробуйте мое второе решение. Извините, но я не могу воспроизвести вашу проблему в данный момент :-) - person sourcerebels; 25.06.2010
comment
Привет SourceRebels, Спасибо за сообщение. Как указано в моем ответе, использование внутреннего класса (com.sun.xml.internal.bind.marshaller.NamespacePrefixMapper) не является хорошей практикой, и поэтому вместо того, чтобы заставить его работать как есть, я удалил зависимость от внутренней реализации jaxb и изменил мой код для импорта из jaxb ri. Это решило мою проблему. - person Manoj; 25.06.2010