spring-boot:排除对包装的依赖

我正在从事一个弹簧靴项目(项目A),该项目将包含在其他项目(项目B,项目C …)中。我在Project A中有多个依赖项,但是在导入Project

A的项目中,可能需要一些或仅一个。我试图找到一种在打包项目A时排除jar依赖项的方法,以便在运行时由项目B提供所需的依赖项。当项目A为了测试目的而独立运行时,我希望有可用的依赖项。

我试过使用:

<scope>provided</scope>

<optional>true</optional>

这些jar最终还是最终的文物。

还尝试将以下内容添加到spring-boot-maven-plugin

           <plugins>

<plugin>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-maven-plugin</artifactId>

<executions>

<execution>

<goals>

<goal>repackage</goal>

</goals>

<configuration>

<excludeArtifactIds>spring-boot-starter-redis</excludeArtifactIds>

</configuration>

</execution>

</executions>

</plugin>

</plugins>

这只会删除spring-boot依赖项,但是此依赖项的子级jar仍将最终保留在最终工件中。

回答:

在当前项目中,我们需要为该应用程序创建一个war文件,该文件必须部署在JEE服务器中。war文件必须仅包含所需的jar文件,而不包括JEE服务器已提供的任何API或实现。

但是,出于测试目的,我们希望保留生成Boot默认提供的可执行war或jar文件的可能性。

为了实现这一目标,我们已经将所有可选的依赖关系 提供

。例如,我们在开发中使用了一些直接依赖项,例如JDBC驱动程序,我们不想将其包含在已部署的war文件中。还有一些启动主启动器,它们提供了与JEE服务器中不需要的其他启动器和库的依赖关系。

spring-boot-starter-tomcatspring-boot-starter-jdbc

启动器就是这种情况。在我们的项目中,我们的 pom.xml 文件中具有followind依赖项:

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-tomcat</artifactId>

<scope>provided</scope>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-jdbc</artifactId>

<scope>provided</scope>

</dependency>

<dependency>

<groupId>com.oracle</groupId>

<artifactId>ojdbc7</artifactId>

<scope>provided</scope>

</dependency>

这样,那些依赖项将不会包含在原始的jar / war文件中,但是spring boot maven插件会将它们包含在重新打包的jar / war 的

lib提供的 文件夹中。

这些依赖关系不会被JEE服务器看到,但是会使打包的应用程序变得比所需的更大。解决方案是告诉Spring Boot

Maven插件使用其他名称创建重新打包的文件,并排除开发工具:

<plugin>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-maven-plugin</artifactId>

<configuration>

<mainClass>${start-class}</mainClass>

<classifier>exec</classifier>

</configuration>

</plugin>

这样,maven将为您的应用程序生成两个软件包:

  • 默认的jar / war软件包,不包含所有提供的依赖项。
  • 经过重新打包的文件,其名称以_exec.jar / .war结尾,并在 lib提供的 文件夹中提供了所有提供的依赖项,并支持使用 java -jar文件 运行应用程序 __

在您的情况下,您可以使用相同的技术来生成要包含在项目B中的项目A的程序包,并以独立的方式运行项目A的程序包。

如果您不需要为要单独运行的Project A创建软件包,只需在IDE中对其进行测试,则甚至可以从 pom.xml中 删除spring boot

maven插件。

以上是 spring-boot:排除对包装的依赖 的全部内容, 来源链接: utcz.com/qa/412477.html

回到顶部