我有一个外部.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没有。
我可以,以一种非常hacky的方式*只需将sqljdbc41.jar
手动添加到我的/ lib文件夹中,然后将其编译为.jar,它就可以工作了,但是看起来似乎非常不理想。什么是更好的方法?
*使用Winrar打开.jar文件,转到/ lib文件夹,手动选择我的sqljdbc41.jar
文件,然后确保在左下角选择No Compression选项,Winrar为您提供压缩选项,以防万一通过谷歌找到这个,没有人回答。
答案 0 :(得分:64)
你可以设置“includeSystemScope”&#39;为真。
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<includeSystemScope>true</includeSystemScope>
</configuration>
</plugin>
答案 1 :(得分:20)
您可以在本地存储库中安装sqljdbc41.jar:
\
然后将依赖声明为标准依赖:
mvn install:install-file -Dfile=path/to/sqljdbc41.jar -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc41 -Dversion=4.1 -Dpackaging=jar
如果您使用远程工件存储库(nexus,archiva ...),则还需要在此存储库上部署工件。您可以在此处找到更多信息:{{3}}
答案 2 :(得分:8)
另一种方法,你可以把它放到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>
答案 3 :(得分:3)
就我而言,错误是在标签中提供没有“dot”的版本号:
<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>
答案 4 :(得分:1)
在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>
答案 5 :(得分:0)
它对我有用:
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>
答案 6 :(得分:0)
当 Spring-Boot 项目与maven或gradle插件一起使用时,它们默认情况下将应用程序打包为可执行jar。 这些可执行jar不能用作任何其他 Spring-Boot 项目中的依赖项,因为该可执行jar在 BOOT-INF / classes 文件夹中添加类。这意味着当将可执行jar用作依赖项时,找不到它们,因为依赖项jar还将具有如下所示的相同类路径结构。
如果我们要使用project-A作为project-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 ({MAJIC WORD ))将创建如下所示的jar结构,然后它可以很容易地被spring-boot项目混淆为类路径上的maven依赖jar。 / p>
需要在project-A pom中添加以上插件,该插件将在project-B中用作依赖项。在春天documentation第16.5节中对此进行了解释。也是