首页 > 解决方案 > 如何通过删除核心 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>

--以粗体排除的包--

标签: mavenpackagewardependency-management

解决方案


您可以在the和 main上unpack实际指定。你可以在这里看到一个例子:Unpacking specific artifacts excludesartifactItemconfiguration

这将允许您在打包之前排除您不想要的依赖项,然后从那里packagingIncludes提取maven-war-plugin所有必需的项目。

或者,您可以在它之前添加一个步骤,该步骤执行另一个maven-dependency-plugin执行复制您的特定工件的操作。


推荐阅读