javax.persistence в java-6-openjdk

Я пытаюсь выполнить сборку проекта Spring Roo (= Spring MVC + aspectj + hibernate) на моем сервере интеграции Hudson.

Проект настроен для использования

<dependency>
<groupId>javax.persistence</groupId>
<artifactId>com.springsource.javax.persistence</artifactId>
<version>1.0.0</version>
</dependency>

Сборка с моим локальным maven работает нормально, но среда на сервере, похоже, внедряет какую-то другую версию javax.persistence, что приводит к этим ошибкам:

[ERROR] The method createQuery(String) in the type EntityManager is not applicable for the arguments (String, Class<Long>)
[ERROR] The method createQuery(String) in the type EntityManager is not applicable for the arguments (String, Class<Folder>)

Сборка выполняется с помощью maven, и ее конфигурация:

Apache Maven 2.2.1 (rdebian-4)
Java version: 1.6.0_18
Java home: /usr/lib/jvm/java-6-openjdk/jre
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux" version: "2.6.32-5-amd64" arch: "amd64" Family: "unix"

edit: я не использовал одну и ту же версию roo локально и на сервере :)


person Nicolas    schedule 19.11.2010    source источник


Ответы (2)


Используете ли вы JPA2 в своем проекте?

JPA2 является частью Java EE 6, и, насколько я вижу, вы используете этого метода:

<T> TypedQuery<T> createQuery(java.lang.String qlString, java.lang.Class<T> resultClass)

Этот метод не существует в JPA1 (Java EE 5), в чем можно убедиться, изучив EntityManager, где только

Query createQuery(String qlString)

существует.

Все это означает, что Хадсон использует javax.persistence для JPA1. Я не использовал Hudson, поэтому вам придется выяснить, сможете ли вы заставить его использовать javax.persistence для JPA2.

person darioo    schedule 19.11.2010
comment
Хороший анализ (+1). Но я не думаю, что проблема в Хадсоне. Я думаю, что зависимость maven неверна - person Sean Patrick Floyd; 19.11.2010
comment
Я нашел свою проблему! Roo фактически генерирует код для вас. На моем локальном компьютере я использовал Roo 1.0.1, который генерирует код JPA1 и добавляет постоянную зависимость v1. Но на сервере я установил roo 1.1, который сгенерировал код JPA2, и попытался скомпилировать на основе моего зафиксированного pom.xml.. - person Nicolas; 19.11.2010

Что странно, это работает локально.

У вас есть зависимость от JPA 1, но вы используете методы JPA 2 (createQuery(query, class)).

Проверьте свой локальный путь к классам.

person Sean Patrick Floyd    schedule 19.11.2010