有时候项目里需要使用一些没有源码的三方jar包,通过在pom里添加systemPath来指明jar包的位置,在本地调试的时候一切ok,但是同样的代码通过mvn package发到线上运行就提示依赖的jar包找不到。

当引用第三方包,且没有源代码时候,可以使用systemPath

<dependency>
    <groupId>ctec</groupId>
    <artifactId>xxx-core</artifactId>
    <version>1.0</version>
    <scope>system</scope>
    <systemPath>${project.basedir}/src/main/resources/libs/xxxxxx.jar</systemPath>
</dependency>

划重点!!!敲黑板!!!下面的一步配置也是最重要的一步,缺少这一步,就会导致虽然本地可以运行,但是只要使用mvn打包就不行,因为scope为system的maven默认是不打包进去的。

需要使用true

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

pom中的scope类型

dependency的scope有五种:

  1. compile:默认值 他表示被依赖项目需要参与当前项目的编译,还有后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去

  2. test:依赖项目仅仅参与测试相关的工作,包括测试代码的编译和执行,不会被打包,例如junit

  3. runtime:表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比,跳过了编译而已。例如JDBC驱动,适用运行和测试阶段

  4. provided:打包的时候可以不用包进去,别的设施会提供。事实上该依赖理论上可以参与编译,测试,运行等周期。相当于compile,但是打包阶段做了exclude操作

  5. system:从参与度来说,和provided相同,不过被依赖项不会从maven仓库下载,而是从本地文件系统拿。需要添加systemPath的属性来定义路径

由此可见,scope为system的依赖,maven默认是不打包进去的,这也是导致线上提示jar缺失的原因。如果需要将scope为system的依赖也打包进来,需要添加true。

常见内置变量

  • ${project.basedir} 项目根目录
  • ${project.build.directory} 构建目录,缺省为target
  • ${project.build.outputDirectory} 构建过程输出目录,缺省为target/classes
  • ${project.build.finalName}产出物名称,缺省为${project.artifactId}-${project.version}
  • ${project.packaging} 打包类型,缺省为jar
  • ${project.xxx} 当前pom文件的任意节点的内容
有时候项目里需要使用一些没有源码的三方jar包,通过在pom里添加systemPath来指明jar包的位置,在本地调试的时候一切ok当引用第三方包,且没有源代码时候,可以使用systemPath来挂载本地的三方jar包,同时也需要使用<includeSystemScope>true</includeSystemScope>,不然mvn package的时候不会将本地jar包打包进来,但是同样的代码通过mvn package发到线上运行就提示依赖的jar包找不到。 在打包运行后报错NoClassDefFoundError,不到文件: 本地启动的时候自己本地项目知道根据你导入jar的路径去加载jar包,所以会没问题。但是打包之后,这个jar包是不会被打包进去的,导致报错。所以,我们想要正常运行,就需要把自己的jar包打包到项目中; 1.首先在pom中添加本地jar包的依赖 其中groupIdartifactI... 1.compile:默认值 他表示被依赖项目需要参与当前项目的编译,还有后续的测试,运行周期也参与其中,是一个比较强的依赖。打包的时候通常需要包含进去 2.test:依赖项目仅仅参与测试相关的工作,包括测试代码的编译和执行,不会被打包,例如:junit 3.runtime:表示被依赖项目无需参与项目的编译,不过后期的测试和运行周期需要其参与。与compile相比
compile 默认的scope,表示 dependency 都可以在生命周期中使用。而且,这些dependencies 会传递到依赖的项目中。适用于所有阶段,会随着项目一起发布 provided 跟compile相似,但是表明了dependency 由JDK或者容器提供,例如Ser...
### 回答1: 在 Spring Boot 中引入本地 jar 包的方法有多种,其中一种是将 jar 包放到项目的 lib 文件夹中,然后在 pom.xml 中加入如下依赖: <dependency> <groupId>com.example</groupId> <artifactId>example</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>${project.basedir}/lib/example.jar</systemPath> </dependency> 其中 `groupId`、`artifactId` 和 `version` 是 jar 包的相关信息, `systemPath` 是 jar 包的绝对路径。 还有一种是将 jar 包放到本地仓库中, 需要在pom.xml中加入如下依赖 <dependency> <groupId>com.example</groupId> <artifactId>example</artifactId> <version>1.0</version> </dependency> 需要在settings.xml中加入本地仓库的地址 <localRepository>path-to-your-local-repo</localRepository> 然后执行 `mvn install:install-file -Dfile=path-to-your-jar -DgroupId=com.example -DartifactId=example -Dversion=1.0 -Dpackaging=jar` 可以参考 https://maven.apache.org/guides/mini/guide-3rd-party-jars-local.html 来了解更多关于本地 jar 包的引入方法。 ### 回答2: 随着Java开发的不断发展和变化,引入外部库或jar包Java开发的一个重要问题。在SpringBoot中引入本地jar包可以帮助开发人员轻松集成第三方库,使代码更加模块化和易于维护。在本文中,我们将介绍如何在SpringBoot中引入本地jar包。 1. 将jar包导入本地Maven仓库 首先,我们需要将要引入的jar包导入本地Maven仓库。可以使用以下命令: mvn install:install-file -DgroupId=your.group.id \ -DartifactId=your-artifact-id \ -Dversion=your-version \ -Dfile=the-jar-file.jar \ -Dpackaging=jar \ -DgeneratePom=true 执行此命令后,jar包将被复制到本地Maven仓库中,并将其添加到POM.xml文件中。 2. 在POM.xml中添加依赖项 在POM.xml文件中,我们需要添加一个依赖项来引用本地jar包。可以使用以下代码: <dependency> <groupId>your.group.id</groupId> <artifactId>your-artifact-id</artifactId> <version>your-version</version> </dependency> 请注意,groupId,artifactId和version应与上一步中用于导入jar包的命令一致。 3. 清理并构建项目 在POM.xml文件中添加依赖项后,我们需要清理并构建项目。可以使用以下命令: mvn clean install 这将清理并构建项目,并将所有依赖项打包到可执行的jar文件中。 在SpringBoot中引入本地jar包是一项非常简单和重要的任务。上述步骤可以帮助我们轻松实现这项任务,以便能够方便地使用第三方库和jar包来开发企业级Java应用程序。 ### 回答3: Spring Boot是一个基于Spring Framework的快速开发应用程序的框架。在进行Spring Boot项目开发时,通常需要引入一些外部依赖,例如Maven或Gradle。但是,如果需要使用本地的jar包,该怎么引入呢? 首先,我们可以将需要引入的jar包导入本地Maven仓库中。例如,我们将要引入的jar包命名为my-library.jar,并将其导入本地Maven仓库中。使用以下命令: mvn install:install-file -Dfile=c:/my-library.jar -DgroupId=com.my-library -DartifactId=my-library -Dversion=1.0 -Dpackaging=jar 其中,-Dfile为要安装的jar包的路径,-DgroupId为组标识符,-DartifactId为工件标识符,-Dversion为版本号,-Dpackaging为打包格式。 完成以上步骤之后,我们可以在项目的POM文件中添加以下依赖项: <dependency> <groupId>com.my-library</groupId> <artifactId>my-library</artifactId> <version>1.0</version> </dependency> 这样,我们就成功地引入了本地jar包。 除了将jar包导入本地仓库外,我们还可以将其直接放入项目中。例如,我们可以将my-library.jar放入项目根目录的lib文件夹中。然后,在POM文件中添加以下依赖项: <dependency> <groupId>com.my-library</groupId> <artifactId>my-library</artifactId> <version>1.0</version> <scope>system</scope> <systemPath>${project.basedir}/lib/my-library.jar</systemPath> </dependency> 其中,<scope>system</scope>表示此依赖为系统范围内的依赖;<systemPath>指定该依赖项的路径。 最后,需要注意的是,如果使用本地jar包进行开发,需要保证该jar包的版本与项目中其他依赖项的版本兼容。此外,最好将本地jar包添加到版本控制系统中,以便团队成员共享使用。