未在Maven Web应用程序中从jar文件加载的类

时间:2016-09-27 09:43:28

标签: maven java-ee maven-3 maven-tomcat-plugin maven-war-plugin

我正在尝试将sqlserver42.jar添加到我的maven webapp。

我按照这里给出的流程

Missing artifact com.microsoft.sqlserver:sqljdbc4:jar:4.0

我从微软网站下载了sqljdbc42.jar,并运行了以下命令。

mvn install:install-file -Dfile=sqljdbc42.jar -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc42 -Dversion=4.2.0 -Dpackaging=jar

它在我的本地存储库中添加了一个jar文件,并在项目pom.xml中包含以下内容

<dependency>
    <groupId>com.microsoft.sqlserver.jdbc</groupId>
    <artifactId>sqljdbc</artifactId>
    <version>${sqljdbc.version}</version>
</dependency>

我已经在属性中给出了“sqljdbc.version”的值,它解析为正确的值。在我更新maven项目并运行“mvn clean install”后,我能够在我的项目maven依赖项中看到jar文件(在Eclipse中)。

现在,当我尝试运行Web应用程序时,它无法从该jar中选择驱动程序类,并且我遇到以下异常:

java.sql.SQLException:没有为jdbc找到合适的驱动程序:sqlserver://datawh.database.windows.net:1433; database = datawh; user = username @ datawh; password = password;加密= TRUE; trustServerCertificate = FALSE; hostNameInCertificate = .database.windows.net; loginTimeout = 30     在java.sql.DriverManager.getConnection(DriverManager.java:689)     在java.sql.DriverManager.getConnection(DriverManager.java:270)     在com.sprt.rest.dao.AccidentDAOImpl.listAllAccidents(AccidentDAOImpl.java:184)     在com.sprt.rest.service.AccidentServiceImpl.listAllAccidents(AccidentServiceImpl.java:34)     在com.sprt.rest.controller.AccidentController.listAllAccidents(AccidentController.java:43)     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     ...... *

我为我的应用程序检查了生成的war文件,我注意到在WEB-INF / lib下也可以使用sqljdbc42-4.2.0 jar

我在另一个没有maven的简单java应用程序中使用我的本地存储库中的jar文件,它能够选择驱动程序类。我在maven web应用程序中做错了什么?

我的webapps 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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.b2b.rest</groupId>
    <artifactId>b2b-restapi</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>b2b-restapi Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <properties>
        <java-version>1.8</java-version>
        <springframework.version>4.3.1.RELEASE</springframework.version>
        <jackson.version>2.7.5</jackson.version>
        <servlet.version>3.1.0</servlet.version>
        <log4j.version>1.2.17</log4j.version>
        <hibernate.version>4.2.0.Final</hibernate.version>
        <springfox.version>2.5.0</springfox.version>
        <sqljdbc.version>4.2.0</sqljdbc.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${springframework.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>${servlet.version}</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>${log4j.version}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-validator</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>${springfox.version}</version>
        </dependency>
        <dependency>
            <groupId>com.microsoft.sqlserver</groupId>
            <artifactId>sqljdbc42</artifactId>
            <version>${sqljdbc.version}</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>b2b-restapi</finalName>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.tomcat.maven</groupId>
                    <artifactId>tomcat8-maven-plugin</artifactId>
                    <version>2.2</version>
                </plugin>
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <version>2.6</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                        <failOnMissingWebXml>false</failOnMissingWebXml>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.3</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

我用来连接数据库的连接字符串

JDBC:SQLSERVER://datawh.database.windows.net:1433;数据库= datawh;用户=用户名@ datawh;密码=密码;加密= TRUE; trustServerCertificate = FALSE; hostNameInCertificate = * database.windows.net。 ; loginTimeout = 30

我还必须提一下,我不是要连接到SQL Server数据库但是我正在尝试连接到Microsoft azure SQL Warehouse

1 个答案:

答案 0 :(得分:0)

我错误地将责任归咎于Maven。 Maven在war文件的lib文件夹中包含了相应的sqljdbc42.jar。所以它完成了它的工作。我尝试在普通(不是Maven)Web应用程序中复制相同的代码,但它仍然无法正常工作。

在尝试获取连接之前,我添加了以下语句

的Class.forName(&#34; com.microsoft.sqlserver.jdbc.SQLServerDriver&#34);

对于在核心java中完成的应用程序,如果通过&#34;配置构建路径&#34;添加外部库,奇怪的是,我没有必要明确地为Web应用程序添加该语句解决了这个问题对我而言。对于Web应用程序来说,这个类没有自动加载(仍然不明白为什么)