Создание frege.jar и включение промежуточных файлов .java (для использования с J2ObjC)

Есть ли способ скомпилировать среду выполнения и библиотеки Frege только для их промежуточных звеньев .java? Я пытаюсь использовать Frege как часть приложения iOS через J2ObjC, которое не может анализировать файлы .class.


person Charles Maria    schedule 04.11.2015    source источник


Ответы (2)


Согласно некоторым тестам, будет работать следующее:

# 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 и исходные коды Java, соответствующие классам в этом jar-файле в разделе build/frege/. Важно, чтобы вы использовали только этот компилятор со своими самодельными исходными кодами Java. Предположим, что foo было заменено на bar в каком-то модуле, а ваш исходный код frege ссылается на foo. Затем вы можете скомпилировать его с более старым fregec.jar, но вы не можете скомпилировать сгенерированный java-файл (в котором все еще есть foo) вместе с вашими исходными кодами java, где нет foo, только bar.

Кроме того, теперь вы можете использовать эти ресурсы так часто, как хотите, для создания отдельной библиотеки/приложения 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
person Ingo    schedule 06.11.2015

Ответ Инго отлично подходит для создания промежуточных файлов Java. Просто хотел добавить свой ответ, чтобы уточнить, что у Фреге много зависимостей, которые несовместимы с J2ObjC и поэтому не могут работать с J2ObjC.

person Charles Maria    schedule 12.11.2015