【问题标题】:sass-maven-plugin does not compile scss filessass-maven-plugin 不编译 scss 文件
【发布时间】:2017-12-14 16:20:07
【问题描述】:

我尝试将 scss 转换集成到我们现有的 maven 项目中。

我尝试添加

<plugin>
    <groupId>nl.geodienstencentrum.maven</groupId>
    <artifactId>sass-maven-plugin</artifactId>
    <version>${maven.sass.plugin.version}</version>
    <executions>
        <execution>
            <id>generate-css</id>
            <phase>generate-resources</phase>
            <goals>
                <goal>update-stylesheets</goal>
            </goals>
            <configuration>
                <sassOptions>
                    <always_update>true</always_update>
                </sassOptions>
                <includes>
                    <include>${scssSourceInclude}</include>
                </includes>
                <sassSourceDirectory>${project.basedir}/src/main/webapp/scss</sassSourceDirectory>
                <destination>${project.build.directory}/${project.build.finalName}/css</destination>
                <!-- <destination>${project.basedir}/src/main/webapp/css</destination> -->
            </configuration>
        </execution>
    </executions>
</plugin>

当我运行 mvn clean install 命令时,它为设置为“目标”目录的目标正确编译:

[INFO] --- sass-maven-plugin:2.12:update-stylesheets (generate-css) @ ui.web ---
[INFO] Checked 1 files for d:\work\git\repository\project\src\main\webapp\scss
[INFO] Checked 0 files for d:\work\git\repository\project\target\ui.web\css
[INFO] Compiling Sass templates
[INFO] No resource element was specified, using short configuration.
[INFO] Queueing Sass template for compile: d:\work\git\repository\project/src/main/webapp/scss => d:\work\git\repository\project/target/ui.web/css
...

如果使用第二个(注释的)目的地,它会跳过 scss 编译:

[INFO] --- sass-maven-plugin:2.12:update-stylesheets (generate-css) @ ui.web ---
[INFO] Checked 1 files for d:\work\git\repository\project\src\main\webapp\scss
[INFO] Checked 959 files for d:\work\git\repository\project\src\main\webapp\css
[INFO] Skip compiling Sass templates, no changes.

唯一的区别是我需要在 src 目录中生成 css 文件,因为需要进一步处理(缩小、连接、添加许可证头等)

目录结构:

src
  |-main
    |-webapp
      |-scss
        |- common.scss
        |- app.scss
        |- admin
          |- admin.scss
      |-css

有人可以向我解释为什么这些文件没有被处理到 src 目录中吗?我应该应用一些缺少的配置吗?

【问题讨论】:

  • 我也有类似的问题。我很想知道您是否找到了解决方案。
  • 查看插件代码,似乎它正在比较源文件夹和目标文件夹以检查复制的 scss 文件或其他东西的差异(没有深入研究)——而不是找到任何因为它们是相同的文件夹/源文件。我在我的 css 文件夹中创建了一个“已编译”的子目录,并将其作为目标。它有效,所以这是我现在的解决方法。

标签: maven sass


【解决方案1】:

我认为升级 2.22 或更高版本可以解决您的问题。原因如下:

&lt;destination&gt;${project.basedir}/src/main/webapp/css&lt;/destination&gt; 构建的控制台输出显示目标目录中已有 959 个文件。鉴于您在 src/main/webapp/scss 中只有一个文件,我假设 src/main/webapp/css 中的 959 个文件中的大多数是正常的、非生成的 CSS 文件,并且您打算添加由插件生成的文件。

查看插件的源代码,在 2.22 之前的版本中,鉴于文件存在于源目录和目标目录中,构建的标准是源目录树中的文件比目标目录中的任何文件都年轻.请参阅UpdateStylesheetsMojo#buildRequired() 了解 2.12 实现。请注意,该插件不会按名称比较源文件和目标文件,它只比较“极端”时间戳。我怀疑跳过编译的构建在src/main/webapp/scss 中找不到比src/main/webapp/css 中的所有文件年轻的文件。您可以通过在构建之前修改其中一个 .scss 文件来检验我的假设。 Issue #136: Wrong "build required" analysis when source and destination are the same 描述了一个非常相似的问题。这由 pull request #137: add css filter at destination when checking buildrequired 解决,它是 2.22 版的一部分。即使面对目标目录中较新的 .css 文件,这也会使您的构建实际编译 .scss 文件。

退后一步,我建议不要在构建期间修改src/。如Introduction to the Standard Directory Layout 中所述

src 目录包含用于构建项目的所有源材料 [...]

target 目录用于存放构建的所有输出。

行为是围绕这个约定构建的。例如mvn clean 删除target/(或更一般的${project.build.directory})。它不会尝试删除在src/ 中生成的文件。查看开发人员对上述问题的回复,很明显该插件的开发人员也有这种看法:

为什么有人想要混合源代码和编译代码?

考虑到这个约定,我建议您将 .scss 文件移动到 src/main/sass(默认值为 sassSourceDirectory),并让插件将 .css 文件输出到例如${project.build.directory}/generated-css-resources。然后让处理缩小、连接和许可证头的插件在这个目录以及src/main/webapp/css 上运行。如果他们不支持配置,您仍然可以通过两次执行插件来实现这一点,每个目录一个。另一种方法是在Maven Resources Plugin's copy-resources goal 的帮助下将生成的和未生成的.css 文件聚合在目录${project.build.directory}/aggregated-css 中,确保生成的文件在前,以避免最初的问题,并将此目录用作进一步处理的输入.我相信还有其他方法可以解决这个问题。

【讨论】:

    【解决方案2】:

    我不确定解决方案,但我尝试了这篇文章 https://github.com/jruby/jruby/issues/2498 中提到的解决方法,它对我有用。

    基本上将 sass-maven-plugin 版本降级到 2.0,它应该可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-24
      • 2013-03-16
      • 1970-01-01
      • 2017-04-19
      • 1970-01-01
      • 2018-10-11
      • 1970-01-01
      相关资源
      最近更新 更多