Подтвердить что ты не робот

Добавить внешнюю библиотеку .jar в Spring boot.jar internal/lib

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

Я могу запустить проект локально из своей 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, и никто не ответил.

4b9b3361

Ответ 1

Вы можете установить 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>

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

Ответ 2

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

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

Ответ 3

иначе вы можете поместить его в папку ресурсов, например ресурсы /lib/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>

Ответ 4

В моем случае ошибка заключалась в предоставлении номера версии без "точки" в теге:

        <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>

Ответ 5

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

<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>