问题起因
由于impala驱动在maven仓库中没有,只能去官网注册下载到本地,然后本地引用依赖,
<dependency>
<groupId>com.cloudera.impala.jdbc</groupId>
<artifactId>ImpalaJDBC41</artifactId>
<version>2.6.4.1005</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/lib/ImpalaJDBC41.jar</systemPath>
</dependency>
一开始本地测试没有问题,但是mvn install的时候,这个jar不能被打包进去,导致线上报错
如何解决这个问题?
方法 1: 将 JAR 文件安装到本地 Maven 仓库
你可以使用
mvn install:install-file
命令将 JAR 文件安装到本地 Maven 仓库。这样 Maven 就可以像处理其他依赖一样处理这个 JAR 文件。
mvn install:install-file -Dfile=src/lib/ImpalaJDBC41.jar -DgroupId=com.cloudera.impala.jdbc -DartifactId=ImpalaJDBC41 -Dversion=2.6.4.1005 -Dpackaging=jar
然后,你可以在
pom.xml
中使用普通的依赖声明:
<dependency>
<groupId>com.cloudera.impala.jdbc</groupId>
<artifactId>ImpalaJDBC41</artifactId>
<version>2.6.4.1005</version>
</dependency>
方法 2: 将 JAR 文件放入 lib
目录并手动添加到构建路径
如果你希望将 JAR 文件包括在打包的结果中,而不使用 Maven 的依赖管理,可以将 JAR 文件放入
src/main/resources
目录或
src/main/webapp/WEB-INF/lib
目录(如果是 Web 项目)。这将确保 JAR 文件被包括在构建的 JAR 或 WAR 文件中。
方法 3: 使用 Maven 仓库
如果这个 JAR 文件在公共 Maven 仓库或私有 Maven 仓库中可用,考虑从这些仓库中添加依赖,而不是直接引用本地 JAR 文件。
方法 4: 使用 Maven 依赖插件
你还可以使用
maven-dependency-plugin
插件将 JAR 包包括在最终构建中。这里是一个简单的配置示例,将 JAR 包复制到最终的构建目录中:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>3.3.0</version>
<executions>
<execution>
<id>copy-dependencies</id>
<phase>package</phase>
<goals>
<goal>copy</goal>
</goals>
<configuration>
<outputDirectory>${project.build.directory}/lib</outputDirectory>
<includes>ImpalaJDBC41.jar</includes>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
确保 JAR 文件被正确复制到构建输出目录中。
总结
为了让 Maven 正确处理你的依赖关系,最好将 JAR 文件安装到本地 Maven 仓库或从可用的 Maven 仓库中获取。直接引用本地 JAR 文件并手动管理通常不推荐,因为这会破坏 Maven 的依赖管理和构建流程。