sass maven插件不编译scss文件

sass maven插件不编译scss文件,maven,sass,Maven,Sass,我尝试将scss转换集成到我们现有的maven项目中 我试图补充 <plugin> <groupId>nl.geodienstencentrum.maven</groupId> <artifactId>sass-maven-plugin</artifactId> <version>${maven.sass.plugin.version}</version> <executio

我尝试将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>
如果使用第二个(注释的)目的地,它将跳过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目录中吗?是否缺少一些我应该应用的配置?

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

使用
${project.basedir}/src/main/webapp/css
生成的控制台输出显示目标目录中已经有959个文件。考虑到
src/main/webapp/scss
中只有一个文件,我假设
src/main/webapp/css
中的959个文件大部分是正常的、未生成的css文件,并且您打算添加插件生成的那些文件

查看插件的源代码,在2.22之前的版本中,如果文件同时存在于源目录和目标目录中,那么构建插件的标准是源目录树中的文件比目标目录中的任何文件都要年轻。有关2.12的实现,请参见。请注意,插件没有按名称比较源文件和目标文件,它只比较“极端”时间戳。我怀疑跳过编译的构建在
src/main/webapp/scss
中找不到比
src/main/webapp/css
中的所有文件都年轻的文件。您可以通过在构建之前修改一个.scss文件来验证我的假设。描述了一个非常类似的问题。这是版本2.22的一部分。这将使您的构建实际编译.scss文件,即使在目标目录中有较新的.css文件

退一步说,我建议不要在构建过程中修改
src/
。如中所述

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

鉴于

target
目录用于容纳生成的所有输出

行为是围绕着这个惯例建立起来的。例如
mvn clean
删除
target/
(或者更一般的
${project.build.directory}
)。它不会试图删除
src/
中生成的文件。查看开发者对上述问题的回复,很明显,插件开发者也有这样的想法:

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


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

我不确定解决方案,但我尝试了本文中提到的解决方法,它对我有效


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

我也有类似的问题。我很想知道你是否找到了解决方案。看看插件代码,它似乎在对源文件夹和目标文件夹进行比较,以检查复制的scss文件或其他文件是否存在差异(没有深入研究),但没有找到任何解决方案,因为它们是相同的文件夹/源文件。我在css文件夹中创建了一个“已编译”的子目录,并将其作为目标。它奏效了,所以这是我目前的解决办法。
src
  |-main
    |-webapp
      |-scss
        |- common.scss
        |- app.scss
        |- admin
          |- admin.scss
      |-css