java - Spring启动: How to exclude static files from building . war文件?

标签 java maven spring-boot war static-files

我正在将 Spring Boot 用于 Web 应用程序,远程服务器要求我将 .war 文件上传到其根目录,并在每次进行更改时部署它。我已设法更改 applications.properties 选项 spring.resources.static-locations 以使用 war 文件之外的资源,它对我来说可以正常工作。

但是,当我使用 Maven 构建应用程序时,它仍然在生成的 .war 文件中包含静态文件。 .war 文件的大小已经超过 50+MB,当我开始添加静态图像文件时,这可能会成为一个严重的问题。如何从“maven package”生成的 .war 文件中排除所有静态文件?

下面是我的 Spring Boot 应用程序的 pom.xml 文件。静态文件也位于目录“${project.basedir}/src/main/resources/static”中。

<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.8.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>
  <groupId>com.demo</groupId>
  <artifactId>demo</artifactId>
  <version>0.1.0.snapshot</version>
  <name>demo</name>
  <description>Demo Application</description>
  <packaging>war</packaging>

  <dependencies>
    <dependency>
        <groupId>com.google.guava</groupId>
        <artifactId>guava</artifactId>
        <version>28.1-jre</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.9</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-freemarker</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jooq</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-configuration-processor</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-test</artifactId>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter</artifactId>
        <version>RELEASE</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.mockito</groupId>
        <artifactId>mockito-core</artifactId>
        <version>3.0.0</version>
        <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <finalName>${project.artifactId}</finalName>
    <sourceDirectory>${project.basedir}/src/main/java</sourceDirectory>
    <testSourceDirectory>${project.basedir}/src/test/java</testSourceDirectory>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
  </build>

</project>

最佳答案

您可以尝试在构建 block 中添加以下 block 吗?

<resources>
            <resource>
                <directory>${project.basedir}/src/main/resources</directory>
                <filtering>true</filtering>
                <excludes>
                    <exclude>${project.basedir}/src/main/resources/static/*</exclude>
                </excludes>
            </resource>
            <resource>
                <directory>${project.basedir}/src/main/resources</directory>
                <filtering>false</filtering>
            </resource>
</resources>

编辑

<resources>
            <resource>
                <directory>${project.basedir}/src/main/resources</directory>
                <filtering>true</filtering>
                <excludes>
                    <exclude>**/static/*</exclude>
                </excludes>
            </resource>
</resources>

关于java - Spring启动: How to exclude static files from building . war文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58251285/

相关文章:

java - 使用 CompletableFuture 或 Future 对象获取 Callable 值

java - 具有 url 别名的空 session

java - 子容器在启动期间失败(Apache Tomcat 8.5 不再工作)

java - 如何处理多环境构建?

java - Spring改变事务隔离模式

java - Jsoup 获取重定向的 URL

java - OSGI:捆绑、类继承和 Maven 范围

java - spring boot - 映射对请求的正确响应,用于多异步调用

java - “缺少必需的请求正文 : public org. springframework.http.ResponseEntity<?>

java - 如何计算 map 跨度/缩放以在视口(viewport)中包含一组 GeoPoints?