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

Spring启动缩小javascript

施自怡
2023-03-14

我正在寻找maven配置来缩小Spring Boot应用程序的js/css文件。对于普通的java Web应用程序,以下配置有效

            <plugins>
                <plugin>
                    <groupId>net.alchim31.maven</groupId>
                    <artifactId>yuicompressor-maven-plugin</artifactId>
                    <version>1.5.1</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>compress</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <nosuffix>true</nosuffix>
                        <webappDirectory>${project.build.directory}/min</webappDirectory>
                        <excludes>
                            <exclude>**/*-min.js</exclude>
                            <exclude>**/*.min.js</exclude>
                            <exclude>**/*-min.css</exclude>
                            <exclude>**/*.min.css</exclude>
                        </excludes>
                    </configuration>
                </plugin>
                <plugin>
                    <artifactId>maven-war-plugin</artifactId>
                    <configuration>
                        <webResources>
                            <resource>
                                <directory>${project.build.directory}/min</directory>
                            </resource>
                        </webResources>
                    </configuration>
                </plugin>
            </plugins>

但是当我用Spring靴试这个的时候

<profile>
            <id>prod</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>net.alchim31.maven</groupId>
                        <artifactId>yuicompressor-maven-plugin</artifactId>
                        <version>1.5.1</version>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>compress</goal>
                                </goals>
                            </execution>
                        </executions>
                        <configuration>
                            <nosuffix>true</nosuffix>
                            <webappDirectory>${project.build.directory}</webappDirectory>
                            <excludes>
                                <exclude>**/*-min.js</exclude>
                                <exclude>**/*.min.js</exclude>
                                <exclude>**/*-min.css</exclude>
                                <exclude>**/*.min.css</exclude>
                            </excludes>
                        </configuration>
                    </plugin>
                    <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <executions>
                        <execution>
                        <configuration>
                        <excludes>
                        <exclude>**/*.js</exclude>
                        </excludes>
                        </configuration>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>

现在,spring boot maven插件配置无法指定webResources目录。

当compress目标运行时,它会缩小js和css。然后,在复制webapp资源阶段,重新打包目标只是用未压缩的版本覆盖缩小的脚本/css。有没有办法跳过复制步骤或在复制步骤后运行压缩目标?基本上,我可以在Spring Boot构建期间压缩css/脚本吗?

共有1个答案

冯鸿光
2023-03-14

我可以使用一个不同的小型化插件,称为minify maven插件来实现这一点。

我能够利用这个插件的webappTargetDir属性来指示它将缩小的文件放在${project.build.outputDirectory}目录中(默认情况下解析为${project.build.directory}/classes)。

然后,通过将插件执行绑定到“准备包”阶段,我可以让它缩小我的源文件,并在执行“包”阶段之前将它们复制到“项目.构建.输出目录”中。这会导致在打包之前用缩小的源文件覆盖原始源文件的预期行为。

下面是我的POM文件的摘录,我在其中配置了minify maven插件,使其以这种方式运行。

<build>
    . . .
    <plugins>
        . . .
        <plugin>
            <groupId>com.samaxes.maven</groupId>
            <artifactId>minify-maven-plugin</artifactId>
            <version>1.7.6</version>
            <executions>
                <execution>
                    <id>default-minify</id>
                    <phase>prepare-package</phase>
                    <configuration>
                        <charset>UTF-8</charset>
                        <webappSourceDir>${basedir}/src/main/resources/static</webappSourceDir>
                        <webappTargetDir>${project.build.outputDirectory}/static</webappTargetDir>
                        <jsSourceDir>js</jsSourceDir>
                        <jsSourceFiles>
                            <jsSourceFile>myscript.js</jsSourceFile>
                        </jsSourceFiles>
                        <jsTargetDir>js</jsTargetDir>
                        <jsFinalFile>myscript.js</jsFinalFile>
                        <jsEngine>CLOSURE</jsEngine>
                        <skipMerge>true</skipMerge>
                        <nosuffix>true</nosuffix>
                        <verbose>true</verbose>
                    </configuration>
                    <goals>
                        <goal>minify</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

注意,我选择将原始(即未缩小的)Javascript源文件放在我的项目树中的${basedir}/src/main/resources/static/js中。我还启用了nosuffix和skipMerge标志,以便缩小myscript的输出。js被保存到一个同名的文件中(在你的情况下,这可能不是你想要的)。

更新(2018-04-13):根据要求,以下是我使用minify maven插件的项目的整个POM文件。关于这个POM文件,有几点需要注意:

  • 我已经删除了一些不相关的依赖项和其他特定于我的项目的配置参数,但完成任务所需的一切都应该在这里。
  • 我的项目仅在使用Relase-profile时执行Javascript缩小,因此您需要使用mvn清洁安装-P发布-配置文件之类的内容构建此项目以进行缩小。
  • 我已将Maven配置为将项目构建为可执行jar,它可以使用java-jar目标/项目-0.0.1-SNAPSHOT-exec.jar运行。这将启动Spring Boot应用程序。
  • 我保留了Groovy和Spock测试框架的依赖项,因为我使用它们在我的项目中编写测试。

希望这能有所帮助。

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>project</artifactId>
    <packaging>jar</packaging>
    <version>0.0.1-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.10.RELEASE</version>
    </parent>

    <properties>
        <java.version>1.8</java.version>
        <spring-boot.version>1.5.10.RELEASE</spring-boot.version>
        <spock.version>1.1-groovy-2.4</spock.version>
        <groovy.version>2.4.6</groovy.version>
        <maven.javadoc.skip>true</maven.javadoc.skip>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>${spring-boot.version}</version>
                <configuration>
                    <mainClass>com.example.project.Application</mainClass>
                    <classifier>exec</classifier>
                </configuration>
            </plugin>
            <plugin>
                <groupId>external.atlassian.jgitflow</groupId>
                <artifactId>jgitflow-maven-plugin</artifactId>
                <version>1.0-m5.1</version>
                <configuration>
                    <autoVersionSubmodules>true</autoVersionSubmodules>
                    <pushReleases>true</pushReleases>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.gmavenplus</groupId>
                <artifactId>gmavenplus-plugin</artifactId>
                <version>1.6</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>compileTests</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.21.0</version>
                <configuration>
                    <useFile>false</useFile>
                    <includes>
                        <include>**/*Spec.*</include>
                    </includes>
                    <runOrder>random</runOrder>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>2.21.0</version>
                <configuration>
                    <useFile>false</useFile>
                    <includes>
                        <include>**/*SpecIT.*</include>
                    </includes>
                    <runOrder>random</runOrder>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>integration-test</goal>
                            <goal>verify</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>${spring-boot.version}</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>${groovy.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>${spring-boot.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.spockframework</groupId>
            <artifactId>spock-core</artifactId>
            <version>${spock.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.spockframework</groupId>
            <artifactId>spock-spring</artifactId>
            <version>${spock.version}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <profiles>
        <profile>
            <id>release-profile</id>
            <activation>
                <property>
                    <name>performRelease</name>
                    <value>true</value>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>com.samaxes.maven</groupId>
                        <artifactId>minify-maven-plugin</artifactId>
                        <version>1.7.6</version>
                        <executions>
                            <execution>
                                <id>default-minify</id>
                                <phase>prepare-package</phase>
                                <configuration>
                                    <charset>UTF-8</charset>
                                    <webappSourceDir>${basedir}/src/main/resources/static</webappSourceDir>
                                    <jsSourceDir>js</jsSourceDir>
                                    <jsSourceFiles>
                                        <jsSourceFile>myscript.js</jsSourceFile>
                                    </jsSourceFiles>
                                    <webappTargetDir>${project.build.outputDirectory}/static</webappTargetDir>
                                    <jsFinalFile>myscript.js</jsFinalFile>
                                    <jsEngine>CLOSURE</jsEngine>
                                    <skipMerge>true</skipMerge>
                                    <nosuffix>true</nosuffix>
                                    <verbose>true</verbose>
                                </configuration>
                                <goals>
                                    <goal>minify</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>

                    <!-- Skip source jar generation -->
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-source-plugin</artifactId>
                        <version>2.4</version>
                        <configuration>
                            <skipSource>true</skipSource>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>

 类似资料:
  • 我有一些javascript捆绑文件,非常大,大约1MB。我正在尝试使用yml文件中的以下应用程序属性打开响应压缩: 但不管用。没有压缩发生。 请求标题: ===编辑3===进一步遵循@Chimmi的建议。我已经在建议的地方设置了断点。对静态资源(js文件)的请求似乎从未在这些断点停止过。只有rest API请求才会这样做。对于这些请求,由于某种原因,内容长度为零,这导致跳过内容压缩。 由于@Ch

  • 我正在使用一个Maven多模块,其中一场战争取决于另一场战争。 Spring Boot webapp依赖于只提供html文件的基本webapp。 当我运行SpringBoot应用程序时,我能够从主webapp(SpringBoot应用程序)访问服务和html,但是我不能从DependencyWar(404)访问html文件。但是这些html文件在SpringBootWebApp战争中得到了很好的打

  • 我在启动spring boot应用程序时遇到以下错误。这是我的第一个spring boot项目。因此,我不确定错误以及如何修复它。 申请启动失败 描述: 配置为侦听端口8080的Tomcat连接器无法启动。端口可能已在使用中,或者连接器可能配置错误。 行动: 验证连接器的配置,识别并停止在端口8080上侦听的任何进程,或者将此应用程序配置为在另一个端口上侦听。

  • 在我看来,SpringBoot项目需要很长时间来加载。发生这种情况可能是因为SpringBoot正在为您配置组件,其中一些组件您甚至可能不需要。要做的最明显的事情是从您的类路径中移除不必要的依赖项。然而,这还不够。 还有什么可以做的来加快SpringBoot应用程序的启动时间吗?

  • 我一直在做曼德尔布洛特集,并试图缩放,但缩放模式变得非常麻烦。当我缩放它完美地缩放,但图像大小减少到原来的一半。下次我再次缩放时,图片大小会增加,并试图跳过查看窗口。代码是c /opengl.在这里发布之前,我试图让我的代码变得干净一点。 执行时

  • 问题内容: 我的Maven依赖有什么问题。当我包含JPA时,我会列出pf例外 这是我的Maven依赖项 我的例外 和我的源代码 因此,我没有任何想法(不幸的是,没有示例)如何运行Spring boot和hibernate状态。 问题答案: 您是否为数据源设置了或?这是一个例子: 有关可以在何处放置配置文件以及如何配置应用程序以处理任何目录中的属性文件的说明,请参阅此链接以获取更多信息。