Gradle:使用注释从包装(jar)中排除某些文件

时间:2015-11-18 09:05:08

标签: java gradle annotations

我正在寻找一种解决方案来排除某些标记有特定注释的文件,这些文件将打包在jar中(可以编译但不能创建jar的一部分)。

我尝试了以下步骤

  1. 使用以下命令创建ClassLoader:sourceSets.main.output + configurations.runtime
  2. 在已编译的类中递归检查,使用ClassLoader.loadClass加载类并检查是否存在注释(Class.isAnnotationPresent)
  3. 任何指针都会有所帮助。

1 个答案:

答案 0 :(得分:0)

我能够实现这么长时间,但忘了我在这里发布了这个问题。

我以前的解决方案实际上非常简单 - 使用gradle jar任务 -

jar {
    excludes = excludedFiles(sourceSets.main.allSource.files)
    baseName = artifactName
    version = artifactVersion
}

定义excludedFiles函数以查找提供的源目录中的文件 -

def excludedFiles(Collection<File> files) {
   List<String> classes = new ArrayList<>()
   files.each { file ->
   if (file.isDirectory()) {
     excludedFiles(Arrays.asList(file.listFiles()))
   }
   else {
     if (file.text.contains("@YourAnnotation") && file.text.contains("import foo.bar.YourAnnotation")) {
       classes += getClassName(file.absolutePath)
     }
   }
 }
 return classes
}

希望这有帮助。