вторник, 2 марта 2010 г.

Лунный кофе

Потребовалось очень гибко конфигурировать логику работы
программы. Писать все в коде муторно. Созданный ранее для этих целей декларативный миниязык уже плохо справляется со своими задачами. Соответственно принято решение встроить в проект какой нибудь скриптовый язык.

Итак это будет Lua. Потому что очень маленький и просто встраивается.
Поскольку проект написан на java то и потребуется luajava.
но в репах его нет. и рпмки я не нашел.
Тут я решил тряхнуть слакварным прошлым и собрать все что надо
ручками.

сам luajava лежит здесь http://www.keplerproject.org/luajava/
там же есть мануалы по встраиванию в джава и как все это собрать. Но у меня х86_64 и потому будут небольшие отличия.

В системе уже установлен lib64lua5.1 и помечен как неудаляемый(удивлен).

В дополнение к тем пакетам что указаны в офф доке необходимы
lib64lua-static-devel
lib64lua-devel

Cобирать надо так.
make LIB_LUA=/usr/lib64/liblua.a

В противном случе make пытается привинтить 32х разрядную библиотеку
которая отсутствует, естественно.

Путь тот куда поставился пакет lib64lua-static-devel

у меня получилось примерно следующее
luajava-1.1/# make LIB_LUA=/usr/lib64/liblua.a
/opt/bea/jdk150_12/bin/javadoc -public -classpath src/java/ -quiet -d "doc/us/API" src/java/org/keplerproject/luajava/JavaFunction.java src/java/org/keplerproject/luajava/LuaException.java src/java/org/keplerproject/luajava/LuaInvocationHandler.java src/java/org/keplerproject/luajava/LuaObject.java src/java/org/keplerproject/luajava/LuaState.java src/java/org/keplerproject/luajava/LuaStateFactory.java src/java/org/keplerproject/luajava/Console.java
export MACOSX_DEPLOYMENT_TARGET=10.3; gcc -shared -o libluajava-1.1.so src/c/luajava.o /usr/lib64/liblua.a
------------------
Build Complete
------------------

После чего как и обещает офф дока джарник и библиотека появились

Поскольку я пользуюсь для сборки мавеном то прописываю в pom.xml
следующую зависимость

...
<dependency>
<groupId>luajava</groupId>
<artifactId>luajava-local</artifactId>
<version>local</version>
</dependency>
...

И импортирую получившийся ранее джарник в локальный репозитарий мавена.
mvn install:install-file -DgroupId=luajava -DartifactId=luajava-local
-Dversion=local -Dpackaging=jar -Dfile=./luajava-1.1.jar

После всех этих манипуляций проект начинает нормально компилятся

Дальнейшие действия по встраиванию описаны в документации

Дополнив проект небольшим количеством кода запускаю результат.

LD_LIBRARY_PATH=./ ~/bin/jdk1.6.0_17/bin/java -jar
target/func-test.jar test.lua

библиотека соответственно лежит тутже

все работает.. красота!
Осталость собрать библиотеку для Solaris.

Комментариев нет:

Отправить комментарий