当前位置: 首页 > 知识库问答 >
问题:

基于liquibase分级多项目建筑

詹斌蔚
2023-03-14
    +  Parent_Project_Folder
    |  - build.gradle
    |  + Sub-Project_Folder_1
    |  |  - build.gradle
    |  |  + src
    |  |  |  + main
    |  |  |  |  + resources
    |  |  |  |  |  + com
    |  |  |  |  |  |  + parentProject
    |  |  |  |  |  |  |  + subProject1
    |  |  |  |  |  |  |  |  + changelog.groovy
    |  + Sub-Project_Folder_2
    |  |  - build.gradle
    |  |  + src
    |  |  |  + main
    |  |  |  |  + resources
    |  |  |  |  |  + com
    |  |  |  |  |  |  + parentProject
    |  |  |  |  |  |  |  + subProject2
    |  |  |  |  |  |  |  |  + changelog.groovy
def createDatabase (databaseServerUrl, dbUsername, dbPassword, projectControlDBName, changeLogFilePath) {
    def mysql = buildscript.configurations.classpath.find { it.toString().contains("mysql-connector-java") }
    URLClassLoader loader = GroovyObject.class.classLoader
    loader.addURL(file(mysql).toURL())

    println("createDatabase CurrentPath " + System.getProperty("user.dir"))

    def db = [url : "jdbc:mysql://localhost:3306/",
              user: dbUsername, password: dbPassword, driver: 'com.mysql.jdbc.Driver']
    def sql = groovy.sql.Sql.newInstance(db.url, db.user, db.password, db.driver)

    def row = sql.firstRow('SELECT SCHEMA_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = \'' + projectControlDBName + '\'')

    if (row == null) {
        sql.execute("CREATE DATABASE " + projectControlDBName)
        println("Database Created: " + projectControlDBName)
    } else {
        println("Database \'" + projectControlDBName + "\' already exists")
    }

    Connection connection = DriverManager.getConnection(databaseServerUrl +
            projectControlDBName + '?nullNamePatternMatchesAll=true&useSSL=false' +
            "&user=" + dbUsername +
            "&password=" + dbPassword)
    Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(connection))

    Liquibase liquibase = new Liquibase(changeLogFilePath, new FileSystemResourceAccessor(), database)

    liquibase.update(new Contexts(), new LabelExpression())

    database.close()

    println("Database schema created: \'" + minervaControlDBName + "\'")
}


task createAllProjectDatabases {
    doLast{
        def projectControlDBName = "dbName"
        def mySqlUsername = "username"
        def mySqlPassword = "password"
        def changeLogFilePath = 'src/main/resources/com/parentProject/subProject1/changelog.groovy'
        def databaseServerUrl = 'jdbc:mysql://localhost/'

        createDatabase(databaseServerUrl, mySqlUsername, mySqlPassword, projectControlDBName, changeLogFilePath)
    }
}
package com.parentProject.subProject1

databaseChangeLog {
    changeSet(id: '1234', author: 'name') {
        sqlFile(path: 'src/main/resources/com/parentProj/subProject1/common-schema.mysql.sql')
        sqlFile(path: 'src/main/resources/com/parentProj/subProject1/control-schema.mysql.sql')
        rollback {
            sqlFile(path: 'src/main/resources/com/parentProj/subProject1/control-schema-rollback.mysql.sql')
        }
    }
}

共有1个答案

岳彬炳
2023-03-14

最后是我自己解决的。

我无法使任务的继承按需要工作。所以我在主'build.gradle'文件中为子项目写了几个任务。这些任务将执行子项目所需的特定生成。

有一个主要的任务,我已经写了构建整个项目。

 类似资料:
  • 我有以下项目结构 上述项目结构的思想是:多个项目包含多个子项目,每个项目都可以依赖于其他项目。此外,项目中的子项目可能与同一项目中的其他子项目有依赖关系。项目将在根中的settings.gradle中指定。同时,每个项目中的gradle会说出该特定项目的子项目是什么。 我的设置.根部的Gradle看起来像 和Project1设置。Gradle将看起来像 其他依赖关系顺序是在相应的build.gra

  • 我正在尝试使用Gradle multi-project build使用共享包来设置Micronaut()项目,这样我就可以将公共逻辑放在一个地方。 我在为库创建属性文件时遇到了这个问题。我在中放置了一些特定于库的属性,但看起来它们没有被推进到应用程序层: 完整的示例可在GitHub上获得。

  • 我有一个多项目分级建筑在当地工作。有一个父级文件build.gradle设置。gradle文件将项目分配给它们各自的分级生成文件: 错误仍然相同,build.gradle文件(父文件)无法识别依赖项任务查看调试语句,找到并识别子生成分级文件:使用生成文件'/var/../LoadRemote/RemoteLoad_build.gradle'计算项目':LoadRemote'。对加载构建文件显示相同

  • 分级任务 null 在https://help.gradle.org获得更多帮助

  • 我是一个Eclipse/STS用户/开发人员,现在正在尝试使用IntelliJ Idea(CE) 2020.2.(1,2,3) 对于一个基于Gradle的项目,如何进行Spring集成,当我打开IDE时,会发生以下情况 从上面来看,这就是问题所在,我不希望IDE自动启动来构建/重建项目。我只是需要,打开项目,仅此而已。 观察:例如,在Eclipse/STS中存在自动禁用构建的选项 我确实在网上做了

  • 在根中应用Quarkus插件的多模块gradle项目在步骤失败,出现: 根如下所示: 但是,将行移动到子项目的中,生成将成功。看来quarkus构建步骤是在插件声明的地方运行的,而不是在插件实际应用的地方。 理想情况下,我希望在根项目中声明一次插件,然后仅将其应用于子项目,而不是在根项目中执行它,在根项目中显然没有什么可构建的。 有什么想法吗?