我想嵌入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)。 –