如何在Maven项目中包含本地jar文件

com*_*tta 25 java maven-2 netbeans jar

我不想在Maven存储库(本地/远程)中安装几个jar.特别是我有几个jar文件

c:\work\projects\myapp\src\main\webapp\WEB-INF\lib\test.jar

c:\work\projects\myapp\src\main\webapp\WEB-INF\lib\test2.jar
Run Code Online (Sandbox Code Playgroud)

使用NetBeans打开/编辑时如何将它们包含到我的项目中?

E L*_*yle 46

虽然它可以使用systemPath引用,但最好创建一个本地存储库.幸运的是,这很容易做到.

创建一个本地存储库,其中包含公共存储库中不可用的jar

注意:我使用Eclipse,因此一些指令特定于Eclipse.大多数都很容易推广.


假设

  • 这个罐子是由Maven在另一个项目中创建的,具有以下内容......

    <groupId>com.foo</groupId>
    <artifactId>test</artifactId>
    <version>0.1.1</version>
    <packaging>jar</packaging>
    
    Run Code Online (Sandbox Code Playgroud)

在项目中(想要访问罐子)

  • 在项目基目录下创建repo目录
  • 对于每个本地访问的jar ...
    • 为groupID的每个级别添加目录(例如/ repo / com/foo)
    • 在没有版本的情况下添加jar名称(aka artifactId)(例如/ repo/com/foo / test)
    • 添加jar版本的目录(例如/ repo/com/foo/test /0.1.1)
    • 将jar放在该目录中(例如/repo/com/foo/test/0.1.1 /test-0.1.1.jar)

在pom.xml中(对于想要访问jar的项目)

  • 定义本地存储库

    <repositories>
      <repository>
        <id>data-local</id>
        <name>data</name>
        <url>file://${project.basedir}/repo</url>
      </repository>
    </repositories>
    
    Run Code Online (Sandbox Code Playgroud)
  • 添加对本地jar的依赖.从我们上面的例子来看,这将是......

    <dependency>
      <groupId>com.foo</groupId>
      <artifactId>test</artifactId>
      <version>0.1.1</version>
    </dependency>
    
    Run Code Online (Sandbox Code Playgroud)

重建

  • Rt单击pom.xml - >运行为 - > Maven构建

  • 嗯,对于 Maven 3,还有一些事情需要完成,比如重命名 jar 以包含版本号,并向每个目录添加一个 pom 文件。幸运的是,有人已经在这里写过关于它的文章 https://gist.github.com/timmolderez/92bea7cc90201cd3273a07cf21d119eb (2认同)

The*_*ist 22

您是否考虑过将这两个JAR添加为system依赖项?例如,

<project>
  ...
  <dependencies>
    <dependency>
      <groupId>sun.jdk</groupId>
      <artifactId>tools</artifactId>
      <version>1.5.0</version>
      <scope>system</scope>
      <systemPath>${java.home}/../lib/tools.jar</systemPath>
    </dependency>
  </dependencies>
  ...
</project>
Run Code Online (Sandbox Code Playgroud)

请注意,这是不推荐的,如果有的话,应该非常谨慎地使用.

  • 这实际上是一种非常邪恶的**实践[气馁](http://docs.codehaus.org/display/MAVENUSER/Dependency+Scopes).每当有人使用它时,上帝杀死了一个Maven开发者. (5认同)
  • 我不同意您不推荐这种做法的热情。在源代码控制的构建,无法访问本地Maven存储库和团队项目的情况下,这是提供公共存储库中不存在的依赖项的唯一明智的解决方案... (2认同)

Ste*_*n C 13

在过去,我通过在项目本身中创建"本地"存储库目录树来完成此操作,并通过声明具有项目相对路径的本地存储库在POM中引用它.

但这是一个黑客.(也许不是那么hacky - 根据@Pascal的评论.尽管使用了一年左右,我仍然是一个Maven新手.)

  • 这是一个muuuuuuuuuuuuuuuuuuch更好*解决方案*比邪恶的系统范围**黑客**.人们继续使用系统范围(并推荐它)而不了解它是如何伤害的...这令人沮丧. (2认同)

Eri*_*ric 7

没有其他答案对我有用.我不得不运行一个稍微不同的命令......

mvn deploy:deploy-file -Durl=file:///path/to/yourproject/repo/ -Dfile=mylib-1.0.jar -DgroupId=com.example -DartifactId=mylib -Dpackaging=jar -Dversion=1.0
Run Code Online (Sandbox Code Playgroud)

请参阅本文中的完整步骤:https://devcenter.heroku.com/articles/local-maven-dependencies