3
respostas

Gero o .jar executável, mas a exceção, No Persistence provider for EntityManager named loja, é lançada

Boa tarde,

Estou tentando gerar um .jar executável desse projeto, então selecionei export -> Runnable JAR file -> defini a classe que tem o main -> Package required libraries into generated JAR, depois executei o .jar com java -jar teste.jar, mas essa exceção é lançada:

OBS: Tentei gerar o .jar executável com o projeto completo que a Alura disponibilizou aqui, mas é lançado o mesmo erro.

Quero gerar o .jar executável, pois vou utilizar JPA/Hibernate em um projeto meu, mas é lançado também o mesmo erro.

C:\Users\Alice>java -jar teste.jar mai 02, 2021 2:32:39 PM org.hibernate.jpa.boot.internal.PersistenceXmlParser doResolve INFO: HHH000318: Could not find any META-INF/persistence.xml file in the classpath Exception in thread "main" java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566) at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:61) Caused by: java.lang.ExceptionInInitializerError at br.com.alura.testes.OperacoesProduto.cadastrarProduto(OperacoesProduto.java:89) at br.com.alura.testes.OperacoesProduto.main(OperacoesProduto.java:18) ... 5 more Caused by: javax.persistence.PersistenceException: No Persistence provider for EntityManager named loja at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:85) at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54) at br.com.alura.util.JPAUtil.(JPAUtil.java:9) ... 7 more

3 respostas

Oi Alice,

Você deve gerar o jar via Maven, por linha de comando:

mvn clean package

Ou no Eclipse, clicando com o botão direito no projeto e indo em: Run as-> Maven Install.

O Jar será gerado no diretório target

Olá, obrigada, fiz isso. Defini a mainclass que será executada usando o plugin maven-jar-plugin e rodei mvn clean package na pasta do projeto, mas foi lançada essa exceção:

C:\Users\Alice\eclipse-workspace-spring\loja\target>java -jar loja-0.0.1-SNAPSHOT.jar Exception in thread "main" java.lang.NoClassDefFoundError: javax/persistence/Persistence at br.com.alura.util.JPAUtil.(JPAUtil.java:9) at br.com.alura.testes.OperacoesPedido.populaBancoDeDados(OperacoesPedido.java:73) at br.com.alura.testes.OperacoesPedido.main(OperacoesPedido.java:24) Caused by: java.lang.ClassNotFoundException: javax.persistence.Persistence at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581) at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521) ... 3 more

Meu pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>br.com.alura</groupId>
    <artifactId>loja</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.0</version>
                <configuration>
                    <release>11</release>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>3.0.2</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>br.com.alura.testes.OperacoesPedido</mainClass>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.4.31.Final</version>
        </dependency>

        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>1.4.200</version>
        </dependency>
    </dependencies>
</project> 

Segue o erro formatado: Ainda não consegui resolver.

mai 22, 2021 1:09:24 PM org.hibernate.jpa.boot.internal.PersistenceXmlParser doResolve
INFO: HHH000318: Could not find any META-INF/persistence.xml file in the classpath
Exception in thread "main" java.lang.reflect.InvocationTargetException
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoader.java:61)
Caused by: java.lang.ExceptionInInitializerError
        at br.com.alura.testes.OperacoesPedido.populaBancoDeDados(OperacoesPedido.java:73)
        at br.com.alura.testes.OperacoesPedido.main(OperacoesPedido.java:24)
        ... 5 more
Caused by: javax.persistence.PersistenceException: No Persistence provider for EntityManager named loja
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:85)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
        at br.com.alura.util.JPAUtil.<clinit>(JPAUtil.java:9)
        ... 7 more