Перечислите все пакеты Java в SourceSet с Gradle, перед компиляцией - PullRequest
0 голосов
/ 12 сентября 2018

Внутри файла build.gradle, какой самый краткий способ получить список всех пакетов в SourceSet?

Я могу получить его, анализируя каждый исходный файл, как показано ниже -

def sourceSet = project.sourceSets.findByName('test')
def pattern = Pattern.compile('package (\\S+);')
def packages = []
sourceSet.allSource.each {
  for (def scan = new Scanner(it); scan.hasNext();) {
    def matcher = scan.nextLine() =~ pattern
    if (matcher.matches()) {
      packages << matcher[0][1]
      break
    }
  }
}
packages.unique(true)

// allows, e.g.
packages.each { println it }

- но кажется, что должен быть лучший способ.


Отредактировано, чтобы добавить: Мне нужна эта информация для передачи дополнительных аргументов JVM во время компиляции, поэтому мне нужно получить ее из исходного кода перед компиляцией.

1 Ответ

0 голосов
/ 25 октября 2018

Я сделал несколько поисков и не нашел идеального чистого решения.

Но вот один, основанный на java файлах, использующий путь для разрешения пакета. Не нужно использовать allSource, так как в пакете содержатся только java файлы.

Это решение позволяет избежать чтения всех файлов.

def sourceSet = project.sourceSets.findByName('main').java
def packages = sourceSet
.filter{ it.path.endsWith('.java') }
.collect{ it.getParentFile().path
    .substring(sourceSet.srcDirs[0].path.length()+1)
    .replace('/', '.') }
.unique()

packages.each { println it }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...