java - Gradle:验证类列表在构建时的类路径中

标签 java groovy gradle classpath

我有一个包含数十个XML文件的多项目版本,我的问题是您在某些XML文件中指定了完整的类名(例如com.myproject.CheckItem),但是在任何时候都没有检查来验证您键入的内容正确无误。构建过程。您只能通过使用XML的应用程序区域查看输入的内容是否正确,以查看其是否有效。

我想做的是,在gradle构建过程中的某个时刻,验证在这些XML文件中定义的类名称是我的类之一,还是在两个lib文件夹中作为编译依赖项添加的jar中的一个。

我现在所在的位置是Map<String, List<String>>,其中所有键都是类名,值是包含该键的文件列表。

因此,它看起来像这样:

com.myproject.CheckItem
  - C:\Development\my-app\app-core\src\main\resources\META-INF\Totally.xml
  - C:\Development\my-app\app-filter\src\main\resources\META-INF\Awesome.xml

com.myproject.CheckSquare
  - C:\Development\my-app\app-core\src\main\resources\META-INF\FarOut.xml

我整晚都在摆弄寻找解决此问题的最佳方法,而最简单的方法就是做这样的事情:
try {
    Class.forName("com.myproject.CheckItem", false, this.getClass().getClassLoader());
    // it exists on the classpath
} catch(ClassNotFoundException e) {
    // it does not exist on the classpath
}

但是我没有运气将它集成到Gradle构建过程中,而这正是我想要的地方,理想情况下是将自己的Gradle插件intp分离出来。

作为替代方案,我考虑过要进行参数化的单元测试,因为在单元测试中,它可以轻松访问类路径,我可以执行上述操作,但希望在Gradle构建过程中进行。

有什么建议吗?

最佳答案

我有一个类似的问题,我通过JavaExec任务解决了。总体思路是:在实用程序项目中编写Java代码,使用主要项目依赖项从gradle中运行它,并在classpath上编译类,从而获利。

就我而言,我正在检查软件包中是否包含Hibernate批注,然后生成架构到输出文件。我找到了maven的解决方案:http://blog.iprofs.nl/2013/01/29/hibernate4-schema-generation-ddl-from-annotated-entities/并对其进行了调整以满足我的需求。

在我的gradle构建中(作为示例):

task (generateSchema, dependsOn: 'classes', type: JavaExec){
    main = 'nl.iprofs.examples.util.SchemaGenerator'
    classpath = files('./hibernate-schema-generator-1.0.jar',configurations.compile, sourceSets.main.output.classesDir)
    args 'my.package.entities'
    args 'src/main/resources/'
    args 'TSQL'
}

build.dependsOn generateSchema

在您的情况下,您希望将xml名称作为参数传递。

关于java - Gradle:验证类列表在构建时的类路径中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23692585/

相关文章:

eclipse - 将自动生成的LibGDX gradle项目导入Eclipse时出现问题

java - 变量可能尚未初始化,不确定如何解决

java - 使用 Rest Services、Java 和 Angular JS 将存储在 Mysql 数据库中的图像显示为 Blob

java - 寻找增长函数和大 O

grails - groovy/grails,无法从 map 上删除

groovy - XmlSlurper: 获取原文件中groovy.util.slurpersupport.NodeChild的行号

android 找不到符号 com.google.android.gms.wallet 构建错误

java - Spring 在服务器上运行良好,但在主应用程序上运行不佳

groovy - 如何在 Groovy 中整齐地打印新行?

android - 任务 ':app:transformClassesWithJarMergingForDebug'的执行失败