首页 文章

Maven:如何将reps中没有的jar包含到J2EE项目中?

提问于
浏览
95

在我的J2EE项目中,我有几个依赖项,这些依赖项在任何Maven存储库中都不可用,因为它们是专有库 . 这些库需要在运行时可用,因此必须复制到目标/.../ WEB-INF / lib ...

现在,我将它们列为我的POM中的系统依赖项,但是使用此方法的问题是,在编译期间没有将其复制到目标构建 . 这种方法也不是很优雅 .

那么将它们集成到Maven中的最佳方法是什么?

注意:我不想创建自己的Maven存储库 .

11 回答

  • 1

    正如您所说,您不想设置自己的存储库,也许这会有所帮助 .

    您可以使用maven-install-plugin的install-file goal将文件安装到本地存储库 . 如果您为每个文件创建一个带有Maven调用的脚本并将其与jar放在一起,那么您(以及其他任何有访问权限的人)可以轻松地将jar(和相关的pom文件)安装到其本地存储库中 .

    例如:

    mvn install:install-file -Dfile=/usr/jars/foo.jar -DpomFile=/usr/jars/foo.pom
    mvn install:install-file -Dfile=/usr/jars/bar.jar -DpomFile=/usr/jars/bar.pom
    

    要不就

    mvn install:install-file -Dfile=ojdbc14.jar -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0 -Dpackaging=jar
    

    然后,您可以在项目中正常引用依赖项 .

    不过你最好还是 Build 一个内部远程存储库,我建议自己使用Nexus . 如果需要,它可以在您的开发盒上运行,并且开销很小 .

  • 1

    对于想要快速解决此问题的人:

    <dependency>
      <groupId>LIB_NAME</groupId>
      <artifactId>LIB_NAME</artifactId>
      <version>1.0.0</version>
      <scope>system</scope>
      <systemPath>${basedir}/WebContent/WEB-INF/lib/YOUR_LIB.jar</systemPath>
    </dependency>
    

    只需为您的库提供唯一的groupID和工件名称,并指向它在文件系统中的位置 . 你已准备好出发 .

    当然,这是一个脏的快速修复程序,只能在您的计算机上运行,如果您不更改libs的路径 . 但有时候,这就是你想要的,跑步和做一些测试 .

    编辑:重新解决问题并意识到用户已经在使用我的解决方案作为临时修复 . 我会把答案作为对这个问题的其他人的快速帮助 . 如果有人不同意这一点,请给我留言 . :)

  • 2

    在项目下创建一个存储库文件夹 . 让我们来

    ${project.basedir}/src/main/resources/repo
    

    然后,将自定义jar安装到此repo:

    mvn install:install-file -Dfile=[FILE_PATH] \
    -DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] \ 
    -Dpackaging=jar -DlocalRepositoryPath=[REPO_DIR]
    

    最后,将以下repo和依赖项定义添加到项目pom.xml中:

    <repositories>
        <repository>
            <id>project-repo</id>
            <url>file://${project.basedir}/src/main/resources/repo</url>
        </repository>
    </repositories>
    
    <dependencies>    
        <dependency>
            <groupId>[GROUP]</groupId>
            <artifactId>[ARTIFACT]</artifactId>
            <version>[VERS]</version>
        </dependency>
    </dependencies>
    
  • 0

    您需要设置一个托管此类库的本地存储库 . 有许多项目正是如此 . 例如Artifactory .

  • 23

    如果您使用Jenkins构建,这些解决方案都不起作用!!当pom在Jenkins构建服务器中运行时......这些解决方案将失败,因为Jenkins运行pom将尝试从企业存储库下载这些文件 .

    复制src / main / resources / lib下的jar(创建lib文件夹) . 这些将成为您项目的一部分,并一直到部署服务器 . 在部署服务器中,确保您的启动脚本在类路径中包含src / main / resources / lib / * . 中提琴 .

  • 1

    您可以将它们安装在私有的本地存储库中(例如,主目录下的.m2 / repository):more details here

  • 8

    如果我理解得很好,如果您想要做的是在编译阶段导出依赖项,这样就不需要手动检索每个需要的库,您可以使用mojo copy-dependencies .

    希望它对你的情况有用(examples

  • 3

    继续使用它们作为系统依赖项,并使用Maven依赖插件将它们复制到目标/.../ WEB-INF / lib ...:

    http://maven.apache.org/plugins/maven-dependency-plugin/examples/copying-artifacts.html

  • 52

    单独安装对我不起作用 .

    mvn deploy:deploy-file -Durl=file:///home/me/project/lib/ \
      -Dfile=target/jzmq-2.1.3-SNAPSHOT.jar -DgroupId=org.zeromq \  
      -DartifactId=zeromq -Dpackaging=jar -Dversion=2.1.3
    
  • 2

    @Ric Jafe的解决方案对我有用 .

    这正是我所寻找的 . 一种推动研究测试代码的方法 . 没有什么花哨 . 是的我知道这就是他们所说的:)各种maven插件解决方案似乎对我的目的来说太过分了 . 我有一些 jar 作为带有pom文件的第三方库提供给我 . 我希望它能够快速编译/运行 . 这个我很容易适应python的解决方案为我创造了奇迹 . 剪切并粘贴到我的pom中 . 此任务的Python / Perl代码在此问答中:Can I add jars to maven 2 build classpath without installing them?

    def AddJars(jarList):
      s1 = ''
      for elem in jarList:
       s1+= """
         <dependency>
            <groupId>local.dummy</groupId>
            <artifactId>%s</artifactId>
            <version>0.0.1</version>
            <scope>system</scope>
            <systemPath>${project.basedir}/manual_jars/%s</systemPath>
         </dependency>\n"""%(elem, elem)
      return s1
    
  • 186

    您可以尝试使用maven-external-dependency-plugin,它显示了将外部jar添加到任何Maven项目的好方法 .

    https://code.google.com/p/maven-external-dependency-plugin/

相关问题