5

Maven またはすべての魔法を実行するライブラリーを Java アプリケーションに組み込みたいと考えています。

キーポイント:

  • それらは私が実行したい2つのタスクです:

    1/ ローカル リポジトリでの jar の
    公開 2/ プライベート エンタープライズ リポジトリ (Nexus) での jar の公開

  • 必要なすべての jar は、パブリック Maven リポジトリに配置する必要があります

  • jar は Maven のバージョンに依存しない必要があります (つまり、Maven 2 または 3 に固有のものではありません)。

可能な場合は、返信とともにスニペットを提供してください。

4

3 に答える 3

4

Maven クライアントは、通常の HTTP "POST" 操作を使用してコンテンツを Nexus にプッシュします。コンテンツを公開するだけであれば、依存関係をダウンロードして解決するためのすべてのロジックは必要ありません....

本格的な Maven リポジトリの相互運用性が必要だと判断した場合は、Groovy、Gradle、Scala などの他のプロジェクトが行ったこと、つまりApache Ivyを埋め込むことをエミュレートすることをお勧めします。

ivy を Java プロジェクトに追加する方法を説明している次の記事を見つけました (Single jar 依存関係):

http://developers-blog.org/blog/default/2010/11/08/Embed-Ivy-How-to-use-Ivy-with-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]")
}
于 2011-11-24T21:56:30.003 に答える
2

Maven 2 ライブラリを埋め込む例を次に示します。

プロジェクト ビルダーを検索する代わりに、ArtifactInstallerandArtifactDeployerを検索できます。目的のコードは、maven-install-pluginおよびで見つかりますmaven-deploy-plugin

この例の POST との違いは、適切なメタデータ、チェックサム、およびスナップショット変換が生成されることです。

Maven 3 ライブラリは組み込みが容易で、Maven 2 との互換性を維持している可能性がありますが、すぐに利用できる例はありません。

于 2011-11-29T06:38:03.140 に答える
1

私はあなたが望むものを試していませんが、MavenEmbedderプロジェクトを調べることから始めます。おそらく、Mavenの組み込みバージョン(および外部インストールを使用する機能)も付属しているm2eプロジェクトですら。

ローカルでの公開にはmaven-install-pluginの呼び出しが含まれる可能性が高く、リモートでの公開にはmaven-deploy-pluginの使用が含まれる可能性があります。

これがあなたを正しい方向に向けることを願っています。

于 2011-11-23T15:57:58.647 に答える