问题起因
由于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 的依赖管理和构建流程。
还没有评论,来说两句吧...