我一直在努力让Buildr编译我的Scala 2.8项目,我希望有人可能已经想到了这一点.
目前我有标准的HelloWorld应用程序,其中包含如下构建文件:
ENV['JAVA_HOME'] = 'C:\Program Files (x86)\Java\jdk1.6.0_17'
ENV['SCALA_HOME'] = 'C:\scala-2.8.0.Beta1-RC6'
define "HelloWorld" do
#artifact_ns['Buildr::Compiler::Scalac'].library = '2.8.0'
require 'buildr/scala'
puts Scala.version
end
Run Code Online (Sandbox Code Playgroud)
当我运行buildr时,我得到以下输出:
(在C:/ Users/Travis/eclipse_ws/HelloWorld,开发中)
2.7.5
构建HelloWorld将HelloWorld
编译到C:/ Users/Travis/eclipse_ws/HelloWorld/target/classes
Buildr中止了!
←[31mScala编译器崩溃:
#←[0m
第一个问题是NoClassDefFoundError - 它找不到scala编译器的主类.第二个问题是Scala.version打印出2.7.5.这是不正确的,因为SCALA_HOME路径指向2.8版本.
最后,使用--trace标志向我显示Buildr正在生成一个有点正确的scalac命令,当我手动运行该命令时,所有内容都会编译.我说它有点正确只是因为一些cp条目是重复的.请参阅以下内容:
scalac -classpath C:/scala-2.8.0.Beta1-RC6/lib/scala-library.jar; C:/scala-2.8.0.Beta1-RC6/lib/scala-compiler.jar; C:/ scala- 2.8.0.Beta1-RC6/lib/scala-library.jar; C:/scala-2.8.0.Beta1-RC6/lib/scala-compiler.jar -sourcepath C:/ Users/Travis/eclipse_ws/HelloWorld/src/main/scala -d C:/ Users/Travis/eclipse_ws/HelloWorld/target/classes -verbose -g C:/Users/Travis/eclipse_ws/HelloWorld/src/main/scala/hw/HelloWorld.scala
我尝试了另外一件事(但是错误的构建器)是设置以下内容(我认为不需要SCALA_HOME存在):
#artifact_ns['Buildr::Compiler::Scalac'].library = '2.8.0'
Run Code Online (Sandbox Code Playgroud)
那么任何想法?
下面是我的系统信息的快速列表:Win 7 64位JDK 6 32位本地设置为buildr但JDK 6 64位系统范围Ruby 1.8.6 32位Buildr 1.3.5 32位Scala 2.8.0.Beta1-RC6
我正在考虑做的另一件事是重新安装我的32位JDK并将其从名称中带有(x86)的目录中取出.虽然我不确定这是否与我当前的问题相关,但我发现Scala bat文件中的螺丝.
提前致谢!
我有以下输入:
(def nums [123456789012 123456789012])
Run Code Online (Sandbox Code Playgroud)
我想要以下输出:
[[1234 5678 9012] [1234 5678 9012]]
Run Code Online (Sandbox Code Playgroud)
*注意这两个序列都包含数字而不是字符串......
我认为通过执行以下操作会非常简单:
这是我失败的尝试:
(defn split-nums [nums factor]
(map
#(map
(fn [x] (Integer/valueOf (str x)))
(partition factor (str %)))
nums))
(println (split-nums nums, 4))
Run Code Online (Sandbox Code Playgroud)
当我运行这个时,我收到以下错误:
Caused by: java.lang.NumberFormatException: For input string: "clojure.lang.LazySeq@4834333c"
Run Code Online (Sandbox Code Playgroud)
这告诉我,我正在处理一个懒惰的序列,我需要强制评估,但当我尝试(str(doall x))我得到相同的结果.
所以我在哪里出错?这是一个好方法吗?BTW.我刚刚开始学习clojure,所以我当然不是专家.
我有一个现有的Java应用程序,其中包含我想以编程方式修改的源文件.我需要能够对源文件进行分析,并根据该分析执行源转换.我还需要能够理解不同源文件之间的关系.我还想将此过程创建为独立的Java应用程序.
做了一点研究我发现了以下工具:代码模型和Eclipse JDT.我确定还有其他人.我已经排除了代码模型,因为它(据我所知)只允许生成新代码,不能使用现有代码.
Eclipse JDT库似乎符合我的所有需求.我能够轻松地解析源文件.我可以配置绑定,以便保留跨类型的信息.我现在遇到的问题是让ASTRewrite功能正常工作.看来(从我读过的例子和文档中)它只能在eclipse插件中运行.当我尝试使用重写器时,我收到以下错误:
java.lang.IllegalArgumentException: This API can only be used if the AST is created from a compilation unit or class file
那么我可以在独立应用程序中使用ASTRewrite功能,还是需要开始查看其他工具?