1

Frege ランタイムとライブラリを .java 中間体だけにコンパイルする方法はありますか? .class ファイルを解析できない J2ObjC 経由で iOS アプリの一部として Frege を使用しようとしています。

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 ソースが用意されています。このコンパイラーは、自作の Java ソースでのみbuild/frege/ 使用することが重要です。たとえば、一部のモジュールで forが に置き換えられており、ソースコードの参照が. その後、古い fregec.jar を使用してコンパイルできますが、生成された Java ファイル (まだ が含まれています) を Java ソースと一緒にコンパイルすることはできません。foobarfoofoofoobar

それとは別に、これらのリソースを何度でも使用して、スタンドアロンの frege ライブラリ/アプリケーションを作成できるようになりました。

以下に、スタンドアロン コンソール アプリケーションの作成方法を示します。必要に応じて変更してください。前提条件は次のとおりです。

  • プロジェクトは兄弟ディレクトリにありますstandalone
  • main 関数はモジュールにあります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 に答える