2011-11-23 114 views
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]") 
} 
相關問題