Подтвердить что ты не робот

Проект 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, но я не хочу делать что-либо из них.

Может ли кто-нибудь указать мне в правильном направлении?

4b9b3361

Ответ 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, но это не идеально, потому что он не будет получать транзитивные зависимости, и вам придется добавлять их вручную самостоятельно.