如何在使用 maven 构建的战争中包含系统依赖关系

2022-09-01 01:34:37

我已经在互联网上搜索了很长一段时间,我无法弄清楚如何配置maven-war插件或类似的东西,以便系统依赖项包含在build-war中(WEB-INF / lib文件夹)

我在jar构建的情况下使用maven依赖插件作为:

<plugin>
    <artifactId>maven-dependency-plugin</artifactId>
    <executions>
        <execution>
            <phase>install</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
            <configuration>
                <outputDirectory>${project.build.directory}/lib</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

但我无法理解在战争建设的情况下该怎么办。我尝试过使用maven-war插件,但它没有在构建中包含系统依赖项。

[更新]

我有以下类型的贬低:

<dependency>
    <groupId>LoginRadius</groupId>
    <artifactId>LoginRadius</artifactId>
    <scope>system</scope>
    <version>1.0</version>
    <systemPath>${basedir}\lib\LoginRadius-1.0.jar</systemPath>
</dependency>

在我的POM中,这些依赖项在战争构建时不包括在WEB-INF / lib中。


答案 1

让我试着总结一下我尝试过的选项:

<packagingIncludes>${java.home}/lib/jfxrt.jar</packagingIncludes>

这不起作用!另外,只有jar名称,排除其他所有内容,所以如果你愿意尝试,那就试试

<packagingIncludes>${java.home}/lib/jfxrt.jar,**/*</packagingIncludes>

Jatin的答案似乎有点复杂,我尝试一次又一次地浏览POM,以确定WEB-INF POM中提到的系统罐子的确切位置。

无论如何,我最终使用了这个解决方案,起初它不起作用,但经过一段时间后,一些更正起作用了:

我使用以下命令在本地存储库中安装了jar:

mvn install:install-file -Dfile="C:\Users\hp\Documents\NetBeansProjects\TwitterAndLoginRadiusMaven\lib\LoginRadius-1.0.jar" -DgroupId=LoginRadius -DartifactId=LoginRadius -Dversion=1.0 -Dpackaging=jar`

运行上述命令后,我将POM中的依赖项更改为

<dependency>
   <groupId>LoginRadius</groupId>
   <artifactId>LoginRadius</artifactId>
   <!--<scope>system</scope>-->
   <version>1.0</version>
   <!--<systemPath>${basedir}\lib\LoginRadius-1.0.jar</systemPath>-->
</dependency>

注意 - 请参阅我已注释系统范围和系统路径。

现在正在构建战争,包括这个 LoginRadius-1.0.jar web-INF/lib 中


答案 2

如果由于第三方的一些愚蠢的命名/打包检查,你偶然无法将第三方库安装到本地存储库,你仍然可以在生成时(至少如果你正在构建 Web 应用)使用需要创建类似配置的位置将作用域内的依赖项添加到最终包中。systemmaven-war-plugin

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
    <version>3.2.0</version>
    <configuration>
        <failOnMissingWebXml>true</failOnMissingWebXml>
        <webResources>
            <resource>
               <directory>path/to/lib/in/project</directory>
               <targetPath>WEB-INF/lib</targetPath>
            </resource>
        </webResources>
    </configuration>
</plugin>

不确定,但我相信库必须位于项目基目录的本地位置。我倾向于在调用下创建一个目录来保存这些类型的第三方库。在构建过程中,它们被放置在正确的目录中并添加到 war 文件中。src/main/lib


推荐