在编译之前列出带有Gradle的SourceSet中的所有Java软件包

时间:2018-09-11 22:31:29

标签: java gradle groovy

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 :(得分:-1)

我进行了一些搜索,但没有找到一个完美的干净解决方案。

但这是一个基于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 }