2015-05-13 3 views
18

У меня есть внешний .jar, который нельзя импортировать из общедоступных репозиториев с помощью pom.xml, это sqljdbc41.jar.Добавить внешнюю библиотеку .jar в Spring boot .jar internal/lib

Я могу запустить проект локально из своей IDE, и все будет работать. Я сослалась на библиотеку после загрузки его так:

<dependency> 
    <groupId>com.microsoft.sqlserver</groupId> 
    <artifactId>sqljdbc41</artifactId> 
    <version>4.1</version> 
    <scope>system</scope> 
    <systemPath>${basedir}/lib/sqljdbc41.jar</systemPath> 
</dependency> 

Когда я бегу mvn clean package создать свой .jar файл и попытаться запустить созданный .jar, ошибка выскочит, в котором упоминается ссылки SQL Server не являются действительный. Затем я извлек мой .jar-файл и достаточно прав, все, что указано в файле pom.xml, правильно загружается и добавляется, однако мой SQL Server этого не делает.

Я могу, очень взломанным способом * просто вручную добавить sqljdbc41.jar в папку my/lib после того, как он был скомпилирован как .jar, и он будет работать, однако это кажется очень неоптимальным. Что было бы лучше?


* Открытие .jar файл с Winrar, идя в Lib папку/вручную выбрать мой sqljdbc41.jar файл, а затем убедитесь, чтобы выбрать нижнюю опцию Нет Сжатие влево, где Winrar дает вам компрессионные варианты, в случае, если найти это Google, и никто не ответил.

+1

Я использовал Artifactory или Sonatype Nexus для хранения артефакта Microsoft. Но я предпочитаю переключиться на JTDS: net.sourceforge.jtds: jtds: 1.3.1 (может быть новая версия). – Steve

+0

Я видел jtds и считаю, что это новый проект, но на данный момент это полностью построенное приложение, поэтому переход на JTDS невозможен из-за временных ограничений. Я изучу Artifactory/Sonatype Nexus, хотя. – Erick

ответ

22

Вы можете установить 'includeSystemScope' в true.

<plugin> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-maven-plugin</artifactId> 
    <configuration> 
    <includeSystemScope>true</includeSystemScope> 
    </configuration> 
</plugin> 
+2

это должно быть принято ответ – MeetJoeBlack

+0

Да, это сработало для меня. Раньше я не использовал true. Однострочный код изменил мою проблему. Благодаря Аллену –

17

Вы можете установить sqljdbc41.jar в локальном хранилище:

mvn install:install-file -Dfile=path/to/sqljdbc41.jar -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc41 -Dversion=4.1 -Dpackaging=jar 

А потом объявить зависимость как стандартная зависимость:

<dependency> 
    <groupId>com.microsoft.sqlserver</groupId> 
    <artifactId>sqljdbc41</artifactId> 
    <version>4.1</version> 
</dependency> 

Если вы используете удаленный репозиторий артефакта (связующий, archiva ...) вам также необходимо развернуть артефакт в этом репозитории. Вы можете найти больше здесь: https://maven.apache.org/guides/mini/guide-3rd-party-jars-remote.html

+0

Это работает и бонусные баллы за добавление удаленной информации, я настраиваю дистанционное репо.и теперь все работает отлично. Я также попробовал локальный метод, и это сработало. Большое спасибо. – Erick

+0

Спасибо за обмен. – Buminda

+0

Просто один момент - вы можете просто проверить, что MS Licensing может сказать о распространении. Я НЕ посмотрел сам, но у MS есть история ... быть трудной. – demaniak

4

еще один способ, вы можете поместить его в папку ресурсов, таких как ресурсы/Библиотека/xxx.jar, то конфиг в pom.xml так:

<dependency> 
<groupId>com.microsoft.sqlserver</groupId> 
<artifactId>sqljdbc41</artifactId> 
<version>4.1</version> 
<scope>system</scope> 
<systemPath>${basedir}/src/main/resources/lib/sqljdbc41.jar</systemPath> 

2

в моем случае, неисправность была предоставление номера версии без «точки» в теге:

 <dependency> 
     <groupId>jdk.tools</groupId> 
     <artifactId>jdk.tools</artifactId> 
     <scope>system</scope> 
     <version>1</version> 
     <systemPath>${basedir}/src/main/resources/lib/tools.jar</systemPath> 
    </dependency> 

Это один работает:

 <dependency> 
     <groupId>jdk.tools</groupId> 
     <artifactId>jdk.tools</artifactId> 
     <scope>system</scope> 
     <version>1.8</version> 
     <systemPath>${basedir}/src/main/resources/lib/tools.jar</systemPath> 
    </dependency> 
1

Весенняя ботинок: я также столкнулся с подобной проблемой и под кодом помог мне.

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
      <version>1.5.7.RELEASE</version> 
      <executions> 
       <execution> 
        <goals> 
         <goal>repackage</goal> 
        </goals> 
       </execution> 
      </executions> 
      <configuration> 
       <includeSystemScope>true</includeSystemScope> 
      </configuration> 
     </plugin> 
    </plugins> 
</build> 
Смежные вопросы