【问题标题】:maven-war-plugin: exclude all directories but onemaven-war-plugin:排除除一个以外的所有目录
【发布时间】:2023-03-19 01:45:01
【问题描述】:

我的目录结构为:

src
|__ main
    |__ java
    |__ resources
    |__ webapp
        |__ css_blue
        |__ css_green
        |__ css_red
        |__ WEB-INF

其中有三个单独的 css 目录(如css_redcss_greencss_blue)。在这里,我想根据-D 开关只包括其中一个:

mvn clean install -Dcss=green

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>
  <groupId>com.faisal.dwr</groupId>
  <artifactId>chatbox</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <dependencies>
    <dependency>
      <groupId>javax</groupId>
      <artifactId>javaee-api</artifactId>
      <version>6.0</version>
      <scope>provided</scope>
    </dependency>
    <!-- Spring - MVC -->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>4.2.4.RELEASE</version>
    </dependency>
    <!-- Spring Web Security -->
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-web</artifactId>
      <version>4.0.3.RELEASE</version>
    </dependency>
    <!-- Spring Security Config -->
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-config</artifactId>
      <version>4.0.3.RELEASE</version>
    </dependency>
    <!-- DWR -->
    <dependency>
      <groupId>org.directwebremoting</groupId>
      <artifactId>dwr</artifactId>
      <version>3.0.0-RELEASE</version>
    </dependency>
  </dependencies>

    <build>
      <finalName>${project.artifactId}</finalName>
      <plugins>
       <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.6</version>
        <configuration>
            <packagingIncludes>css_${css}</packagingIncludes>
        </configuration>
       </plugin>
      </plugins>
    </build>
</project>

但在这种情况下,WEB-INF 下的文件和目录不会出现在最终的.war 文件中。

【问题讨论】:

    标签: java maven build-process


    【解决方案1】:

    默认情况下,maven-war-pluginpackagingIncludes 属性将包含src/main/webapp 下的所有内容。当您覆盖它以指定时

    <packagingIncludes>css_${css}/**</packagingIncludes>
    

    那么插件将只包含该文件夹(及其下的所有内容),而不再包含WEB-INF。一个简单的解决方案是重新包含WEB-INF

    <packagingIncludes>WEB-INF/**,css_${css}/**</packagingIncludes>
    

    通过这样的配置,WEB-INF 下的所有东西和css_${css} 下的所有东西都会被包含在战争中。


    另一个不需要重新添加文件夹的解决方案是改用&lt;packagingExcludes&gt;。这样,src/main/webapp 下的所有文件都将包括在内,除了我们在此处指定的文件。在这种情况下,我们可以使用正则表达式:排除以cssand is not css_${css}开头的所有内容。

    <packagingExcludes>%regex[css_(?!${css}/).*]</packagingExcludes>
    

    【讨论】:

    • 现在这就像一个魅力。谢谢您的帮助!你能解释一下%regex[]
    • @MohammadFaisal ?! 被称为“负前瞻”。我链接到一个关于这个结构的问题。它匹配不以另一个字符串开头的字符串。
    • 在从 Eclipse 更新依赖项时添加此表达式后我面临的一个问题 - An internal error occurred during: "Updating Maven Project". Illegal repetition near index 7 css_(?!${css}/).* 指向 (? 周围的箭头(^
    • @MohammadFaisal 嗯,这听起来像是 m2e 的问题。尝试将其与 Eclipse 一起更新到最新版本。
    猜你喜欢
    • 2016-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-26
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多