gpt4 book ai didi

java - 从打包的 war 文件中排除本地 WEB-INF/lib jar

转载 作者:行者123 更新时间:2023-11-30 06:59:45 29 4
gpt4 key购买 nike

我已经在 pom.xml 中提到了所有必需的 JAR 的依赖性。现在,由于依赖项是在 POM 中定义的,因此 JAR 将自动打包到 lib 文件夹中。

我想排除项目源中存在的库中的所有 JAR。在构建 WAR 时,依赖 JAR 应该打包在库中

我正在使用packaging excludes tag,来排除本地jar。但它排除了打包的 war 文件中的所有 jar。我想包含仅 Maven 依赖项。

                    <plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.4</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
<warName>${war.name}</warName>
<webResources>
<resource>
<directory>config</directory>
<targetPath>WEB-INF/classes</targetPath>
<directory>${maven.lib.dir}</directory>
<targetPath>WEB-INF/lib</targetPath>
</resource>
</webResources>
<archive>
<manifestEntries>
<Built-Date>${maven.build.timestamp}</Built-Date>
</manifestEntries>
</archive>
<packagingExcludes>META-INF/*.xml</packagingExcludes>
<packagingExcludes>WEB-INF/*lib/</packagingExcludes>
</configuration>
</plugin>

我可以通过在 excludes 标签中指定名称来排除一些 jar。但是我有太多的 jar 要明确地写在排除标签下

<packagingExcludes>
WEB-INF/lib/commons-logging-*.jar,
%regex[WEB-INF/lib/log4j-(?!over-slf4j).*.jar]
</packagingExcludes>

我需要一些配置,我可以在其中排除整个文件夹

最佳答案

我终于(经过几次编辑)理解了您的问题。不幸的是,我认为如果没有你称之为 hack 的东西,将很难做到。这很难,因为 Maven 并不真正支持手动添加的 jar。这被认为是不好的做法,但我们尝试对此做些事情。以下是您可能会做的事情:

  1. 将maven 依赖项复制到某个临时目录
  2. 将子目录插入 WEB-INF/lib
  3. 删除每个 *.jar来自 WEB-INF/lib , 但不是来自子目录。

这里有更详细的步骤:

首先将复制依赖添加到某个临时目录(在我的例子中是 maven-deps)

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.10</version>
<executions>
<execution>
<id>copy-dependencies</id>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/maven-deps</outputDirectory>
<overWriteReleases>false</overWriteReleases>
<overWriteSnapshots>false</overWriteSnapshots>
<overWriteIfNewer>true</overWriteIfNewer>
</configuration>
</execution>
</executions>
</plugin>

请记住,在 Eclipse IDE 中你得到与打开一致的错误<execution> , 但从工具提示菜单中,您可以通过安装 m2e 来解决它来自市场的连接器(此插件不在默认生命周期范围内。这就是您需要连接器的原因)。

之后我们需要告诉maven把这个目录放到war中在 WEB-INF/lib 下.执行以下操作:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.5</version>
<configuration>
<packagingExcludes>WEB-INF/lib/*.jar</packagingExcludes>

<webResources>
<resource>
<directory>target/maven-deps</directory>
<includes>
<include>*.jar</include>
</includes>
<targetPath>WEB-INF/lib/maven-deps</targetPath>
</resource>
</webResources>
</configuration>
</plugin>

这将插入目录 maven-deps作为子目录进入 WEB-INF/lib并排除所有 *.jar来自 WEB-INF/lib来自WEB-INF/lib/maven-deps

那样的话,您将只在 WEB-INF/lib/maven-deps 中获得 Maven 管理的依赖项。根据规范,这应该可以从 war 中看到类加载器,因为类加载器应该从 WEB-INF/lib 加载所有 jar及其子目录。

我知道这是一种 hack,但目前我想不出更好的解决方案。

关于java - 从打包的 war 文件中排除本地 WEB-INF/lib jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31161551/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com