假设我们有一个Maven的project,其中有些Jar包不是来自Maven库的,是存在本地的某些Jar文件,比如说在project下有一个lib,里面放了一些额外需要的Jar。
默认情况下,如果用mvn 命令去编译或运行它,并且其中有使用到这些外部jar的类,那么可能报x.x.x包找不着。这是因为maven在它当前的配置里找不到你需要的这些外部jar的配置。
那么如何在maven中配置外部jar,以便在编译和运行的时候能找着它们呢?这里就简单介绍两种方法。
一、使用Dependency声明
这个方法就是和其他maven的dependency一样,在pom.xml里声明一个dependency:
<dependency>
<groupId>org.ibm</groupId>
<artifactId>jms</artifactId>
<version>1.0.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/lib/jms.jar</systemPath>
</dependency>
细心的人可能已经留意到了,这里多了两个声明:scope和systemPath。
在Maven中可用的声明大致有:compile, runtime, test, system, 和 provided 。关于他们的具体意思,有兴趣的可以去 http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope 看。
在上面的dependency里,我们声明了scope为system, 它使用起来和provided差不多,即此依赖由系统提供,但是与provided有点不同的是,它需要显式的使用systemPath指定lib所在的路径,如上systemPath。
最后看到的效果如上图,jms.jar被加到了工程的maven依赖里。用这种方法可以不需要预先把需要的jar安装在maven库下。
二、创建一个Project范围的库
以上的方法是从避免安装lib到maven库方向上实现。另一种方法就是则是从构造库的方向上考虑的:创建一个虚拟的本地库,让maven到这个本地库里去查找需要的lib。
步骤大致如下:
1. 构造虚拟Maven库
这里我们需要提供一个和maven库结构一样的文件夹/文件结构,以模拟Maven库,例如假如project里lib即是一个maven库,则它的结构可能是:
如上,虚拟库中声明了两个jar:
1. com.ibm.mq-1.0.jar : groupId 是 org.ibm.jms;artifactId是com.ibm.mq;version是1.0
2. com.ibm.mqjms-1.0.jar : groupId是org.ibm.jms;artifactId是com.ibm.mqjms;version是1.0
假设以上jar是可用的maven依赖的话,那在dependency依赖里的添加项为:
<dependency>
<groupId>org.ibm.jms</groupId>
<artifactId>com.ibm.mqjms</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>org.ibm.jms</groupId>
<artifactId>com.ibm.mq</artifactId>
<version>1.0</version>
</dependency>
下面的问题就是如何让Maven能找到这个虚拟Maven库。
在pom.xml里,我们使用repositories声明可能查找的、多个其他的Maven的库,例如:
<repositories>
<repository>
<releases>
<enabled>false</enabled>
<updatePolicy>always</updatePolicy>
<checksumPolicy>warn</checksumPolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
<checksumPolicy>fail</checksumPolicy>
</snapshots>
<id>codehausSnapshots</id>
<name>Codehaus Snapshots</name>
<url>http://snapshots.maven.codehaus.org/maven2</url>
<layout>default</layout>
</repository>
</repositories>
当Maven在Central库里没有找到对应的artifact,则会到这些库里去查找。所以,我们只需要如上把虚拟的Maven库的定义的添加到pom.xml里即可:
<repositories>
<repository>
<id>repo</id>
<releases>
<enabled>true</enabled>
<checksumPolicy>ignore</checksumPolicy>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
<url>file://${project.basedir}/lib</url>
</repository>
</repositories>
这里库的路径是:${project.basedir}/lib 。它是一个release库而不是snapshot库。
区别
方式一:会直接引用指定路径的lib,而不会把它加到本地的Maven库里去,所以它只在当前project使用,但工程可以方便的共享,且不使用额外的空间
方式二:引用的jars会首先被安装到本地的maven库里,然后再通过引用从本地的Maven库里加载,好处是一旦安装,在其他的project也可以引用,但是需要首先在本地安装,当前工程是便携的,但是直接引用而未如上声明的工程可能不是便携的。
分享到:
相关推荐
本文将详细介绍在Maven项目中引用外部jar包的几种方法,帮助开发者们解决项目构建和运行时可能遇到的问题。 ### Maven项目引用外部jar包的重要性 在传统的Java Web项目中,我们可以通过将jar包拷贝到项目的类路径...
在平时的开发中,有一些Jar包因为种种原因,在Maven的中央仓库中没有收录,所以就要使用本地引入的方式加入进来。这种方法可以让我们在没有中央仓库支持的情况下,仍然可以使用需要的Jar包。 拷贝至项目根目录 ...
在本文中,我们将深入探讨如何使用Spring Boot和Maven来构建一个项目,使得依赖和配置文件被打包到jar包外部,以实现更加灵活的项目管理。这个方法对于那些需要根据不同环境进行定制配置或者频繁更新配置的应用来说...
在Java开发中,Maven是一个不可或缺的构建工具,它管理项目的依赖、构建流程以及项目配置。Maven通过中央仓库下载所需的jar包,使得开发者能够轻松地集成第三方库。然而,有时候我们需要将本地的jar包安装到Maven...
这个插件的主要功能是将所有依赖的jar包和项目本身打包到一个单独的JAR中,使得JAR具有可执行性。 ```xml <artifactId>maven-assembly-plugin <mainClass>com.allen.capturewebdata.Main</mainClass> ...
maven的scala编译包
有些时候,当我们需要在自己的maven工程中添加一个确定的jar而发现Maven中央仓库不存在时,但是我们自己手上有这些需要的jar包,那么我们可以自给自足,把这个jar包添加到我们的自己的maven仓库中,这样方便在maven...
在Java开发中,Maven是一个广泛使用的构建工具,它依赖于中央仓库中的各种jar包来构建项目。然而,有时候我们可能需要使用一些不在中央仓库中的第三方库,这就需要我们将这些jar包手动导入到Maven的本地库。"maven...
在配置文件中引用依赖项,例如: ```xml <groupId>com.xx.xxx</groupId> * <version>1.1.2 <scope>system ${basedir}/src/main/resources/lib/.jar ``` 2. 项目打包时,需要在pom.xml文件中配置...
在开发Java项目时,我们经常会遇到需要引入外部本地jar包的情况。IntelliJ IDEA作为一款强大的集成开发环境(IDE),提供了方便的方式来管理Maven项目中的依赖。以下就是在IDEA中为Maven项目导入本地jar包的详细步骤...
2. **依赖管理**:在pom.xml中,开发者可以声明项目所需的外部库。Maven会自动下载这些依赖,并管理它们的版本冲突。通过中央仓库,Maven提供了一个全球共享的jar包存储库,大大简化了依赖的获取。 3. **插件机制**...
在本案例中,我们关注的是非 Maven 构建的 SpringBoot jar 包,这意味着项目可能是通过 Gradle 或者手动构建的。 1. **非 Maven 构建** Maven 是一种流行的 Java 项目管理工具,用于构建、依赖管理和项目信息管理...
【标题】"springboot_jsp_maven(war+jar)"是一个综合了Spring Boot、JSP和Maven技术的示例项目,旨在展示如何在Spring Boot框架下开发并部署包含Web界面的应用程序。该项目的独特之处在于它同时支持两种常见的部署...
在上面的配置中,我们使用groupId、artifactId和version元素来指定外部jar包的坐标,然后使用system元素来指定jar包的路径。注意,system元素的值是system,这样Maven就不会在Repository中查找该jar包,而是从指定的...
如果你正在使用IDE,如Eclipse或IntelliJ IDEA,可以通过添加外部JAR的方式将这些文件引入项目。在构建路径中,将这些JAR文件添加到Libraries,然后在项目的Classpath中就能使用它们了。 总之,这个压缩包提供的是...
如果你的项目依赖于其他外部库,这些库会被包含在同一个jar中(`maven-assembly-plugin`和`maven-shade-plugin`),或者放在单独的lib目录下(`maven-jar-plugin`)。 总的来说,MAVEN打可运行jar包涉及到对`pom....
下面我们将详细探讨如何在Eclipse中打包JAR包,并读取外部JAR包和外部配置文件。 首先,我们需要了解JAR文件的结构。JAR文件是Java类文件和相关资源的容器,它们被组织成目录结构,类似于Unix或Windows的文件系统。...
在Java开发过程中,依赖管理是至关重要的,尤其是当我们需要引用外部库的jar包时。"利用maven下载jar到本地"的主题就是关于如何通过Maven这个强大的构建工具,方便快捷地将所需jar包添加到本地仓库,从而避免手动...
### Maven库配置详解 在Java开发领域,Maven作为一个项目管理和综合工具,广泛应用于构建、依赖管理和...在实际项目开发中,合理地配置Maven仓库不仅可以提高项目的构建效率,还能有效管理项目依赖,提升开发体验。