当前位置: 首页 > 面试题库 >

Maven:自定义Web应用程序项目的web.xml

公孙宸
2023-03-14
问题内容

我有一个Web应用程序Maven项目,并且我想根据正在运行的Profile来定制web.xml文件。我正在使用Maven-War-
plugin,该插件使我可以定义一个“资源”目录,在该目录中可以过滤文件。但是,仅过滤对我来说还不够。

更详细地讲,我想 包括(或排除) 整个安全性部分,具体取决于运行的概要文件。这是一部分:

....
....

<security-constraint>

    <web-resource-collection>
        <web-resource-name>protected</web-resource-name>
        <url-pattern>/pages/*.xhtml</url-pattern>
        <url-pattern>/pages/*.jsp</url-pattern>
    </web-resource-collection>

    <auth-constraint>
        <role-name>*</role-name>
    </auth-constraint>

    </security-constraint>
        <login-config>
        <auth-method>${web.modules.auth.type}</auth-method>
        <realm-name>MyRealm</realm-name>
    </login-config>

<security-constraint>

....
....

如果这样做不容易,是否有办法拥有两个web.xml文件并根据配置文件选择适当的文件?


问题答案:

有没有办法拥有两个web.xml文件并根据配置文件选择适当的文件?

是的,您可以在每个配置文件中添加的配置,maven-war- plugin并将每个配置配置为指向不同的web.xml

<profiles>
    <profile>
        <id>profile1</id>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-war-plugin</artifactId>
                    <configuration>
                        <webXml>/path/to/webXml1</webXml>
                    </configuration>
                </plugin>
                 ...

作为不必maven-war-plugin在每个概要文件中指定配置的替代方法,可以在POM的主要部分中提供默认配置,然后仅对特定概要文件覆盖它。

或更简单地说,在<build><plugins>您的POM 主体中,使用属性来引用webXml属性,然后在不同的配置文件中更改其值

<properties>
    <webXmlPath>path/to/default/webXml</webXmlPath>
</properties>
<profiles>
    <profile>
        <id>profile1</id>
        <properties>
            <webXmlPath>path/to/custom/webXml</webXmlPath>
        </properties>
    </profile>
</profiles>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-war-plugin</artifactId>
            <configuration>
                <webXml>${webXmlPath}</webXml>
            </configuration>
        </plugin>
        ...


 类似资料:
  • 我有一个简单的java应用程序-maven项目在我的Netbean IDE。 在我创建Maven Web Application并添加第一个项目作为依赖项之后,Netbean显示一切都很好,我也可以使用所有方法。 但在运行时,我会 在不创建多模块JavaEE应用程序的情况下,是否有可能使web项目依赖于简单的java应用程序?

  • 我已经阅读了关于这个的其他问题!所以这不是另一个复制品。 在Netbeans 8.0中使用“新建项目向导”时,我选择Maven,但不能选择Web应用程序。它根本就没有展示出来。所以我问了谷歌,它让我安装JAVE EE。我做了,但仍然没有Maven类别下的Web应用程序。 我做错了什么?

  • 我是新来的java。我使用apache netbean 12.2版本来创建新项目,java版本是17。我按照步骤创建java Web应用程序与maven,但当我建立它,并试图运行它,我得到以下错误在控制台窗口。 无法执行目标org.apache.maven.plugins:maven-war插件:2.3:战争(default-war)在项目JavaProject:执行default-war的目标o

  • 我很高兴netbeans 9.0刚刚发布,但我无法在netbeans 9.0中创建Maven Web应用程序项目。 创建新项目时,在Maven类别中没有Web应用程序选项可供选择。 我查看了这篇帖子,但是没有可用的JavaEE插件。 我在系统范围内启用了Java10。 在netbeans 9.0之前,我在Java 8中使用netbeans 8.2,没有问题。

  • 自定义脚本 Gradle构建脚本的标准名称是build.gradle,在一个多项目构建的环境中,你想自定义你的构建脚本名称来显得高大上一点,因为多个项目有相同的构建脚本名称可能会混淆,接下来介绍如何使用自定义的脚本名称。 还是之前那个例子,假设所有的子项目路径都是以todo-开头,比如web子项目就是在todo-web目录下,构建脚本名称应该清晰的表示它的作用,如下图所示: 要使这个结构起作用关键

  • 我想知道IDE中的Jave EE项目和Java Web项目在方面的主要区别。事实上,如果选择Java web类别,您可以在IDE中基于、和JavaServer Faces创建web应用程序。 另一方面,选择项目类别为Jave EE项目,NetBeans IDE将创建3个子项目,例如:StoreApp(企业应用项目)、StoreApp-ejb(EJB项目)和StoreApp-war(Web项目)。