4

我想嵌入Maven或者将所有魔力融入Java应用程序的库。如何将Maven 2嵌入到我的应用程序中?

的关键点:

  • 他们是两个任务,我想执行:

    1 /发布在本地仓库罐子
    2 /在一家民营企业资源库中发布的jar(的Nexus)

  • 所需的所有JAR必须位于公共Maven仓库

  • 个这些罐子应该是Maven的版本无关的(即不具体到Maven 2或3)

如果可以的话,请提供您的响应片段。

+0

已经回答[here](http://stackoverflow.com/questions/1487802)。 –

回答

2

下面是一个例子嵌入的Maven 2库:

而不是寻找了项目建设者,你可以看一下ArtifactInstallerArtifactDeployer - 您可以在maven-install-pluginmaven-deploy-plugin中找到想要的代码。

这个例子中的差异只是它会产生适当的元数据,校验和和快照转换。

Maven 3库可能更容易嵌入并且与Maven 2保持兼容,但是我没有任何可用的示例。

+0

Tks for reply,我会看看你在这个答案中指出的代码,我也会检查MavenEmbedder。 – Stephan

1

我还没有尝试过你想要的,但我会先看看Maven Embedder项目。可能甚至包含Maven嵌入式版本的m2e项目(以及使用外部安装的能力)。

本地发布可能需要调用maven-install-plugin,远程发布可能涉及使用maven-deploy-plugin。

希望这点能指引您朝着正确的方向发展。

4

Maven客户端使用普通的HTTP“POST”操作将内容推送到Nexus。如果你想要做的只是发布内容,那么你不需要所有的逻辑来下载和解决依赖关系......

如果你决定你需要成熟的Maven存储库互操作性,那么我会建议模拟什么像Groovy,Gradle和Scala等其他项目已经完成,这是嵌入Apache Ivy

我发现下面的文章描述了如何添加常春藤到您的Java项目(一个JAR依赖):

http://developers-blog.org/blog/default/2010/11/08/Embed-Ivy-How-to-use-Ivy-with-Java

Groovy的例子

你的问题是具体怎么添加对发布内容的支持。

以下代码使用ivy发布到Nexus存储库。 Groovy使您能够使用Ivy's documented ANT tasks

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]") 
} 
相关问题