我想嵌入Maven或者將所有魔力融入Java應用程序的庫。如何將Maven 2嵌入到我的應用程序中?
的關鍵點:
他們是兩個任務,我想執行:
1 /發佈在本地倉庫罐子
2 /在一家民營企業資源庫中發佈的jar(的Nexus)所需的所有JAR必須位於公共Maven倉庫
個這些罐子應該是Maven的版本無關的(即不具體到Maven 2或3)
如果可以的話,請提供您的響應片段。
我想嵌入Maven或者將所有魔力融入Java應用程序的庫。如何將Maven 2嵌入到我的應用程序中?
的關鍵點:
他們是兩個任務,我想執行:
1 /發佈在本地倉庫罐子
2 /在一家民營企業資源庫中發佈的jar(的Nexus)
所需的所有JAR必須位於公共Maven倉庫
個這些罐子應該是Maven的版本無關的(即不具體到Maven 2或3)
如果可以的話,請提供您的響應片段。
下面是一個例子嵌入的Maven 2庫:
而不是尋找了項目建設者,你可以看一下ArtifactInstaller
和ArtifactDeployer
- 您可以在maven-install-plugin
和maven-deploy-plugin
中找到想要的代碼。
這個例子中的差異只是它會產生適當的元數據,校驗和和快照轉換。
Maven 3庫可能更容易嵌入並且與Maven 2保持兼容,但是我沒有任何可用的示例。
Tks for reply,我會看看你在這個答案中指出的代碼,我也會檢查MavenEmbedder。 – Stephan
我還沒有嘗試過你想要的,但我會先看看Maven Embedder項目。可能甚至包含Maven嵌入式版本的m2e項目(以及使用外部安裝的能力)。
本地發佈可能需要調用maven-install-plugin,遠程發佈可能涉及使用maven-deploy-plugin。
希望這點能指引您朝着正確的方向發展。
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
你的問題是具體怎麼添加對發佈內容的支持。
以下代碼使用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]")
}
已經回答[here](http://stackoverflow.com/questions/1487802)。 –