ant - 在 ant 中将 Sass 和 Compass 作为 jar 运行时找不到文件错误

标签 ant jar jruby sass compass-sass

我使用以下教程在 Ant 中将 compass 添加为目标:http://caueguerra.com/tutorial-using-sass-in-a-java-project

这是我 jar 里的 gem :

java -jar jruby-compass-gems.jar -S gem list

*** LOCAL GEMS ***

chunky_png (1.2.5)
compass (0.11.5)
fssm (0.2.7)
rake (0.8.7)
sass (3.1.1)
sources (0.0.1)

这是我调用 compass compile 的 Ant 目标:

<project name="run-compass" basedir=".">
    <property name="apps.root" value="${basedir}/src/main/webapp/apps" />
    <property name="sass.dir" value="${apps.root}/resources/sass" />

    <!-- Include jruby-compass jar -->
    <path id="jruby.classpath">  
         <fileset dir="${basedir}">  
            <include name="jruby*.jar"/>  
         </fileset>  
    </path>

<target name="compile.sass">  
     <java classname="org.jruby.Main" fork="true" failonerror="true" classpathref="jruby.classpath">  
         <arg line="${basedir}/compile.rb ${basedir} compile ${sass.dir}"/>  
     </java>  
</target>  
</project>

对 compile.rb 进行以下修改:

# Instead of loading lib dirs, just add the first arg
# Dir.entries(ARGV[0]).each do |lib|  
#    $LOAD_PATH.unshift "#{ARGV[0]}/#{lib}/lib"  
#end  
$LOAD_PATH.unshift "#{ARGV[0]}"

require 'rubygems'   
require 'compass'  
require 'compass/exec'  

# select_appropriate_command_line_ui is no longer a valid method, so don't use
#command_line_class = Compass::Exec::Helpers.select_appropriate_command_line_ui [ARGV[1], ARGV[2], "-q"]  
exit Compass::Exec::SubCommandUI.new([ARGV[1], ARGV[2], "-q"]).run!

我在运行 ant 后在生成的 .css 文件中看到这个错误:

Syntax error: File to import not found or unreadable: shared.
              Load paths:
                C:\Users\aliu\workspace\ui/src/main/webapp/apps/resources/sass
                file:C:/Users/aliu/workspace/ui/jruby-compass-gems.jar!/gems/compass-0.11.5/frameworks/blueprint/stylesheets
                file:C:/Users/aliu/workspace/ui/jruby-compass-gems.jar!/gems/compass-0.11.5/frameworks/compass/stylesheets
                C:/Users/aliu/workspace/ui/src/main/webapp/apps/resources/sass/../../../lib/ext-4.0.7/resources/themes/stylesheets
                Compass::SpriteImporter
        on line 1 of file:C:/Users/aliu/workspace/ui/jruby-compass-gems.jar!/gems/compass-0.11.5/frameworks/compass/stylesheets/compass/css3/_border-radius.scss
        from line 1 of file:C:/Users/aliu/workspace/ui/jruby-compass-gems.jar!/gems/compass-0.11.5/frameworks/compass/stylesheets/compass/_css3.scss 

_border-radius.scss 中的违规行是:

@import "shared";

请注意加载路径包含 compass 样式表。我觉得 compass 能找到_border-radius.scss真的很奇怪, 但不是 _shared.scss ,因为它们在同一目录中。我检查了 jar 内容以确保 _shared.scss存在。有没有人经历过类似的事情,或者可以对这个问题有一些了解?任何建议表示赞赏。

更新:我测试了在 ${basedir} 中运行 compile.rb直接:

 compile.rb . compile src\main\webapp\apps\resources\sass

它正常工作并正确创建了 .css 文件,这意味着问题在于从 ant 运行。这是否意味着我需要以某种方式更正 Ant 运行路径?

最佳答案

这充其量是一种解决方法,但我意识到虽然找不到 @import "shared",但是 @import "compass/css3/shared" 没问题,所以我修改了所有此类本地 @import 以引用更绝对的路径。

关于ant - 在 ant 中将 Sass 和 Compass 作为 jar 运行时找不到文件错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8236327/

相关文章:

java - 如何调试 Eclipse 构建?

java - 如何创建可在 Android-Studio 项目中使用的 jar?

java - 为什么我将应用程序导出到 Jar 后得到 "A Java Exception has occurred"?

compilation - 编译jruby "Hello world"问题

jruby - 我可以将 Java 类文件导入到 JRuby 中吗?

eclipse - 防止 eclipse 在运行 Ant 任务之前构建项目

java - IntelliJ "provided"范围的 Ant 等效项

java - Bash shell 使用 ant 构建 java 应用程序

java - 获取包(jar)中具有特定后缀的所有资源

ruby-on-rails - JRuby - Warbler 不保留符号链接(symbolic link)