我有一个包含数十个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/