Maven项目作为Gradle项目中的依赖项

plupiseo  于 2022-11-30  发布在  Maven
关注(0)|答案(2)|浏览(209)

我有一个使用Gradle作为构建工具的项目,还有一个使用Maven的POM的子项目。我没有更改子项目上的构建工具的自由。
我想要实现的是将我的项目与Maven POM添加为Gradle项目的依赖项。
其中根目录(当前目录)是我的Gradle项目,包含build.gradle,Maven项目位于vendor/other-proj/下,POM文件就在该目录下。
我已经在我的build.gradle文件上尝试了这些变化:
第1次尝试:

include("vendor/other-proj/")
project(':other-proj') {
    projectDir = new File("vendor/other-proj/pom.xml")
}

dependencies {
    compile project(':other-proj')
}

第2次尝试:

dependencies {
    compile project('vendor/other-proj/')
}

第三次尝试:

dependencies {
    compile project('vendor/other-proj/pom.xml')
}

第4次尝试:

dependencies {
    compile files 'vendor/other-proj/pom.xml'
}

我在网上找不到任何相关的东西,似乎大多数Gradle/Maven用例都受到发布到Maven或生成POM的影响,但我不想做任何这些事情。
谁能给我指个方向?

f2uvfpb9

f2uvfpb91#

您可以像下面这样“伪造”包含一个Maven项目:

dependencies {
    compile files("vendor/other-proj/target/classes") {
        builtBy "compileMavenProject"
    }
}

task compileMavenProject(type: Exec) {
    workingDir "vendor/other-proj/"
    commandLine "/usr/bin/mvn", "clean", "compile"
}

通过这种方式,Gradle将在编译前执行Maven构建(compileMavenProject)。但请注意,它不是传统意义上的Gradle“项目”,不会显示出来,例如,如果您运行gradle dependencies
编辑:您可以使用类似的技术来包含maven依赖项:

dependencies {
    compile files("vendor/other-proj/target/classes") {
        builtBy "compileMavenProject"
    }
    compile files("vendor/other-proj/target/libs") {
        builtBy "downloadMavenDependencies"
    }
}

task compileMavenProject(type: Exec) {
    workingDir "vendor/other-proj/"
    commandLine "/usr/bin/mvn", "clean", "compile"
}

task downloadMavenDependencies(type: Exec) {
    workingDir "vendor/other-proj/"
    commandLine "/usr/bin/mvn", "dependency:copy-dependencies", "-DoutputDirectory=target/libs"
}
7ajki6be

7ajki6be2#

您不能在gradle settings.gradle中“包含”Maven项目。最简单的方法是构建Maven项目,并使用mvn install(可以是默认的.m2位置,也可以是任何其他自定义位置)将其安装到本地存储库,然后使用groupname:modulename:version从gradle项目中使用它

repositories{
    mavenLocal()
}

dependencies{
    implementation 'vendor:otherproj:version'
}

可以使用compile files直接依赖于maven项目的jar,但这并不理想,因为它不会获取可传递的依赖项,您必须自己手动添加这些依赖项。

相关问题