如何在使用maven构建的war中包含系统依赖项

cod*_*iot 31 java eclipse maven

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

我在jar-build的情况下使用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>
Run Code Online (Sandbox Code Playgroud)

但是我无法理解在战争构建的情况下要做什么.我尝试过使用maven-war插件,但它不包括构建中的系统依赖项.

[UPDATE]

我有类型的依赖:

<dependency>
    <groupId>LoginRadius</groupId>
    <artifactId>LoginRadius</artifactId>
    <scope>system</scope>
    <version>1.0</version>
    <systemPath>${basedir}\lib\LoginRadius-1.0.jar</systemPath>
</dependency>
Run Code Online (Sandbox Code Playgroud)

在我的POM中,当构建war时,这些依赖项不包含在WEB-INF/lib中.

cod*_*iot 14

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

__CODE__

这不起作用!此外,只有罐子名称,排除其他一切,所以如果你愿意尝试然后尝试

__CODE__

Jatin的答案似乎有点复杂,我试图再次通过POM来弄清楚提到的系统罐在WEB-INF POM中的确切位置.

无论如何,我最终使用了这个解决方案,这个解决方案最初没有工作,但经过一段时间后,一些修正工作:

__CODE__ 使用以下命令:

__CODE__

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

<packagingIncludes>${java.home}/lib/jfxrt.jar</packagingIncludes>
Run Code Online (Sandbox Code Playgroud)

注 - 请参阅我已评论系统范围和systemPath.

现在构建战争,在WEB-INF/lib中包含此LoginRadius-1.0.jar

  • 因此,Maven"原教旨主义者"并不关心你现在不能拥有由(仅)步骤组成的两步​​构建:(1)从源代码控制获取; (2)键入单个构建命令(无论是mvn,ant,make还是build.{sh | bat}).这个"解决方案",我并不责备你,它似乎只是Maven的一部分,现在有一个依赖,你要么运行这个神奇的"安装"咒语把东西放在〜/ .m2/cache目录中,或者,在Maven Central前面拥有一个工作组"Nexus"类型的缓存,你也有权"部署"东西. (3认同)

JRS*_*fty 12

如果您不能将第三方库安装到本地存储库,由于第三方进行了一些愚蠢的命名/打包检查,您仍然可以system在构建时将您的范围依赖项添加到最终包中(至少如果您是使用maven-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>
Run Code Online (Sandbox Code Playgroud)

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


Ank*_*gam 7

您可以根据需要将 war 插件配置为包含排除全部部分jar ,如下所述。简单而有效

           <plugin>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <webResources>
                        <resource>
                            <directory>${project.basedir}\lib</directory>
                            <targetPath>WEB-INF/lib</targetPath>
                            <filtering>false</filtering>
                            <includes>
                                <include>**/*.jar</include>
                            </includes>
                            <excludes>
                                <include>**/javax.servlet-api-3.1.0.jar</include>
                            </excludes>
                        </resource>
                    </webResources>
                </configuration>
            </plugin>
Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

45311 次

最近记录:

6 年,8 月 前