maven - 如何通过删除核心 jar 来使用由 maven 依赖项覆盖的战争中的自定义 .jar 文件
问题描述
我有一个 maven3 webapp (war) 项目,它有 3 个依赖项。战争依赖是(我无法控制的第 3 方库)——httpclient-4。.jar httpcore-4。.jar httpcore-nio-4.*.jar
第 3 方战争依赖项依赖于他们定义的 http 版本,这与我需要使用的更高版本冲突。
以下步骤在我的应用程序包期间发生。
我的 http jar 被复制到 /WEB-INF/lib/ 上面还包含 http 的 .war 依赖项被构建并覆盖在我的目标之上 最终的 .war 文件是从目标创建的
在这里,我已经设法排除/删除了 http 的早期版本,但现在我想添加我自己的上述 jar 的依赖版本,例如: httpclient-4.5.6.jar httpcore-4.3.jar httpcore-nio-4.3.jar
当战争试图打包不包含第 3 方 prev 的更改级别时,我如何复制。版本?
我的 pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.fit.check.plan.test</groupId> <artifactId>ui-cust</artifactId> <version>10.2.0.0.0-test</version> <relativePath>../</relativePath> </parent>
<properties> <sharedlib.name>ui-shared-lib</sharedlib.name> <sharedlib.vendor>TEST UI</sharedlib.vendor> <atmosphere-version>2.2.0</atmosphere-version> <spec-version>10.2.0.0.0</spec-version> <epc.version>9.1</epc.version> <sonar.skip>true</sonar.skip> </properties>
<artifactId>ui-shared-test-lib</artifactId> <packaging>war</packaging>
<build> <finalName>ui-shared-lib</finalName> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.8</version> <executions>
<execution>
<id>unpack-shared-lib-war</id>
<phase>validate</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>com.fit.check.plan.fe</groupId>
<artifactId>ui-shared-lib</artifactId>
<version>${plan.version}</version>
<type>war</type>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}/ui-lib-test</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>2.8</version> <executions>
<execution>
<id>copy-test-ui-lib-jar</id>
<phase>validate</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>${test.test.groupId}</groupId>
<artifactId>implementation-interfaces</artifactId>
<version>${test.test.version}</version>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}/ui-lib-test/WEB-INF/lib</outputDirectory>
<destFileName>implementation-interfaces.jar</destFileName>
</artifactItem>
<artifactItem>
<groupId>com.google.code.findbugs</groupId>
<artifactId>jsr305</artifactId>
<version>${artifact.findbugs-jsr305.version}</version>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}/ui-lib-test/WEB-INF/lib</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>com.fit.check.TEST</groupId>
<artifactId>TEST-context-store-ws</artifactId>
<version>${TEST.version}</version>
<classifier>clientkit</classifier>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}/ui-lib-test/WEB-INF/lib</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>com.fit.check.plan.test</groupId>
<artifactId>test-activities-lib</artifactId>
<version>${test.test.version}</version>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}/ui-lib-test/WEB-INF/lib</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>com.fit.check.plan.test</groupId>
<artifactId>test-core-lib</artifactId>
<version>${test.test.version}</version>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}/ui-lib-test/WEB-INF/lib</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>com.fit.check.cell</groupId>
<artifactId>security-service-war</artifactId>
<version>${TEST.version}</version>
<classifier>clientkit</classifier>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}/ui-lib-test/WEB-INF/lib</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>com.fit.check.cell</groupId>
<artifactId>aff-war</artifactId>
<version>${TEST.version}</version>
<classifier>clientkit</classifier>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}/ui-lib-test/WEB-INF/lib</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>com.fit.check.plan.test</groupId>
<artifactId>common-groovy-api</artifactId>
<version>${test.test.version}</version>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}/ui-lib-test/WEB-INF/lib</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>com.fit.check.plan.test</groupId>
<artifactId>task-util-service-ws</artifactId>
<version>${test.test.version}</version>
<classifier>clientkit</classifier>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}/ui-lib-test/WEB-INF/lib</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>com.fit.check.TEST</groupId>
<artifactId>TEST-services-war</artifactId>
<version>${TEST.version}</version>
<classifier>clientkit</classifier>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}/ui-lib-test/WEB-INF/lib</outputDirectory>
</artifactItem>
<artifactItem>
<groupId>com.fit.check.plan.test</groupId>
<artifactId>test-core-override</artifactId>
<version>${test.test.version}</version>
<type>jar</type>
<overWrite>true</overWrite>
<outputDirectory>${project.build.directory}/ui-lib-test/WEB-INF/lib</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions> </plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<warName>ui-shared.war</warName>
<outputFileNameMapping>@{artifactId}@-@{baseVersion}@@{dashClassifier?}@.@{extension}@</outputFileNameMapping>
<failOnMissingWebXml>false</failOnMissingWebXml>
<archive>
<manifest>
<addDefaultImplementationEntries>false</addDefaultImplementationEntries>
</manifest>
<compress>true</compress>
<manifestEntries>
<Specification-Title>${sharedlib.name}</Specification-Title>
<Specification-Version>${spec-version}</Specification-Version>
<Implementation-Title>${sharedlib.name}</Implementation-Title>
<Implementation-Vendor>${sharedlib.vendor}</Implementation-Vendor>
<Extension-Name>${sharedlib.name}</Extension-Name>
</manifestEntries>
</archive>
<warSourceDirectory>${project.build.directory}/ui-lib-test</warSourceDirectory>
<packagingIncludes>WEB-INF/lib/*.jar</packagingIncludes>
<packagingExcludes>
<![CDATA[WEB-INF/lib/slf4j-log4j12*.jar,
WEB-INF/lib/amf_toolkit-9.0.0.pb00_hf02.jar,
WEB-INF/lib/commons-beanutils-1.9.2.jar,
WEB-INF/lib/commons-fileupload-1.3.3.jar,
WEB-INF/lib/httpclient-4.1.2.jar,
WEB-INF/lib/httpcore-4.2.4.jar,
WEB-INF/lib/httpcore-nio-4.2.4.jar]]>
</packagingExcludes>
</configuration>
</plugin>
</plugins> </build> </project>
--以粗体排除的包--
解决方案
您可以在the和 main上unpack
实际指定。你可以在这里看到一个例子:Unpacking specific artifacts
excludes
artifactItem
configuration
这将允许您在打包之前排除您不想要的依赖项,然后从那里packagingIncludes
提取maven-war-plugin
所有必需的项目。
或者,您可以在它之前添加一个步骤,该步骤执行另一个maven-dependency-plugin
执行复制您的特定工件的操作。
推荐阅读
- iis - 如何阻止直接访问 url 并只允许 IIS 中的应用程序访问?
- python - 如何将属性传递给自定义数据类
- android - 如何在Realm中制作目录表
- cordova - cordova-plugin-google-analytics 不跟踪cordova-ios 6.1 中的分析数据
- cmd - 如何提取路径变量中包含特定单词的元素
- javascript - IFormCollection 不接收单个表单数据
- typescript - 导入 mp3 时出现“找不到模块”错误
- awkward-array - 如何从尴尬.zip 创建的记录集合中删除字段?
- git - 在没有提交的情况下在 git rebase 期间保留本地更改的最佳实践是什么?
- python - 使用 Django rest 框架的序列化器丢弃记录