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

sam*_*son 96 java build-process maven-2

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

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

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

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

Ric*_*afe 187

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

<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>
Run Code Online (Sandbox Code Playgroud)

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

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

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

  • 这应该是公认的答案,因为它是自包含的(在pom.xml中) (14认同)
  • 凉.有没有办法指定URL而不是本地机器路径? (4认同)
  • 感谢您提供完整而有效的示例!我希望你能抓到一条金鱼,它会给你三个愿望.:) (3认同)
  • 嗨Rajarshee,组和神器ID是完全随意的.文件系统中jar的路径是最重要的.因为实际上jar不是maven依赖,所以你只是告诉Maven将它视为一个. (2认同)

Ric*_*ler 53

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

您可以使用maven-install-plugin 的安装文件目标将文件安装到本地存储库.如果您为每个文件创建一个带有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
Run Code Online (Sandbox Code Playgroud)

要不就

mvn install:install-file -Dfile=ojdbc14.jar -DgroupId=com.oracle -DartifactId=ojdbc14 -Dversion=10.2.0 -Dpackaging=jar
Run Code Online (Sandbox Code Playgroud)

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

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

  • 对我有用的命令:"mvn install:install-file -Dfile = cassandra-jdbc-1.1.1.jar -DgroupId = org.apache-extras.cassandra-jdbc -DartifactId = cassandra-jdbc -Dversion = 1.1.1 -Dpackaging =罐子" (4认同)

mos*_*tar 23

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

${project.basedir}/src/main/resources/repo
Run Code Online (Sandbox Code Playgroud)

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

mvn install:install-file -Dfile=[FILE_PATH] \
-DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] \ 
-Dpackaging=jar -DlocalRepositoryPath=[REPO_DIR]
Run Code Online (Sandbox Code Playgroud)

最后,将以下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>
Run Code Online (Sandbox Code Playgroud)


Gre*_*zky 8

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

  • 术语上的一点,那些是内部远程存储库,而不是本地存储库.本地存储库是本地文件系统依赖项下载到的存储库. (4认同)