我们是否可以选择在Java程序中读取build.gradle文件的内容。我可以使用下面的代码在maven中执行类似的操作。现在,我将查看在gradle中执行相同操作的选项。我尝试使用Gradle-tooling-API,如下所述,但出现了一些错误(不确定我是否遵循了正确的方法)。
使用MavenXpp 3Reader阅读pom.xml
```FileReader fileReader;
try {
fileReader = new FileReader(destPath);
} catch (FileNotFoundException fileNotFoundException) {
fileNotFoundException.printStackTrace();
}
MavenXpp3Reader reader = new MavenXpp3Reader();
Model pomModel = reader.read(fileReader);
//close the file reader
fileReader.close();
```
尝试利用如下所示的gradle-tooling-API,但出现以下错误。
public class ToolingApiCustomModelPlugin implements Plugin<Project> {
private final ToolingModelBuilderRegistry registry;
@Inject
public ToolingApiCustomModelPlugin(ToolingModelBuilderRegistry registry) {
this.registry = registry;
}
@Override
public void apply(Project project) {
registry.register(new CustomToolingModelBuilder());
}
private static class CustomToolingModelBuilder implements ToolingModelBuilder {
@Override
public boolean canBuild(String modelName) {
return modelName.equals(CustomModel.class.getName());
}
@Override
public Object buildAll(String modelName, Project project) {
List<String> pluginClassNames = new ArrayList<String>();
for(Plugin plugin : project.getPlugins()) {
pluginClassNames.add(plugin.getClass().getName());
}
return new DefaultModel(pluginClassNames);
}
}
}
public static void main(String[] args) {
GradleConnector connector = GradleConnector.newConnector();
connector.forProjectDirectory(new File("./sample"));
ProjectConnection connection = null;
try {
connection = connector.connect();
ModelBuilder<CustomModel> customModelBuilder = connection.model(CustomModel.class);
//customModelBuilder.withArguments("--init-script", "init.gradle");
CustomModel model = customModelBuilder.get();
}
线程“main”org.gradle.tooling中出现异常。未知模型异常:此生成中没有类型为“CustomModel”的模型。
原因:org.gradle.tooling.provider.model.未知模型异常:没有构建器可用于构建类型为“org.gradle.sample.toolingapi. CustomModel”的模型。
1条答案
按热度按时间2sbarzqh1#
整个
build.gradle
文件在构建的initialization phase期间转换为project
对象:项目与“build.gradle”文件之间存在一对一的关系。在构建初始化期间,Gradle会为参与构建的每个项目汇编一个项目对象
因此,您可以在
build.gradle
文件转换后,在执行阶段通过访问编程project
对象模型,从build.gradle
访问任何配置(隐式或显式您可以在定制的gradle插件中或
build.gradle
中的简单gradle类型中执行此操作(看起来像递归;但这就是为什么要划分阅读文件和访问project
对象的阶段)。将以下任务粘贴到您的
build.gradle
中,并在命令行中执行(gradle诊断),以输出build.gradle
文件中存在的所有plugins
、configurations
和tasks
的名称:这些链接将帮助您查看如何导航到gradle
project
对象中的不同属性:对于由其他插件公开的属性和方法,你必须先访问插件,然后参考它们各自的文档,最后插件可以直接注册extensions到项目对象中,这样你就可以直接访问
project
的属性。