yuicompressor maven 不工作

yuicompressor maven is not working

我正在 Spring 使用 Maven 构建启动 Web 应用程序。我想压缩所有 js & css 文件。我选择了 YUI 压缩。当我构建我的应用程序时,yui 压缩没有发生。我收到所有 js 和 css 文件的以下消息。

[INFO] 没什么可做的,**css\base.css 比原来年轻,使用 'force' 选项或清理目标

我错过了什么?

这是我的 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>MyApp</groupId>
      <artifactId>MyApp</artifactId>
      <version>0.0.1</version>
      <packaging>war</packaging>
    <!--   <url>http://maven.apache.org</url> -->

        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>

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

        <dependencies>
            my dependencies
        </dependencies>
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-compiler-plugin</artifactId>
                    <version>3.3</version>
                    <configuration>
                        <source>1.8</source>
                        <target>1.8</target>
                    </configuration>
                </plugin>

                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <executable>true</executable>
                    </configuration>
                </plugin>
                <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>
                    </configuration>
                  </plugin> 
            </plugins>
        </build>
    </project>

项目结构:

这不是错误,并且按预期工作。仅当资源的缩小版本不存在或源文件已更改时,插件才会创建资源的缩小版本。当插件发现缩小版本创建晚于源文件时,它不做缩小并假设什么都不做。

如您所见,消息建议您使用 force 选项(在这种情况下,将始终生成缩小版本,但它会更慢)或清理目标(执行 mvn clean 以删除所有生成的文件,以便再次生成它们)。


更新:

我能够重现该问题。发生这种情况是因为 yuicompressor-maven-plugin 在 maven-resource-plugin 之后执行。前者将src/main/resources中的所有文件复制到target目录下,执行yuicompressor时,发现文件已经在这里了(当然是非压缩的),并显示此消息。

要解决此问题,首先,我们需要配置资源插件以排除资源:

<build>
    <resources>
        <resource>
            <directory>${basedir}/src/main/resources/public</directory>
            <excludes>
                <exclude>*.js</exclude>
                <exclude>*/*.js</exclude>
            </excludes>
        </resource>
    </resources>
</build>

但是并没有解决,因为后来发现yuicompressor不处理这些文件。这是因为插件在错误的目录中查找,我们还必须对其进行配置:

<plugin>
    <groupId>net.alchim31.maven</groupId>
    <artifactId>yuicompressor-maven-plugin</artifactId>
    <version>1.5.1</version>
    ...
    <configuration>
        <nosuffix>true</nosuffix>
        <sourceDirectory>src/main/resources/public</sourceDirectory>
    </configuration>
</plugin>

使用-Dmaven.clean.failOnError=false mvn 命令。 示例:mvn clean -Dmaven.clean.failOnError=false

只需添加 Force 选项,我就解决了这个问题:

        <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>

                <force>true</force>

                <sourceDirectory>src/main/resources/static</sourceDirectory>
                <outputDirectory>${project.build.directory}/classes</outputDirectory>
               
                <excludes>
                    <exclude>**/*.min.js</exclude>
                    <exclude>**/*.min.css</exclude>
                </excludes>
            </configuration>
        </plugin>