Java Gradle:验证类列表是否在生成时的类路径中

Java Gradle:验证类列表是否在生成时的类路径中,java,groovy,gradle,classpath,Java,Groovy,Gradle,Classpath,我有一个包含几十个XML文件的多项目构建,我的问题是您在某些XML文件中指定了完整的类名(例如,com.myproject.CheckItem),但在构建过程中,任何时候都没有检查以验证键入的内容是否正确。只有转到使用XML的应用程序区域,才能查看键入的内容是否正确 我想做的是,在gradle构建过程中的某个时刻,验证这些XML文件中定义的类名是我的一个类,还是作为编译依赖项添加到两个lib文件夹中的一个jar中 我现在的位置是我有一个映射,其中所有键都是类名,值是包含键的文件列表 所以,看起来

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

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

我现在的位置是我有一个
映射
,其中所有键都是类名,值是包含键的文件列表

所以,看起来是这样的:

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
}
我整晚都在找最好的方法,最简单的方法就是这样做:

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中使用主要项目依赖项和类路径上编译的类运行它,然后运行

在我的例子中,我检查了Hibernate注释的包,然后将模式生成到输出文件。我为maven找到了一个解决方案:并根据我的需要对其进行了调整

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


在您的例子中,您希望将xml名称作为参数传递。

我最终将我的Gradle项目结构化为一个多项目Gradle构建,并最终创建了一个
构建测试
项目,该项目具有所有必需的子项目和全局依赖项作为编译依赖项

然后我创建了进行类路径检查的参数化junit测试,这样我可以:

  • 选择跳过测试
  • 查看详细的html报告,说明什么是不正确的,而不是检查生成日志
  • 这比像恩莱特建议的那样简单