Можно ли смешать языки JVM? т.е.: Groovy & Clojure

Дело в том, что вы должны указать, что все пути аутентифицированы, поскольку это не реализация по умолчанию объекта HttpSecurity.

.antMatchers(HttpMethod.GET, "/api/posts/{postId}").permitAll()
.antMatchers(HttpMethod.GET, "/api/posts/myPosts").hasRole("USER")
.anyRequest().authenticated()

Предлагаю проверить эту ссылку здесь, ребята из baeldung, они дают краткое введение в Spring Security.

12
задан 26 February 2009 в 17:03
поделиться

6 ответов

Пока рассматриваемые языки на самом деле производят классы Java (который является: классы, которые известны платформе Java, не обязательно записанной на языке Java), затем да: они могут легко взаимодействовать друг с другом.

По крайней мере, для Groovy я знаю, что совершенно возможно записать классы, которые могут использоваться из "нормального" кода Java.

15
ответ дан 2 December 2019 в 03:49
поделиться

Clojure может быть скомпилирован в .class файлы через gen-class и используемый от Java как любой другой код; посмотрите здесь.

14
ответ дан 2 December 2019 в 03:49
поделиться

Существует также пример о том, как можно назвать код Clojure от JRuby.

4
ответ дан 2 December 2019 в 03:49
поделиться

Как уже упоминалось, вы можете получить доступ к классам Clojure из Groovy через предварительную компиляцию.

Вы также можете получить доступ к большинству популярных языков сценариев через API сценариев Java 6, хотя Scala и Clojure официально не поддерживаются. Вот примеры из Groovy:

http://groovy.codehaus.org/JSR-223+access+to+other+JVM+languages ​​

Вы также можете получить доступ к классам Clojure из Groovy, например (для Groovy 1.7 снимок):

@Grab(group='org.clojure', module='clojure', version='1.0.0')
import clojure.lang.*

def ss = StringSeq.create('The quick brown fox')
def done = false
while (!done) {
  println ss.first()
  ss = ss.next()
  done = !ss
}

Или взаимодействовать, создавая новый процесс (снова для снимка Groovy 1.7):

@Grab(group='org.clojure', module='clojure', version='1.0.0')
import clojure.lang.Script

def src = new File('temp.clj')
src.text = '''
(defn factorial [n]
   (if (< n 2)
       1
       (* n (factorial (- n 1)))))
(println (factorial 4))
'''
def path = System.getProperty('user.home') + '/.groovy/grapes/org.clojure/clojure/jars/clojure-1.0.0.jar'
new AntBuilder().with {
    java(classname:Script.name, classpath:path) {
        arg(value:src.path)
    }
}

Существует также плагин Clojure для Grails, который обеспечивает простой доступ для выполнения кода clojure из любого артефакта Grails (контроллеры, библиотеки тегов, службы и т. д. ...):

http: / / grails.org/plugin/clojure

2
ответ дан 2 December 2019 в 03:49
поделиться

Как уже упоминалось, Clojure может легко взаимодействовать с Java. Хотя многие из примеров, которые вы видите, показывают, как это сделать из REPL, после компиляции Clojure или любого другого языка JVM в класс или файл jar его можно вызвать из Java, как и любой другой класс.

В В моем случае сложность (не большая) заключалась в том, чтобы выяснить, как правильно использовать gen-class . На Clojure http://kenai.com/projects/binomialstats есть небольшой набор статистических функций, которые иллюстрируют, как это сделать. Эта библиотека Clojure используется в проекте Java - signtest. (Извините, так как я новичок, StackOverflow не позволяет мне публиковать несколько ссылок.)

Что было бы действительно хорошо, если бы некоторые из IDE могли работать с разными языками в одном проекте. Два упомянутых выше проекта поддерживаются, например, как два отдельных проекта NetBeans. Обеспечение постоянной синхронизации двух частей может потребовать дополнительных усилий.

3
ответ дан 2 December 2019 в 03:49
поделиться

Другой средой, которая упрощает смешивание языков в JVM, является WebSphere sMash (он же Project Zero). Он включает:

1
ответ дан 2 December 2019 в 03:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: