Я написал (с Eclipse) небольшую программу, которая использует JPA. Теперь я хочу вручную скомпилировать и запустить эту программу с помощью командной строки. Я также разместил все исходные файлы в отдельном каталоге (не в рабочем пространстве Eclipse). Каталог выглядит следующим образом:PersistenceException: поставщик с постоянством для EntityManager с именем
directory
|- src
| |- javax
| | |- persistence
| | |- <...>
| |- main
| |- META-INF
| | |- javax
| | | |- persistence
| | |- persistence.xml
| |
| |- <..>
|- run.bat
Примечание: Я нарочно есть 2 javax каталоги со всеми файлами классов в них.
run.bat содержит строки:
javac -cp ./src ./src/main/Main.java
java -cp ./src main.Main
Насколько я понимаю, я получаю ошибки не из-за проблемы с META-INF файл/persistence.xml (не так, как много других людей на StackOverflow) , Я говорю так, потому что я прописан следующие строки в моем Main:
<...>
Thread.currentThread().setContextClassLoader(new ClassLoader() {
@Override
public Enumeration<URL> getResources(String name) throws IOException {
System.out.println("resource requested=" + name);
if (name.equals("META-INF/services/javax.persistence.spi.PersistenceProvider")) {
<--- MARK ---> return Collections.enumeration(Arrays.asList(new File("src/javax/persistence/spi/PersistenceProvider.class")
.toURI().toURL()));
} else if (name.equals("META-INF/persistence.xml")) {
return Collections.enumeration(Arrays.asList(new File("src/META-INF/persistence.xml")
.toURI().toURL()));
}
return super.getResources(name);
}
});
emFactory = Persistence.createEntityManagerFactory("uzduotis");
<...>
Итак, когда я запускаю run.bat программа печатает:
resource name=name=META-INF/services/javax.persistence.spi.PersistenceProvider
(он никогда не попадает в ту часть, где программа просит "META-INF/persistence.xml" ресурс)
то ломается и дает мне ошибку:
Если я изменяю ОТМЕТИЛИ заявление
return super.getResources("src/" + name);
то ошибка говорит только:
Что мне не хватает?
Peristence.xml:
EDIT: Программа Prety проста: нет спящего режима, всего несколько классов, которые извлекать некоторую информацию от REST службы и работы с ним, в основном с использованием javax и внешние библиотеки w3c. Фото исследователя проекта, чтобы показать его простоту.
EDIT 2. РЕШЕНИЕ
Я нашел способ, чтобы заставить его работать, хотя я не совсем уверен, о причинах. Так если кто-нибудь может ответить, почему следующие изменения решить вопрос, который я бы с удовольствием отметить его в качестве ответа
я добавил EclipseLink и MySQL-разъем-Java баночки с Src каталог. eclipselink.jar исправил проблему, и mysql-connector-java.jar был необходим, потому что я получил другую ошибку (я работаю с базой данных afterall). Наконец, я изменил строку в перспективе.летучая мышь файл из
java -cp ./src main.Main
в
java -cp ./src;./src/eclipselink.jar;./src/mysql-connector-java.jar; main.Main
Возможно, этот ответ может помочь: http://stackoverflow.com/a/1285436/1506009 – Rozart
Какая часть этого сообщения действительно может решить мою проблему? – sdafsDGZvb
Ну, похоже, что вы не указали поставщика персистентности в файле persistence.xml. Поэтому я попытаюсь указать его как в связанном ответе. Просто попробуйте добавить ' org.hibernate.ejb.HibernatePersistence ' inside '<константа unit name =" uzduotis ">' element. Помните, что вам нужно иметь зависимости, разрешенные для HibernatePersistence. –
Rozart