2016-09-27 18 views
0

Я пытаюсь добавить sqlserver42.jar в свой maven webapp.Класс, не загруженный из файла jar в веб-приложении Maven

Я последовал процесс дал здесь

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 

Он добавил файл банка в мой локальный репозиторий и я включил следующий в моем проекте pom.xml

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

Я уже дал значение «sqljdbc.version» в свойствах, и это разрешено к правильному значению. После того, как я обновил проект maven и выполнил «mvn clean install», я смог увидеть файлы jar в моих зависимостях maven проекта (в Eclipse).

Теперь, когда я пытаюсь запустить веб-приложение, оно не в состоянии выбрать класс драйвера из этой баночки и я получаю следующее исключение:

java.sql.SQLException: Нет подходящий драйвер не найден для jdbc: sqlserver: //datawh.database.windows.net: 1433; database = datawh; user = имя пользователя @ datawh; пароль = пароль; encrypt = true; trustServerCertificate = false; hostNameInCertificate = .database.windows.net; loginTimeout = 30 at java.sql.DriverManager.getConnection (DriverManager.java:689) at java.sql.DriverManager.getConnection (DriverManager.java:270) at com.sprt.rest.dao.AccidentDAOImpl.li stAllAccidents (AccidentDAOImpl.java:184) на com.sprt.rest.service.AccidentServiceImpl.listAllAccidents (AccidentServiceImpl.java:34) на com.sprt.rest.controller.AccidentController.listAllAccidents (AccidentController.java:43) на sun.reflect.NativeMethodAccessorImpl.invoke0 (Родной метод) на sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43) ...... *

Я проверил сгенерированный файл войны для моего приложения, и я заметил, что в WEB-INF/Lib также sqljdbc42-4.2.0 банка доступен

Я использовал файл jar в своем локальном репозитории в другом простом java-приложении без maven, и он смог выбрать класс драйвера. Что я делаю неправильно в своем веб-приложении maven?

Моего 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 Пользователь user = имя пользователя @ datawh; пароль = пароль; encrypt = true; trustServerCertificate = false; hostNameInCertificate = *. database.windows.net; loginTimeout = 30

Я также должен упомянуть, что я не пытаюсь подключиться к SQL-серверу DB, но я пытаюсь подключиться к Microsoft azure SQL Warehouse

+0

См. Http://stackoverflow.com/questions/5616898/java-sql-sqlexception-no-suitable-driver -found-for-jdbcmicrosoftsqlserver Похоже, вам нужно изменить базу данных = на базу данныхName = – DaveRlz

+0

Здравствуйте .. спасибо за ваш комментарий. Я понял, что я не использовал строку подключения, которую я использую для подключения к моей базе данных. Теперь он обновляется в вопросе и, пожалуйста, обратите внимание, что я не подключаюсь к SQL-серверу SQL, но Azure SQL Warehouse .. Тот же банку был использован для подключения из основного приложения Java (без maven), и он работает нормально. Не уверен что проблема с Maven is .. – user2123507

+0

Я не знаком с Azure, но я вижу здесь: https://msdn.microsoft.com/en-us/library/ms378422%28v=sql.110%29.aspx, что драйверы, которые вы используете, предназначены для Java8 - какая версия вы используете? – DaveRlz

ответ

0

Я был неправ, чтобы возложить вину на Maven за это. Maven включил соответствующий файл sqljdbc42.jar в папку lib в файле war.Таким образом, это сделало работу. Я попытался воспроизвести тот же код в обычном (не Maven) веб-приложении, и он все еще не работает.

Я добавил следующее заявление, прежде чем пытаться получить на соединение

Class.forName ("com.microsoft.sqlserver.jdbc.SQLServerDriver");

Для приложения, которое выполняется в ядре Java, и если внешние библиотеки добавляются через «Настроить путь сборки», странно мне не нужно было явно делать это для веб-приложения, добавляя, что это решение решило проблему для меня. Это похоже на веб-приложение, этот класс не загружается автоматически (все еще не понимаю почему)