Как я могу встроить Maven в свое приложение? - PullRequest
4 голосов
/ 23 ноября 2011

Я хотел бы встроить Maven или библиотеку, которая делает все волшебство, в мое Java-приложение.

Ключевые точки:

  • Это две задачи, которые я хочувыполнить:

    1 / Опубликовать банку в локальном хранилище
    2 / Опубликовать банку в хранилище частного предприятия (Nexus)

  • Все необходимые банки ДОЛЖНЫ бытьнаходится в общедоступном репозитории Maven

  • Банки ДОЛЖНЫ быть независимыми от Maven версии (т.е. не относятся к Maven 2 или 3)

Если вы можетеПожалуйста, предоставьте фрагмент с вашим ответом.

Ответы [ 3 ]

4 голосов
/ 25 ноября 2011

Клиенты Maven отправляют контент в Nexus с помощью обычной операции HTTP «POST». Если все, что вы хотите сделать, это опубликовать контент, то вам не нужна вся логика для загрузки и разрешения зависимостей ....

Если вы решите, что вам нужна полноценная совместимость с репозиторием Maven, я бы посоветовал имитировать то, что сделали другие проекты, такие как Groovy, Gradle и Scala, что должно включать Apache Ivy .

Я нашел следующую статью, описывающую, как добавить плющ в ваш проект Java (зависимость от одного jar):

http://developers -blog.org / блог / по умолчанию / 2010/11 / 08 / Вставить-Ivy-Как в использовании-Ivy-с Java

Groovy Пример

Ваш вопрос, в частности, как добавить поддержку публикации контента.

В следующем коде ivy используется для публикации в репозитории Nexus. Groovy позволяет использовать задокументированные задачи Ivy ANT .

import groovy.xml.NamespaceBuilder
import groovy.xml.MarkupBuilder

// Methods
// =======
def generateIvyFile(String fileName) {
    def file = new File(fileName)

    file.withWriter { writer ->
        xml = new MarkupBuilder(writer)

        xml."ivy-module"(version:"2.0") {
            info(organisation:"org.dummy", module:"dummy")
            publications() {
                artifact(name:"dummy", type:"pom")
                artifact(name:"dummy", type:"jar")
            }
        }
    }

    return file
}

def generateSettingsFile(String fileName) {
    def file = new File(fileName)

    file.withWriter { writer ->
        xml = new MarkupBuilder(writer)

        xml.ivysettings() {
            settings(defaultResolver:"central")
            credentials(host:"myrepo.com" ,realm:"Sonatype Nexus Repository Manager", username:"deployment", passwd:"deployment123")
            resolvers() {
                ibiblio(name:"central", m2compatible:true)
                ibiblio(name:"myrepo", root:"http://myrepo.com/nexus", m2compatible:true)
            }
        }
    }

    return file
}

// Main program
// ============
def ant = new AntBuilder()
def ivy = NamespaceBuilder.newInstance(ant, 'antlib:org.apache.ivy.ant')

generateSettingsFile("ivysettings.xml").deleteOnExit()
generateIvyFile("ivy.xml").deleteOnExit()

ivy.resolve()
ivy.publish(resolver:"myrepo", pubrevision:"1.0", publishivy:false) {
    artifacts(pattern:"build/poms/[artifact].[ext]")
    artifacts(pattern:"build/jars/[artifact].[ext]")
}
2 голосов
/ 29 ноября 2011

Вот пример встраивания библиотек Maven 2:

Вместо того, чтобы искать компоновщик проекта, вы можете найти ArtifactInstaller и ArtifactDeployer - вы найдете нужный код в maven-install-plugin и maven-deploy-plugin.

Различие только в POSTing в этом примере заключается в том, что он будет генерировать соответствующие метаданные, контрольные суммы и преобразования моментальных снимков.

Библиотеки Maven 3 легче внедрить и поддерживать совместимость с Maven 2, однако у меня нет никакихпримеры легко доступны.

1 голос
/ 23 ноября 2011

Я не пробовал то, что вы хотите, но я бы начал с изучения проекта Maven Embedder.Возможно, даже проект m2e, который также поставляется со встроенной версией Maven (и возможностью использовать внешние установки).

Локальная публикация, скорее всего, будет включать вызов maven-install-plugin, а удаленная публикация, вероятно, будет включатьиспользуя maven-deploy-plugin.

Надеюсь, что это направит вас в правильном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...