原创

如何解决maven打包不包含本地手工配置的jar

问题起因

由于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 的依赖管理和构建流程。
正文到此结束
Loading...