如何用gradle包装maven或任何其他构建系统,以使依赖项工作

如何用gradle包装maven或任何其他构建系统,以使依赖项工作,maven,gradle,build,Maven,Gradle,Build,我需要用gradle包装一个maven构建。 坏主意,对,明白了,明白了。然而,我已经有大量使用gradle的代码库,还有一些仍然使用maven。 我有一套gradle工具,可以完成我所有的分支、部署和很多很酷的事情。我也想在我的maven项目中利用这一点 我的顶级任务是“deb”,因为我正在构建debian包。我的样板基础设施任务依赖于“deb”,因此,无论每个项目如何实现它,它都可以工作,无论底层构建基础设施、maven、make、ant等等。每个项目只需要定义一个“deb”任务,并使其依赖

我需要用gradle包装一个maven构建。 坏主意,对,明白了,明白了。然而,我已经有大量使用gradle的代码库,还有一些仍然使用maven。 我有一套gradle工具,可以完成我所有的分支、部署和很多很酷的事情。我也想在我的maven项目中利用这一点

我的顶级任务是“deb”,因为我正在构建debian包。我的样板基础设施任务依赖于“deb”,因此,无论每个项目如何实现它,它都可以工作,无论底层构建基础设施、maven、make、ant等等。每个项目只需要定义一个“deb”任务,并使其依赖于构建输出debian包所需的任何东西。这样,infrastructure gradle脚本就不关心具体的项目实现


我的主要问题是,如何在gradle中生成依赖项,以避免不必要的构建。

以下是我最终完成的gradle任务

其要点是,我需要提出一些规则来计算项目构建系统生成的输入和输出文件。在本例中,它很简单,因为java依赖于*.java、*.xml和**/pom.xml,仅此而已。 我的输出都是debian软件包,所以需要一个*.deb filespec。 setNewVersion任务允许我将基本版本字符串保存在gradle.properties中。我使用gmaven插件将其读入maven新版本字符串。(见附件)


以下是我最后完成的gradle任务

其要点是,我需要提出一些规则来计算项目构建系统生成的输入和输出文件。在本例中,它很简单,因为java依赖于*.java、*.xml和**/pom.xml,仅此而已。 我的输出都是debian软件包,所以需要一个*.deb filespec。 setNewVersion任务允许我将基本版本字符串保存在gradle.properties中。我使用gmaven插件将其读入maven新版本字符串。(见附件)


-DskipTests之所以存在,是因为对于这个特定的项目,它们在gradle下运行时失败。这是一个我仍然需要解决的问题,但并不能阻止它按原样使用,-DskipTests存在,因为对于这个特定的项目,它们在gradle下运行时失败。这是一个我仍然需要解决的问题,但并不妨碍它的可用性。
def env = System.getenv()    // get env to pass in to child build
def sourceBaseDir = "source" // Source dir for the wrapped project

// Set the maven newVersion using gradle.properties.
task setNewVersion(type:Exec) {
    group = "build"
    description = "(nim) Copy newVersion string into maven variable"
    commandLine "bash", "-c", "sed -e \"s/version/newVersion/\" gradle.properties > source/build.properties"
}

// Build the maven targets
task mvnBuild(type:Exec, dependsOn: setNewVersion) {
    group = "build"
    description = "(nim) Build store with maven - TODO: uses -DskipTests because mvn build from gradle fails with junit running."
    environment = System.getenv()
    workingDir = sourceBaseDir
    inputs.files fileTree(sourceBaseDir) {
         include '**/src/**/*.java', '**/src/**/*.xml', '**/pom.xml'
    }
    outputs.files fileTree(sourceBaseDir) {
        include '**/target/*.deb'
    }
    println "inputs=${inputs.getFiles() .getFiles()}"
    println "outputs=${outputs.getFiles().getFiles()}"
    commandLine "mvn", "-DskipTests", "package"
}

// Maven clean target
task mvnClean(type:Exec) {
    group = "build"
    description = "(nim) Clean store with maven, depends on local and remote repe cleanup as well"
    workingDir = sourceBaseDir
    commandLine "mvn", "clean"
}

task deb(dependsOn: "mvnBuild")