1

有没有办法将 Frege 运行时和库编译为它们的 .java 中间体?我正在尝试通过 J2ObjC 将 Frege 用作 iOS 应用程序的一部分,它无法解析 .class 文件。

4

2 回答 2

1

根据一些测试,以下将起作用:

# get the project
git clone https://github.com/Frege/frege.git
cd frege
# make a current frege compiler available and build a new one
cp ~/Downloads/frege3.23.370*.jar fregec.jar
make runtime fregec.jar
# optionally, remove the class files
find build/ -type f -name '*.class' -exec rm {} ';'

此时,您有一个可运行的编译器fregec.jar以及与该 jar 中的类对应的 java 源代码。build/frege/ 重要的是,您只能将此编译器与您自制的 java 源代码一起使用。因为,假设,在某些模块中foo已被替换为bar,并且您的 frege 源代码引用了foo. 然后您可以使用较旧的 fregec.jar 编译它,但是您不能将生成的 java 文件(其中foo仍有foobar

除此之外,您现在可以根据需要经常使用这些资源来创建独立的 frege 库/应用程序。

下面我将展示如何制作一个独立的控制台应用程序,请根据您的需要进行调整。假设是:

  • 该项目位于同级目录中standalone
  • 主要功能在模块中my.fine.App

开始了:

# go to project directory and make a directory for the generated code
cd ../standalone
mkdir -p generated
# compile the Frege code into generated/
java -jar ../fregec.jar -d generated -O -make my/fine/App.fr
# at this point, we could already run it, but had to supply fregec.jar
# in the classpath.
java -cp generated/:../fregec.jar my.fine.App
# remove class files
find generated/ -type f -name '*.class' -exec rm {} ';'
# now generate minimal standalone code, the idea being that javac
# gets the source files it needs automatically
javac -d bin -sourcepath generated:../frege:../frege/build generated/my/fine/App.java
java -cp bin my.fine.App
# jar it up
jar -cvf App.jar -C bin .
jar -uvfe App.jar my.fine.App
java -jar App.jar
于 2015-11-06T11:01:20.943 回答
0

Ingo 的答案非常适合创建 Java 中间文件。只是想添加我自己的答案,以澄清 Frege 有很多与 J2ObjC 不兼容的依赖项,因此无法与 J2ObjC 一起使用。

于 2015-11-12T02:50:21.687 回答