代码之家  ›  专栏  ›  技术社区  ›  user447607

我想部署一个JAR及其对远程存储库的依赖关系

  •  1
  • user447607  · 技术社区  · 14 年前

    基本上,我有一个项目和一个持续的集成解决方案,我没有管理员访问权,无法从我们的网络中获取。因此,我想将项目的所有JAR部署到我们的中央Maven存储库中,CI解决方案可以到达该存储库。它们在我的本地回购中,但这是一个相当复杂的项目。难道我就不能设置一个标志或其他什么,部署一个jar,以及jar所依赖的本地repo中的其他内容吗?

    好吧,自从我第一次写这篇文章以来,我就有了自己的想法。这个怎么样:

    1. 把我的本地Maven repo移到一个新名字。
    2. 执行带有-u标志的构建,以便仅使用此项目所需的内容创建新的回购。
    3. 执行从新创建的本地回购到远程回购的合并。
    5 回复  |  直到 12 年前
        1
  •  1
  •   Julian Simpson    14 年前

    德博巴说的。我编写了一个(bash/ruby)脚本来运行maven依赖插件,然后使用依赖插件报告的gae属性运行deploy文件。假设我有几个以上的依赖。一些存储库管理器(例如nexus)擅长处理GAE信息。

        2
  •  1
  •   user447607    14 年前

    以下是我处理这个问题的方法:

    首先,我把本地的Mavenrepo复制到一个新名字。然后我运行了“mvn-u clean install”,确保生成的本地maven repo只包含这个特定构建所需的jar。接下来,我创建了这个脚本(为Windows用户详细解释):

    #!/bin/bash
    
    for I in `find ~/.m2 -name "*.jar"`
    do
            J=`echo $I | sed 's/jar$/pom/'`
            mvn deploy:deploy-file -DpomFile=$J -Dfile=$I -Durl=dav:http://maven.our.repo/maven2 -DrepositoryId=sharedRep
    done
    

    对于那些不读bash的人,它获取用户主目录的.m2子目录中所有jar文件的完整路径和文件名。这通常是用户本地回购的位置。然后它复制它,并在副本上将文件扩展名从“jar”更改为“pom”。然后我们执行下面的maven命令:

    mvn deploy:deploy-file -DpomFile=[pom file name here] -Dfile=[jar file name here] -Durl=dav:http://maven.our.repo/maven2 -DrepositoryId=sharedRep
    

    对于将本地repo中的库转换为共享repo,这似乎是可行的。

        3
  •  0
  •   dborba    14 年前

    退房 Maven Deploy Plugin 说明和用法。我认为部署文件mojo虽然旨在部署不是由maven构建的工件,但它可能会帮助您完成您想要的工作。

        4
  •  0
  •   Sean Patrick Floyd    14 年前

    在一篇博文中,我描述了一个类似的场景: Deploying a folder hierarchy to a Maven Repository . 它使用 GMaven (groovy嵌入maven中)。如果您从该示例中获取代码,则跳过目录遍历并遍历项目依赖项,那么您应该几乎就在那里。

        5
  •  0
  •   Community Reversed Engineer    7 年前

    使用Maven程序集插件构建一个具有依赖性的JAR,它将构建一个没有外部依赖性的单个可执行JAR。参见例如

    How can I create an executable JAR with dependencies using Maven?