我正在尝试使用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?
我想使用静态项目内存储库解决方案。到目前为止,我有......
<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
我是否正确指定了此版本信息?任何人都可以建议我做错了什么?
答案 0 :(得分:10)
问题是您没有在“project-maven-repository”中正确安装jar(即在文件夹${project.basedir}/lib
中)
Maven存储(当你mvn install
时)maven存储库中的jar文件。 maven存储库具有精确的层次结构。以下是该结构的简化视图:
groupId
+ artifactId
定义存储工件的文件夹路径的第一部分(在存储库中)。version
是文件夹路径的第二部分version
也是工件名称的后缀artifactId
是工件名称默认情况下,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有哪些优势:
缺点:
${project.basedir}/lib
下的一个非常复杂的文件夹结构,对于不习惯使用maven的人来说非常奇怪。答案 1 :(得分:2)
另一种解决方案是先手动下载这些罐子并将它们放在相对于项目的某个位置(如lib
目录)。现在告诉maven使用那些罐子。此处groupId
,artifactdId
和version
是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。因此警告。如果罐子打包并且应用程序有效,那么我猜你没有问题。