将外部库.jar添加到Spring引导.jar内部/ lib

Eri*_*ick 43 maven spring-boot

我有一个外部.jar,无法使用pom.xml从公共存储库导入,它是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>
Run Code Online (Sandbox Code Playgroud)

当我运行mvn clean package创建我的.jar文件并尝试运行创建的.jar时,会弹出一个错误,提到SQL Server引用无效.然后,我提取了我的.jar文件,并且确实,pom.xml文件中引用的所有内容都被正确下载并添加,但是,我的SQL Server没有.

我可以,以一种非常hacky的方式*只需sqljdbc41.jar在编译为.jar后手动添加到我的/ lib文件夹,它就可以工作,但这似乎非常不理想.什么是更好的方法?


*打开用WinRAR .jar文件,去/ lib文件夹,手动选择我的sqljdbc41.jar文件,然后确保选择无压缩选项左下方那里的Winrar为您提供了压缩选项,如果你通过谷歌找到这一点,没有人回答.

小智 81

你可以将'includeSystemScope'设置为true.

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <configuration>
    <includeSystemScope>true</includeSystemScope>
  </configuration>
</plugin>
Run Code Online (Sandbox Code Playgroud)

  • 在找到这个 answar 之前,我快要疯了。我试图将外部 JAR 添加到基于 Spring Boot 2 的项目中,但它从未包含在 BOOT-INF/lib 目录中。但这就像一个魅力。:) (2认同)

小智 21

您可以在本地存储库中安装sqljdbc41.jar:

mvn install:install-file -Dfile=path/to/sqljdbc41.jar -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc41 -Dversion=4.1 -Dpackaging=jar
Run Code Online (Sandbox Code Playgroud)

然后将依赖项声明为标准依赖项:

<dependency>
   <groupId>com.microsoft.sqlserver</groupId>
   <artifactId>sqljdbc41</artifactId>
   <version>4.1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

如果您使用远程工件存储库(nexus,archiva ...),则还需要在此存储库上部署工件.你可以在这里找到更多:https://maven.apache.org/guides/mini/guide-3rd-party-jars-remote.html


Cle*_*.Xu 9

另一种方法,你可以把它放到resources文件夹中,比如resources/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>
Run Code Online (Sandbox Code Playgroud)


yux*_*bin 5

这个对我有用:

project {root folder}/libs/ojdbc-11.2.0.3.jar
Run Code Online (Sandbox Code Playgroud)

pom.xml:

project {root folder}/libs/ojdbc-11.2.0.3.jar
Run Code Online (Sandbox Code Playgroud)


Waq*_*med 5

Spring-Boot项目与 maven 或 gradle 插件一起使用时,它们默认将应用程序打包为可执行 jar。这些可执行 jar 不能在任何其他Spring-Boot项目中用作依赖项,因为可执行 jar 在BOOT-INF/classes文件夹中添加类。这意味着当可执行 jar 用作依赖项时无法找到它们,因为依赖项 jar 也将具有相同的类路径结构,如下所示。

在此输入图像描述

如果我们想使用项目 A 作为项目 B 中的 Maven 依赖项,那么我们必须有两个工件。为了生成两种工件(一种可用作依赖项,另一种是可执行的),必须指定一个分类器。该分类器应用于可执行存档的名称,保留默认存档用作依赖项。要在Maven中配置exec的分类器,可以使用以下配置:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <classifier>exec</classifier>
            </configuration>
        </plugin>
    </plugins>
</build>
Run Code Online (Sandbox Code Playgroud)

所以这里的MAJIC WORD<classifier>exec</classifier>这将创建一个如下的jar结构,然后它可以很容易地被spring-boot项目用作类路径上的maven依赖jar。

在此输入图像描述

上述插件需要添加到项目 A pom 中,该 pom 将用作项目 B 中的依赖项。Spring文档第 16.5 节对此进行了同样的解释。以及。