使用maven将db2 jar添加到java webapp

Ric*_*hie 5 maven

我正在尝试使用Maven将以下db2 jar添加到我的Java Web应用程序中...

db2jcc_license_cu.jar  
db2jcc_javax.jar   
db2jcc.jar
Run Code Online (Sandbox Code Playgroud)

我正按照这篇文章中发布的说明... 我可以将jar添加到maven 2 build classpath而不安装它们吗?

我想使用静态项目内存储库解决方案.到目前为止我有......

  1. 在我的根目录中创建了一个名为lib的文件夹.在这个目录里面有三个db2 jar.
  2. 在我的pom文件中添加了以下内容......
 <repository>
        <id>lib</id>
        <releases>
            <enabled>true</enabled>
            <checksumPolicy>ignore</checksumPolicy>
        </releases>
        <snapshots>
            <enabled>false</enabled>
        </snapshots>
        <url>file://${project.basedir}/lib</url>    
 </repository> 
 </repositories>
Run Code Online (Sandbox Code Playgroud)
<dependency> 
    <groupId>com.ibm.db2.jcc</groupId>
    <artifactId>db2jcc</artifactId>
    <version>3.8.47</version>
</dependency>
<dependency>
    <groupId>com.ibm.db2.jcc</groupId>
    <artifactId>db2jcc_license_cu</artifactId>
    <version>3.8.47</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

但是当我运行maven安装时,我得到......

[WARNING] The POM for com.ibm.db2.jcc:db2jcc:jar:3.8.47 is missing, no dependency information available
[WARNING] The POM for com.ibm.db2.jcc:db2jcc_license_cu:jar:3.8.47 is missing, no dependency information available
Run Code Online (Sandbox Code Playgroud)

我通过运行...获得了Jars的版本

java com.ibm.db2.jcc.DB2Jcc -version

我是否正确指定了此版本信息?任何人都可以建议我做错了什么?

ben*_*n75 10

问题是您没有在"project-maven-repository"中正确安装jar(即在文件夹中${project.basedir}/lib)

Maven存储(当你这样做时mvn install)maven存储库中的jar文件.maven存储库具有精确的层次结构.以下是此结构的简化视图:

  • 工件groupId+ artifactId定义存储工件的文件夹路径的第一部分(在存储库中).
  • 工件version是文件夹路径的第二部分
  • 工件version也是工件名称的后缀
  • artifactId是工件名称
  • 包装是工件扩展(默认是jar)

默认情况下,maven使用位于其下的存储库 <USER_HOME>/.m2/repository

您尝试设置的解决方案使用存储库的另一个位置:${project.basedir}/lib即使它不是默认存储库位置,它仍然是maven-repository,因此maven期望在此位置下找到通常的maven存储库层次结构.

这就是为什么你需要${project.basedir}/lib像maven存储库一样组织你的文件夹.这部分引用的帖子对此进行了解释:

使用Maven安装到项目仓库

我建议不要手动创建这个结构,而是使用Maven插件将你的jar作为工件安装.因此,要将工件安装到repo文件夹下的项目内存储库,请执行:

mvn install:install-file -DlocalRepositoryPath=lib -DcreateChecksum=true -Dpackaging=jar -Dfile=[your-jar] -DgroupId=[...] -DartifactId=[...] -Dversion=[...]

如果您选择这种方法,您将能够将pom中的存储库声明简化为:

<repository>
    <id>repo</id>
    <url>file://${project.basedir}/lib</url>
</repository>
Run Code Online (Sandbox Code Playgroud)

所以你需要做一个mvn install创建${project.basedir}/lib层次结构(你可以手工完成,但不推荐它,并且容易出错).

我的情况,运行的命令将是这样的:(假设您将jar放在HOME_DIR中并在您的运行中运行此命令${project.basedir})

mvn install:install-file -DlocalRepositoryPath=lib -DcreateChecksum=true -Dpackaging=jar -Dfile=<USER_HOME>/db2jcc_license_cu.jar -DgroupId=com.ibm.db2.jcc -DartifactId=db2jcc_license_cu -Dversion=3.8.47

您选择的approch有哪些优点:

  • 没有maven设置的开发人员将在SCM系统下的项目源中提供库.
  • 您可以轻松地引用不在公共maven存储库中的jar,而不需要像artifactnexus那样的东西

缺点:

  • 一个相当复杂的文件夹结构,${project.basedir}/lib看起来非常奇怪的是一个不习惯使用maven的人.
  • 你将把这些库存储在SCM下(大量的二进制文件)