компилировать классные классы на лету - PullRequest
1 голос
/ 28 июня 2019

У меня есть основной основной проект с двумя подпроектами, один из которых java, а другой - отличная библиотека.

Проект java - это http-сервер, использующий библиотеки groovy.

Все компилируется и работает хорошо, но я пытаюсь скомпилировать библиотеки groovy на лету (при каждом запросе http), чтобы мне не приходилось перекомпилировать все, когда я вносил изменения в библиотеки groovy.

Возможно ли это?

1 Ответ

2 голосов
/ 01 июля 2019

Используется GroovyClassLoader.Есть некоторые оговорки, с которыми я столкнулся при работе с полями статических классов и перекрестными ссылками, но я в основном использую эту настройку в нескольких своих проектах.В некоторых случаях вам, возможно, придется посмотреть порядок загрузки.

def groovyClassLoader = new GroovyClassLoader()

def classPaths = [ '/opt/myProject/src/groovy/' ]

// First, add Class Paths -- these are the root directories of your code files.
for (String path in classPaths) {
    File dir = new File(path)
    groovyClassLoader.addClasspath(dir.getAbsolutePath())
}

def src = [ '/opt/myProject/src/groovy/net/me/program/' ] 

// Now, load groovy files
for (String path in src) {
    // Iterate differently if no access to FileUtils
    File[] directoryListing = FileUtils.listFiles(new File(path), null, false)
    if (directoryListing != null) {
        for (File child in directoryListing) {
            groovyClassLoader.parseClass(child)
        }
    }
}

// See all the loaded classes
println(groovyClassLoader.loadedClasses)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...