Проект maven как зависимость в проекте gradle
У меня есть проект, который использует Gradle как инструмент сборки и второй подпроект, который использует Maven POM. У меня нет возможности изменять инструмент построения в подпроекте.
То, что я хочу достичь, - это добавить мой проект с Maven POM в зависимости от моего проекта Gradle.
Где root (текущий dir) - мой проект с Gradle и содержит build.gradle
, проект Maven находится под vendor/other-proj/
с POM файлом только под этим каталогом.
Я пробовал эти варианты в файле build.gradle
:
Первая попытка:
include("vendor/other-proj/")
project(':other-proj') {
projectDir = new File("vendor/other-proj/pom.xml")
}
dependencies {
compile project(':other-proj')
}
Вторая попытка:
dependencies {
compile project('vendor/other-proj/')
}
Третья попытка:
dependencies {
compile project('vendor/other-proj/pom.xml')
}
4-я попытка:
dependencies {
compile files 'vendor/other-proj/pom.xml'
}
Я не могу найти что-либо, связанное с веб-сайтом, кажется, что большинство случаев использования wwb3//Maven подвержены влиянию публикации в Maven или создания POM, но я не хочу делать что-либо из них.
Может ли кто-нибудь указать мне в правильном направлении?
Ответы
Ответ 1
вы можете "подделать", включая проект 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
. Это просто взломать скомпилированные файлы классов в проекте Gradle.
Изменить:
Вы можете использовать подобный метод, чтобы также включить зависимости 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"
}
Ответ 2
Вы не можете "включить" проект maven в gradle settings.gradle. Самый простой способ - построить проект maven и установить его в локальное репо с помощью mvn install
(может быть по умолчанию .m2 или любого другого настраиваемого местоположения), а затем использовать его из вашего проекта gradle, используя groupname: modulename: version
repositories{
mavenlocal()
}
dependencies{
compile 'vendor:otherproj:version'
}
Можно напрямую зависеть от jar проекта maven, используя compile files
, но это не идеально, потому что он не будет получать транзитивные зависимости, и вам придется добавлять их вручную самостоятельно.