将项目的依赖性添加到我的自定义Gradle插件中

时间:2019-05-09 15:29:01

标签: gradle gradle-plugin

大家好

我是Gradle世界的新手,我正在编写一个个人插件来执行对数据库的操作,例如: 创建数据库,删除数据库,创建表e向数据库中插入值,但是对于使用我的插件的项目,我的导入依赖存在问题,例如使用JDBC创建数据库的示例,我需要数据库驱动程序JDBC,该驱动程序已包含在项目主体中。

我的问题是:如何在gradle插件中获取数据库的依赖罐?

这是我的代码

package io.vincentpalazzo.gradledatabase.task;

import io.vincentpalazzo.gradledatabase.exstension.GradleDatabaseExstension;
import io.vincentpalazzo.gradledatabase.persistence.DataSurce;
import org.gradle.api.DefaultTask;
import org.gradle.api.artifacts.Configuration;
import org.gradle.api.tasks.TaskAction;

import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.Iterator;
import java.io.File;
import java.util.Set;

/**
 * @author https://github.com/vincenzopalazzo
 */
public class CreateDatabaseTask extends DefaultTask {

    @TaskAction
    public void createAction() {

        GradleDatabaseExstension project = getProject().getExtensions().findByType(GradleDatabaseExstension.class);

        String url = project.getUrl();
        String driverClass = project.getDriver(); //The drive name database is different
        String username = project.getUsername();
        String password = project.getPassword();
        String nameDatabase = project.getNameDatabase();
        String nameJar = project.getNameJar();

        if (findDependecyFileJarForDriver(nameJar)) {
            System.out.println("Jar findend");
        } else {
            System.out.println("Jar not found");
        }

        DataSurce dataSource = new DataSurce();
        if (dataSource.connectionDatabase(driverClass, url, username, password)) {
            if (dataSource.createDatabese(nameDatabase)) {
                System.out.println("Database " + nameDatabase + " created");
            }
        }
    }

    private boolean findDependecyFileJarForDriver(String nameJar) {
        if (nameJar == null || nameJar.isEmpty()) {
            throw new IllegalArgumentException("The input parameter is null");
        }

        Iterator<Configuration> iterable = getProject().getConfigurations().iterator();
        boolean finded = false;

        while ((!finded) || (iterable.hasNext())) {
            Configuration configuration = iterable.next();
            Set<File> filesSet = configuration.resolve();
            for (File file : filesSet) {
                String nameFile = file.getName();
                if (nameFile.contains(nameJar)) {
                    //Now?;
                    finded = true;
                }
            }
        }
        return finded;
    }
}

这是my project,这是Gradle论坛上my post的推荐人

对不起,我的英语不好,但是我正在学习

1 个答案:

答案 0 :(得分:0)

我想在这篇文章中添加答案。

我发现更好的解决方案是使用此plugin

我在代码中使用了插件,这是一个示例

public abstract class AbstractTaskGradleDatabase extends DefaultTask {

    protected JarHelper jarHelper;
    protected Optional<File> jar;

    protected void init(){

        jarHelper = new JarHelper(getProject());
        jar = jarHelper.fetch("nameDependence");
    }
}

在builld.gradle内

dependencies {
    implementation gradleApi()

    implementation 'com.lingocoder:jarexec.plugin:0.3'

}

ps:因为插件的版本是beta,所以可以随时更改答案