Frege ランタイムとライブラリを .java 中間体だけにコンパイルする方法はありますか? .class ファイルを解析できない J2ObjC 経由で iOS アプリの一部として Frege を使用しようとしています。
質問する
153 次
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 ソースと一緒にコンパイルすることはできません。foo
bar
foo
foo
foo
bar
それとは別に、これらのリソースを何度でも使用して、スタンドアロンの 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 に答える