maven 将外部库.jar添加到Sping Boot .jar internal /lib

bprjcwpo  于 2022-11-22  发布在  Maven
关注(0)|答案(8)|浏览(230)

我有一个外部的.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>

当我运行mvn clean package来创建我的.jar文件并尝试运行创建的.jar时,会弹出一个错误,指出SQL Server引用无效。然后我解压缩了我的.jar文件,非常正确,pom.xml文件中引用的所有内容都正确下载并添加,但是,我的SQL Server没有。
我可以,用一种非常笨拙的方式 *,在sqljdbc41.jar被编译为.jar后,手动将其添加到我的/lib文件夹中,它会工作,但这似乎非常不理想。还有什么更好的方法呢?

  • 用Winrar打开.jar文件,转到/lib文件夹,手动选择我的sqljdbc41.jar文件,然后确保选择左下方的无压缩选项,Winrar会给你压缩选项,以防你在谷歌上找到这个,但没有人回答。
w8ntj3qf

w8ntj3qf1#

您可以将“includeSystemScope”设置为true。

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

m1m5dgzv2#

您可以在本地系统信息库中安装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

a1o7rhls

a1o7rhls3#

另一种方法是,您可以将其放入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>
</dependency>
nkoocmlb

nkoocmlb4#

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

wd2eg0qa5#

它对我很有效:

project {root folder}/libs/ojdbc-11.2.0.3.jar

pom.xml:

<dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc</artifactId>
    <version>11.2.0.3</version>
    <scope>system</scope>
    <systemPath>${basedir}/libs/ojdbc-11.2.0.3.jar</systemPath>
</dependency>
<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <includeSystemScope>true</includeSystemScope>
    </configuration>
</plugin>
hwamh0ep

hwamh0ep6#

在我的例子中,错误是提供了一个在标记中没有“点”的版本号:

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

oxalkeyp7#

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>

因此,这里的MAJIC WORD<classifier>exec</classifier>,这将创建一个如下所示的jar结构,然后它很容易被spring-boot项目混淆为类路径上的maven依赖jar。

上述插件需要添加到项目A pom中,作为项目B中的依赖项。Spring文档第16.5节也对此进行了说明。

gj3fmq9x

gj3fmq9x8#

为了使用本地存储库,我们要使用的目标.jar文件必须在s2文件夹中。
1.文件可以手动获取并放置在相关位置(不首选)。通过控制台安装它也可以完成相同的过程。
1.相关的远程URL被写入.pom文件依赖项中,并在使用的IDE中刷新(验证)Intellij时自动将其放置在s2文件夹中。
1.通过中央存储库解决.pom文件依赖关系可以完成相同的过程。

**注意:**不应忘记ComponentScan,因为它与SpringBot上的jar工作相关。

相关问题