当前位置: 首页 > 知识库问答 >
问题:

如何防止mvn安装创建WEB-INF/lib

李烨
2023-03-14

我已经在继承代码上工作了几天了,我正试图了解maven是如何工作的,以及为什么要按原样配置项目。该项目使用Jetty作为http服务器,并提供Angular应用程序,此外还使用Jersey为Angular应用程序提供RESTfulendpoint。项目目录为:

src
    main
        config
        java
            Java code, including Jetty server
        webapp
            WEB-INF
                web.xml
            index.html and all things Angular are also in this directory

作为部署过程的一部分,我被告知设置maven,以便将项目打包为. war。为此,我有以下内容:

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.1.1</version>
        <executions>
            <execution>
                <phase>install</phase>
                <goals>
                    <goal>exploded</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <packagingExcludes>WEB-INF/lib</packagingExcludes>
            <webappDirectory>src/main/webapp</webappDirectory>
            <warName>${project.name}</warName>
        </configuration>
    </plugin>
</plugins>

当我运行mvn安装时,在我的src/main/webapp/WEB-INF中会生成以下两个代码:lib/类/。现在,当我运行该项目时,在Java级别上有冲突,我发现问题的原因是这两个新目录现在存在于我的目标/类/WEB-INF中。删除它们并运行:target/classes/com/根类解决了该问题。但是如果目标/类/WEB-INF/类/com/根类,则项目开始在运行时引发异常。在不深入研究底层异常的情况下,有人能解释一下为什么我想/不想为我生成WEB-INF/classesWEB-INF/lib,如果我不想,我如何在maven中禁用它们的创建?

编辑:我发现将webappDirectory属性替换为webXml属性将防止复制lib/类/,但是,我仍然不清楚为什么我首先想要这些目录。


共有1个答案

韦衡
2023-03-14

Maven奉行“约定优于配置”的理念。

您希望拥有一个不遵循惯例的WebApp,这会导致您遇到问题。

注释掉整个<代码>

构建为WAR文件并包含所有依赖项的WebApp(如关于WebApp定义的Servlet规范)。

WEB-INF/lib是webapp需要的所有依赖项的查找位置。可以是WAR文件格式,也可以是分解格式。

然而,您似乎希望从maven获得一个分解的WAR文件,但不知道为什么,因为这在构建过程中不再有任何好处。(您可以使用默认war行为和各种web容器maven插件,直接从maven在您选择的嵌入式容器中运行webapp)

如果您坚持爆炸,请考虑以下建议:

  • 确保您的<代码>

简而言之,您不需要<代码>

 类似资料:
  • 我试图将每个列表都位于嵌套对象内的webservice模型映射到更简单的对象。 模型1 映射非常简单: 映射工作正常,除了一个问题。当我将带有null子级的父母映射到父母2并返回父母时,儿童对象是用空列表创建的。有什么方法可以防止这种情况吗?

  • 以下脚本可以防止安装程序重复运行: Function .onInit InitPluginsDir ;创建互斥防止重复运行 System::Call 'kernel32::CreateMutexA(i 0, i 0, t "WinSnap_installer") i .r1 ?e' Pop $R0 StrCmp $R0 0 +3 MessageBox MB_OK|MB_IC

  • 问题内容: 我正在编写一个在Linux上运行的Java应用程序(使用Sun的JDK)。它一直在创建目录,我想防止这样做。有什么方法可以阻止Java创建这些文件? 问题答案: 尝试JVM选项 -XX:-UsePerfData 更多信息 来自链接https://docs.oracle.com/javase/8/docs/technotes/tools/unix/java.html的以下内容可能会有所帮

  • 我刚开始遇到这个错误。它在运行之前一直工作: 在我运行的任何东西上都会出现这样的错误: 安装软件包。这可能需要几分钟。正在使用cra模板安装react、react dom和react脚本。。。 纱线添加v1。21.1信息未找到锁定文件。[1/4]正在解析包。。。错误发生意外错误:https://registry.npmjs.org/react:错误:0909006C:PEM例程:get_名称:无起

  • 我是Maven的新手,我有一个基于Java的web项目,在我的MyEclipse中配置了Maven。 现在,如果我修改了任何Java文件,那么我需要执行还是?

  • 问题内容: 我的package.json文件中有此文件(简化版): 我在Mac 10.6.8上使用NPM 1.1.1版本。 当我从项目根目录运行以下命令时,它将同时安装 和 : 我印象中该命令安装了: 我如何做到只安装(这样,生产环境只获取那些模块),而同时安装和呢? 问题答案: 当在开发环境(默认)中的软件包目录中运行时,该命令将与其他命令一起安装。 使用(或) 仅 安装,而不考虑环境变量的值。