我想在我的 Java 应用程序中嵌入 Maven 或执行所有魔法的库。
关键点:
它们是我要执行的两项任务:
1/ 在本地存储库中
发布 jar 2/ 在私有企业存储库 (Nexus) 中发布 jar所有必需的 jar 必须位于公共 Maven 存储库中
jar 应该与 Maven 版本无关(即不特定于 Maven 2 或 3)
如果可以,请在您的回复中提供一个片段。
我想在我的 Java 应用程序中嵌入 Maven 或执行所有魔法的库。
关键点:
它们是我要执行的两项任务:
1/ 在本地存储库中
发布 jar 2/ 在私有企业存储库 (Nexus) 中发布 jar
所有必需的 jar 必须位于公共 Maven 存储库中
jar 应该与 Maven 版本无关(即不特定于 Maven 2 或 3)
如果可以,请在您的回复中提供一个片段。
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 记录的 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]")
}
这是一个嵌入 Maven 2 库的示例:
无需查找项目构建器,您可以查找ArtifactInstaller
和ArtifactDeployer
- 您会在 和 中找到您想要的maven-install-plugin
代码maven-deploy-plugin
。
本例中仅 POST 的不同之处在于它将生成适当的元数据、校验和和快照转换。
Maven 3 库可能更容易嵌入并且与 Maven 2 保持兼容,但是我没有任何现成的示例。
我没有尝试过你想要的,但我会从研究 Maven Embedder 项目开始。甚至可能还有 m2e 项目,它也带有 Maven 的嵌入式版本(以及使用外部安装的能力)。
本地发布可能涉及调用 maven-install-plugin,而远程发布可能涉及使用 maven-deploy-plugin。
希望这能为您指明正确的方向。