使用maven将db2 jar添加到java webapp

时间:2013-03-13 10:22:16

标签: maven

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

db2jcc_license_cu.jar  
db2jcc_javax.jar   
db2jcc.jar

我正按照此帖中发布的说明进行操作... Can I add jars to maven 2 build classpath without installing them?

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

  1. 在我的根目录中创建了一个名为lib的文件夹。在里面 目录中包含三个db2 jar。
  2. 在我的pom文件中添加了以下内容......
  3.  <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>
    
    <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>
    

    但是当我运行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
    

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

      

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

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

3 个答案:

答案 0 :(得分: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存储库层次结构。

这就是为什么你需要像maven存储库一样组织你的${project.basedir}/lib文件夹。这在referenced post

的这一部分进行了解释
  

使用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>

因此,您需要执行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,而无需artifactorynexus

缺点:

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

答案 1 :(得分:2)

另一种解决方案是先手动下载这些罐子并将它们放在相对于项目的某个位置(如lib目录)。现在告诉maven使用那些罐子。此处groupIdartifactdIdversion是JFYI,因为它们不会用于下载任何内容。

此解决方案的优点是您不必构建maven存储库。

<dependencies>
    ...      
    <dependency>
        <groupId>com.ibm.db2.jcc</groupId>
        <artifactId>licences</artifactId>
        <version>1.0</version> <!-- Adjust this properly -->
        <scope>system</scope>
        <systemPath>${basedir}/lib/db2jcc_license_cu.jar</systemPath>
    </dependency>
    <dependency>
        <groupId>com.ibm.db2.jcc</groupId>
        <artifactId>db2jcc4</artifactId>
        <version>1.0</version> <!-- Adjust this properly -->
        <scope>system</scope>
        <systemPath>${basedir}/lib/db2jcc4.jar</systemPath>
    </dependency>
    <dependency>
        <groupId>com.ibm.db2.jcc</groupId>
        <artifactId>db2jcc_javax</artifactId>
        <version>1.0</version> <!-- Adjust this properly -->
        <scope>system</scope>
        <systemPath>${basedir}/lib/db2jcc_javax.jar</systemPath>
    </dependency>
</dependencies>

参考链接(日语):Mavenリポジトリで提供されていないサードパーティJarをどうするか

答案 2 :(得分:1)

我猜这些罐子没有pom.xml。因此警告。如果罐子打包并且应用程序有效,那么我猜你没有问题。