Java 尽管SpringBootMaven插件中配置了exlusion,日志依赖项仍然包含在lib文件夹中

Java 尽管SpringBootMaven插件中配置了exlusion,日志依赖项仍然包含在lib文件夹中,java,spring,spring-boot,log4j,slf4j,Java,Spring,Spring Boot,Log4j,Slf4j,编辑:原来我就是不善于找东西。更改之前的war没有这些库,而原始.war(重新打包之前)已经包含这些库。所以问题出在其他地方,SpringBootMaven插件与此无关。我仍然不知道它们是从哪里来的,因为我也尝试过简单地删除依赖项,但哦,好吧,看看我的第一句话 我正在努力使我的公司软件作为spring boot应用程序运行。由于我们的war可能部署在各种不同的环境中,如SAP云平台,因此不应将日志库包含在lib文件夹中以防止冲突。然而,有些日志库(特别是jul-to-slf4j、log4j-ap

编辑:原来我就是不善于找东西。更改之前的war没有这些库,而原始.war(重新打包之前)已经包含这些库。所以问题出在其他地方,SpringBootMaven插件与此无关。我仍然不知道它们是从哪里来的,因为我也尝试过简单地删除依赖项,但哦,好吧,看看我的第一句话

我正在努力使我的公司软件作为spring boot应用程序运行。由于我们的war可能部署在各种不同的环境中,如SAP云平台,因此不应将日志库包含在lib文件夹中以防止冲突。然而,有些日志库(特别是jul-to-slf4j、log4j-api和log4j-to-self4j)总是在我的lib文件夹中,不管我的排除有多具体。其他库(测试所需的两个库或必须包含在类文件中的两个库)被正确地排除在外

我已经尝试将标记设置为特定的库,并且只排除整个组。在此之后,我试图简单地排除依赖项本身,但它们仍然以某种方式出现在mvn依赖项之后:树告诉我它们不再存在

这是插件配置:


org.springframework.boot
springbootmaven插件
重新包装
de.firm.integration.BaseSpringConfiguration
企业整合
eis生成器ODataAPI
企业整合
eis管理用户界面
org.slf4j
七月至六月
org.springframework.boot
spring-boot-starter-log4j2
org.apache.logging.log4j
log4j七月
org.apache.logging.log4j
log4japi
org.apache.logging.log4j
log4j-to-slf4j

我希望我构建的war不再在我的WEB-INF/lib文件夹中包含这些日志库。相反,它们一直被包括在内。

日志框架(如slf4j或log4j2)有一个API组件和一个运行时组件。您的代码应该只依赖于API组件。它是您应该避免指定何时部署到特定环境的运行时组件,因为该环境可能有自己的运行时组件版本。在您的示例中,log4j-to-slf4j、log4japi等库都是api组件。他们参加战争是可以的。但是,您应该确保您的环境提供了兼容的运行时日志组件

请参见此处对“提供的”范围的解释:

试试这个

通过使用和配置参数,可以从WAR文件中包括或排除某些文件

因此,您只需在这些标记中指定WEB-INF/lib/log4j-.jar、WEB-INF/lib/jul-.jar,以排除所有以log4j和jul开头的包

<plugins>
  <plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.2.3</version>
    <configuration>
      <packagingExcludes>
       WEB-INF/lib/log4j-*.jar, WEB-INF/lib/jul-*.jar
      </packagingExcludes>
    </configuration>
  </plugin>
</plugins>

maven战争插件
3.2.3
WEB-INF/lib/log4j-*.jar,WEB-INF/lib/jul-*.jar

不幸的是,这不起作用,因为在“重新打包”目标期间,spring插件在maven war插件之后运行。因此,当maven war插件运行时,依赖项就不存在了。好的,最初插件的执行顺序是通过使用构建生命周期/阶段来控制的。问题是,当您在同一阶段有两个或更多插件时。从Maven 3.0.3开始,绑定到同一阶段的插件应该按照它们列出的顺序执行。我们最终完全删除了依赖项。我们曾考虑过使用PackageExcludes,但它似乎是一种依赖于可能再次改变的东西的解决方法。