Problem running runnable JAR: Unable to load class [com.microsoft.sqlserver.jdbc.Sqlserverdriver]

Asked

Viewed 746 times

2

I am facing the following problem: we are in the development phase of a project, which involves the following technologies, SQL Server, Hibernate, Maven, Quartz and java.

After finishing one of the coding phases we try to generate a runnable jar, but at the time of executing it we come across a number of errors involving the jdbc driver that we can’t solve.

Error generated after JAR execution:

C:\Users\-----\workspace\CadastroProcessosMaven\CadastroProcessosMaven\target>java -jar extrator-acoesnovas-jar-with-dependencies.jar
ERROR StatusLogger No log4j2 configuration file found. Using default    configuration: logging only errors to the console. 
Exception in thread "main" java.lang.ExceptionInInitializerError at dao.MCPCPProcessoDAO.buscarProcessosPorSistema(MCPCPProcessoDAO.java:116)
at MainPackage.Crawler.consultarProcessos(Crawler.java:31)
at MainPackage.Crawler.main(Crawler.java:26)
Caused by: javax.persistence.PersistenceException: Unable to build entity manager factory
at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:66)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:39)
at dao.util.ConnectionFactory.<clinit>(ConnectionFactory.java:20)... 3 more
Caused by: org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]
at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:244)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:208)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189)
    at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureServic e(StandardServiceRegistryImpl.java:94)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:217)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:352)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:770)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:797)
    at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:58)
    ... 6 more
Caused by: org.hibernate.boot.registry.classloading.spi.ClassLoadingException: Unable to load class [com.microsoft.sqlserver.jdbc.SQLServerDriver]
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:229)
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.loadDriverIfPossible(DriverManagerConnectionProviderImpl.java:183)

    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildCreator(DriverManagerConnectionProviderImpl.java:139)
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:78)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:217)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:189)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess(JdbcEnvironmentInitiator.java:145)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:66)
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35)
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:88)
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:234)
    ... 17 more
Caused by: java.lang.ClassNotFoundException: Could not load requested class : com.microsoft.sqlserver.jdbc.SQLServerDriver
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl$AggregatedClassLoader.findClass(ClassLoaderServiceImpl.java:217)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at org.hibernate.boot.registry.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:226)
    ... 28 more

Filing cabinet 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   http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>CadastroProcessos</artifactId>
<version>1.0</version>

<build>
    <finalName>extrator-acoesnovas</finalName>
    <sourceDirectory>src/main/java</sourceDirectory>
    <resources>
        <resource>
            <directory>src/main/resources</directory>
        </resource>
    </resources>
    <plugins>
        <!-- Maven Compiler Plugin -->
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.3</version>
            <configuration>
                <source>1.8</source>
                <target>1.8</target>
            </configuration>
        </plugin>

        <!-- DEFINE AS CONFIGURAÇÕES DO MAVEN ASSEMBLER -->
        <plugin>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <archive>

                    <!-- DEFINE QUAL É A CLASSE MAIN DA APLICAÇÃO -->
                    <manifest>
                        <addClasspath>true</addClasspath>
                        <mainClass>MainPackage.CrawlerVivo</mainClass>
                    </manifest>
                </archive>

                <!-- ADICIONO AO NOME DO JAR FINAL UM COMPLEMENTO DIZENDO QUE ELE CONTÉM 
                    AS DEPENDÊNCIAS -->

                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
            </configuration>
            <executions>
                <execution>

                    <!-- DETERMINO QUE O JAR GERADO INCLUIRÁ AS DEPENDÊNCIAS E ELAS SERÃO 
                        EMPACOTADAS JUNTO COM O PROJETO EM UM ÚNICO JAR -->

                    <id>make-my-jar-with-dependencies</id>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>

</build>
<dependencies>

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>2.2.2</version>
    </dependency>

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.2.2</version>
    </dependency>

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>2.2.2</version>
    </dependency>

    <dependency>
        <groupId>org.apache.pdfbox</groupId>
        <artifactId>pdfbox</artifactId>
        <version>1.8.10</version>
    </dependency>
    <dependency>
        <groupId>net.sourceforge.htmlunit</groupId>
        <artifactId>htmlunit</artifactId>
        <version>2.15</version>
    </dependency>
    <dependency>
        <groupId>net.sourceforge.htmlunit</groupId>
        <artifactId>htmlunit-core-js</artifactId>
        <version>2.15</version>
    </dependency>
    <dependency>
        <groupId>org.jsoup</groupId>
        <artifactId>jsoup</artifactId>
        <version>1.8.3</version>
    </dependency>
    <dependency>
        <groupId>net.sourceforge.jexcelapi</groupId>
        <artifactId>jxl</artifactId>
        <version>2.6.12</version>
    </dependency>
    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-core</artifactId>
        <version>5.0.1.Final</version>
    </dependency>

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

    <dependency>
        <groupId>javax.mail</groupId>
        <artifactId>mail</artifactId>
        <version>1.4</version>
    </dependency>
    <dependency>
        <groupId>de.intarsys.opensource</groupId>
        <artifactId>isrt</artifactId>
        <version>4.10</version>
    </dependency>

    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz</artifactId>
        <version>2.2.2</version>
    </dependency>
    <dependency>
        <groupId>org.quartz-scheduler</groupId>
        <artifactId>quartz-jobs</artifactId>
        <version>2.2.2</version>
    </dependency>

    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.3</version>
    </dependency>

    <dependency>
        <groupId>com.microsoft.sqlserver</groupId>
        <artifactId>sqljdbc4</artifactId>
        <version>3.0</version>
        <scope>system</scope>
        <systemPath>${basedir}/lib/sqljdbc4.jar</systemPath>
        <optional>true</optional>
    </dependency>

</dependencies>
</project>

Log Build Maven:

[INFO] Error stacktraces are turned on.
[INFO] Scanning for projects...
[WARNING] 
[WARNING] Some problems were encountered while building the effective model           
[WARNING] 'dependencies.dependency.systemPath' for    com.microsoft.sqlserver:sqljdbc4:jar should not point at files within the project directory, ${basedir}/lib/sqljdbc4.jar will be unresolvable by dependent projects @ line 134, column 16
[WARNING] 
[WARNING] It is highly recommended to fix these problems because they threaten the stability of your build.
[WARNING] 
[WARNING] For this reason, future Maven versions might no longer support      building such malformed projects.
[WARNING] 
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building CadastroProcessos 1.0
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ CadastroProcessos ---
[INFO] Deleting C:\Users\-----\workspace\CadastroProcessosFinal\CadastroProcessosMaven\target
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ CadastroProcessos ---
[WARNING] Using platform encoding (Cp1252 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 2 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.3:compile (default-compile) @    CadastroProcessos ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding Cp1252, i.e. build is platform dependent!
[INFO] Compiling 82 source files to C:\Users\------\workspace\CadastroProcessosFinal\CadastroProcessosMaven\target\classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ CadastroProcessos ---
[INFO] Not copying test resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.3:testCompile (default-testCompile) @ CadastroProcessos ---
[INFO] Not compiling test sources
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ CadastroProcessos ---
[INFO] Tests are skipped.
[INFO] 
[INFO] --- maven-jar-plugin:2.4:jar (default-jar) @ CadastroProcessos ---
[INFO] Building jar: C:\Users\-----\workspace\CadastroProcessosFinal\CadastroProcessosMaven\target\CadastroProcessos-1.0.jar
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @   CadastroProcessos ---
[INFO] Installing C:\Users\------\workspace\CadastroProcessosFinal\CadastroProcessosMaven\target\CadastroProcessos-1.0.jar to C:\Users\-----\.m2\repository\br\com\finchsolucoes\CadastroProcessos\1.0\CadastroProcessos-1.0.jar
[INFO] Installing C:\Users\-----\workspace\CadastroProcessosFinal\CadastroProcessosMaven\pom.xml to C:\Users\------\.m2\repository\br\com\finchsolucoes\CadastroProcessos\1.0\CadastroProcessos-1.0.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 47.167 s
[INFO] Finished at: 2015-10-23T08:28:15-02:00
[INFO] Final Memory: 31M/494M
[INFO] ------------------------------------------------------------------------
  • The error is because the driver is probably not in the classpath. Only with this you can not know why. Include the log, in text, not image, horrible to read it. Include your pom.xml, or the part of the build in it that generates the jar.

  • performed the edits you asked for, I’m sorry, if you can help, there you are!

  • See that is launched a ClassNotFoundException and you define the dependence of driver SQL Server as optional (<optional>true</optional>), then really the dependency is not in the classpath. Have you tried removing this section of pom.xml?

  • I did what you said, keep making the same mistake

  • And check if the driver was packaged, did you check? I will try to simulate here as soon as possible

  • so it was not, problem eh that it does not find the driver jdbc sqlServer, do not know if it is pq microsoft does not have in public repository, I tried to download the jar in hand put in a project folder, point the dependency to this folder, also did not work, ie Maven can not download, and if I go down and point to the jar tbm doesn’t work

  • Do not have in public repository even no, or install or even reference

  • Good for those who are suffering there with jdbcDriver, we can solve, create manually inside the folder m2 of Maven a folder for dependency of sql server, download manually, paste inside the folder, build, generate the jar and run, a whore gambiarra more was the only way it worked, because by public repository Maven can not find

Show 3 more comments

1 answer

1

The root of your problem is a ClassNotFoundException, because there is no class in the classpath of the application.

As discussed the absence of this class in the classpath is due to the fact that it is not being packaged.

There is no dependency (as far as I know) on a public repository, so you can do it in two ways:

  • install the dependency in your local repository and then refer it to your pom.xml. To do this, run it from the directory your driver jar file is in (or enter full path in file):
mvn install:install-file -Dfile=sqljdbc4.jar -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc4 -Dversion=4.0 -Dpackaging=jar

And in the pom.xml:

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>sqljdbc4</artifactId>
    <version>4.0</version>
</dependency>
<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>sqljdbc4</artifactId>
    <version>4.0</version>
    <scope>system</scope>
    <!-- normalmente path não empacotado e que deve estar -->
    <!-- presente no ambiente em que o projeto será executado -->
    <systemPath>${propriedade.path}/sqljdbc4.jar</systemPath>
</dependency>
  • I did it in a way that worked here, this in the last comment of the above answer, I will test your way because it looks better, thank you

Browser other questions tagged

You are not signed in. Login or sign up in order to post.