Я пытаюсь интегрировать код Clojure с Java и Groovy под Intellij в проекте Grails 3.Моя конечная цель - использовать некоторый код Clojure, смешанный с кодом Groovy.
Я написал класс в Groovy и пытаюсь создать его экземпляр в Clojure.Вот что я сделал:
1) Я написал класс app / server / src / main / groovy / mypackage / State.groovy
package mypackage
class State {
def Calendar date;
def static State stateBuilder() {
State state = new State()
state.date = Calendar.getInstance()
return state;
}
2) Затем я написал файл под названием app/server/src/main/clj/state.clj следующим образом:
(ns mypackage.state)
(import mypackage.State)
(def groovystate (new State))
(println (bean groovystate))
(defn -main
[& args]
(println "Hello, World!"))
3) Наконец, я написал следующее приложение / server / project.clj
(defproject brkmopt "0.1.0-SNAPSHOT"
:description "Test Clojure and Grails integration"
:url ""
:plugins [[lein-localrepo "0.5.4"]]
:license {:name ""
:url ""}
:repositories [["bintray-grails-plugins" "https://dl.bintray.com/grails/plugins"]
["java.net" "https://download.java.net/maven/2"]
]
:dependencies [[org.clojure/clojure "1.9.0"]
[org.codehaus.groovy/groovy-all "3.0.0-alpha-4" :extension "pom"]
[org.grails/grails-datastore-gorm "6.1.9.RELEASE"]
]
:main mypackage.state
:source-paths ["src/main/clj"]
:java-source-paths ["src/main/java"]
:test-paths ["src/test/clj"]
:resource-paths ["resources"]
:target-path "out/production"
:aot :all)
Обратите внимание, что ясконфигурировано: target-path to "out / production" и сконфигурировано: зависимости для загрузки некоторых зависимостей. lein не удается найти в проекте Groovy.
Это сработало.Запустив «lein run», я получил:
{:date nil}
Hello, World!
, как и ожидалось.
Но если я заменил:
(def groovystate (new State))
на
(def groovystate (State/stateBuilder))
Компилятор начал запрашивать больше зависимостей, и я провел несколько часов в аду зависимостей, что в итоге привело меня в тупик, требуя зависимости, которую я не смог найти ни в одном репозитории maven.
Последняя версия project.clj:
(defproject brkmopt "0.1.0-SNAPSHOT"
:description "Test Clojure and Grails integration"
:url ""
:plugins [[lein-localrepo "0.5.4"]]
:license {:name ""
:url ""}
:repositories [["bintray-grails-plugins" "https://dl.bintray.com/grails/plugins"]
["java.net" "https://download.java.net/maven/2"]
;["central" "https://central.maven.org/maven2/"]
;["sonatype" "https://oss.sonatype.org/content/repositories/releases"]
;["snapshots" "https://blueant.com/archiva/snapshots"]
]
:dependencies [[org.clojure/clojure "1.9.0"]
[org.clojure/data.priority-map "0.0.10"]
[com.google.code.gson/gson "2.7"]
[org.codehaus.groovy/groovy-all "3.0.0-alpha-4" :extension "pom"]
[org.grails/grails-datastore-gorm "6.1.9.RELEASE"]
[org.grails.plugins/events "3.3.2"]
[org.grails/grails-core "3.3.3"]
[org.grails/grails-plugin-domain-class "3.3.3"]
[org.grails/grails-web-databinding "3.3.3"]
[org.grails/grails-gsp "3.3.1"]
]
:main mypackage.state
:source-paths ["src/main/clj"]
:java-source-paths ["src/main/java"]
:test-paths ["src/test/clj"]
:resource-paths ["resources"]
:target-path "out/production"
:aot :all)
Я не смог найти grails-gsp версию 3.3.1.Во всяком случае, я уверен, что это не путь.Предполагалось использовать те же библиотеки, которые использует Grails, а не загружать их снова.
Все необходимые зависимости находятся в папке .dr / .gradle /, но я не знаю, как сделать их видимыми для Clojure.
Пожалуйста, сообщите!
---------- РЕДАКТИРОВАТЬ 1 ----------
Как подсказывает Алекс, я включаюДополнительная информация.Я встраиваю код Clojure в проект Grail 3, как показано на рисунке ниже:
![enter image description here](https://i.stack.imgur.com/oAJLa.png)
Когда это работает (первый случай), я вижу это:
root@linuxkit-025000000001:~/workspace/brkm_app/server# lein run
Compiling com.nitryx.brkmopt.state
{:date nil}
Hello, World!
root@linuxkit-025000000001:~/workspace/brkm_app/server#
Когда я изменяю на (println (bean (groovystate)) и включаю все зависимости, которые мог, я вижу это:
root@linuxkit-025000000001:~/workspace/brkm_app/server# lein run
Could not find artifact org.grails:grails-gsp:jar:3.3.1 in central (https://repo1.maven.org/maven2/)
Could not find artifact org.grails:grails-gsp:jar:3.3.1 in clojars (https://repo.clojars.org/)
Could not find artifact org.grails:grails-gsp:jar:3.3.1 in bintray-grails-plugins (https://dl.bintray.com/grails/plugins)
Could not find artifact org.grails:grails-gsp:jar:3.3.1 in java.net (https://download.java.net/maven/2)
This could be due to a typo in :dependencies, file system permissions, or network issues.
If you are behind a proxy, try setting the 'http_proxy' environment variable.
root@linuxkit-025000000001:~/workspace/brkm_app/server#
Grails работает на Gradle. Lein на MavenЯ запускаю его в док-контейнере, и там нет папки .m2.
root@linuxkit-025000000001:~# ls -la
total 20
drwxr-xr-x 1 root root 4096 Feb 16 18:41 .
drwxr-xr-x 1 root root 4096 Feb 12 15:18 ..
drwx------ 2 root root 4096 Feb 16 18:41 .cache
drwxr-xr-x 3 root root 4096 Feb 16 16:23 .lein
drwxr-xr-x 1 root root 4096 Feb 12 15:18 .vscode
drwxr-xr-x 15 root root 480 Feb 13 19:42 workspace
root@linuxkit-025000000001:~# cd workspace
root@linuxkit-025000000001:~/workspace# ls -la
total 36
drwxr-xr-x 15 root root 480 Feb 13 19:42 .
drwxr-xr-x 1 root root 4096 Feb 16 18:41 ..
-rw-r--r-- 1 root root 6148 Feb 13 19:27 .DS_Store
drwxr-xr-x 9 root root 288 Feb 15 14:08 .dr
drwxr-xr-x 18 root root 576 Feb 16 22:08 .git
-rw-r--r-- 1 root root 120 Feb 13 17:42 .gitignore
drwxr-xr-x 13 root root 416 Feb 16 17:09 brkm_app
drwxr-xr-x 4 root root 128 Feb 13 16:53 doc
-rw-r--r-- 1 root root 290 Feb 13 18:56 docker-compose.yml
drwxr-xr-x 9 root root 288 Feb 13 19:27 dockerfiles
-rwxr-xr-x 1 root root 994 Feb 13 17:42 run_container_linux.sh
-rwxr-xr-x 1 root root 949 Feb 15 18:47 run_container_mac.sh
-rwxr-xr-x 1 root root 37 Feb 13 17:50 run_idea.sh
-rwxr-xr-x 1 root root 20 Feb 13 17:49 run_visual_studio_code.sh
drwxr-xr-x 8 root root 256 Feb 15 11:51 tests
root@linuxkit-025000000001:~/workspace# cd brkm_app/
root@linuxkit-025000000001:~/workspace/brkm_app# ls -la
total 40
drwxr-xr-x 13 root root 416 Feb 16 17:09 .
drwxr-xr-x 15 root root 480 Feb 13 19:42 ..
-rw-r--r-- 1 root root 21 Feb 13 16:53 .gitignore
drwxr-xr-x 4 root root 128 Feb 13 17:37 .gradle
drwxr-xr-x 12 root root 384 Feb 16 22:13 .idea
-rw-r--r-- 1 root root 692 Feb 13 17:40 brkm_app.iml
drwxr-xr-x 13 root root 416 Feb 13 16:53 client
drwxr-xr-x 3 root root 96 Feb 13 16:53 gradle
-rwxr-xr-x 1 root root 4971 Feb 13 16:53 gradlew
-rwxr-xr-x 1 root root 2404 Feb 13 16:53 gradlew.bat
-rwxr-xr-x 1 root root 12540 Feb 15 11:51 lein
drwxr-xr-x 16 root root 512 Feb 16 22:08 server
-rw-r--r-- 1 root root 26 Feb 13 16:53 settings.gradle
Я нашел зависимости в папке .dr, выполнив команду find. Я не совсем понимаю, почему они есть, икак они используются Grails / Gradle.