本文出自此处:http://www.naxsu.com/maven_-yi-lai/
更多资源请访问:http://www.naxsu.com
依赖包的查询
1、所有的依赖都是通过坐标来进行存储的(GAV-->groupId、artifactId、version)
2、有一些网上的仓库提供了坐标的查询(http://mvnrepository.com)
3、通过<dependencies>设置依赖
maven是如何搜索依赖的?首先会在本地仓库查询如果本地仓库没有,就去中央仓库查询
依赖的传递性
1、依赖是会被传递
A-->C B-->A ==> B-->C(这种依赖是基于compile这个范围进行传递)
对于依赖的传递而言,主要是针对compile作用域传递
传递的冲突问题
1、a-->b1.0 c-->b1.1 d-->a和c,这个时候在d的pom中,哪一个依赖先写就使用先写依赖的版本
如果d--><d>a</d><d>c</d>-->依赖版本是b1.0
2、a-->b1.0 c-->b1.1 d-->a和c-->b1.0 f-->d,c,如果路径的长短不一致就选择最小路径
f-->b1.1
3、如果希望精确的控制依赖包,可以使用依赖的排除功能进行控制
依赖的范围
1、test范围指的是测试范围有效,在编译和打包时都不会使用这个依赖
2、compile范围指的是编译范围有效,在编译和打包时都会将依赖存储进去
3、provided依赖:在编译和测试的过程有效,最后生成war包时不会加入,诸如:servlet-api,因为servlet-api,tomcat等web服务器已经存在了,如果再打包会冲突
4、runtime在运行的时候依赖,在编译的时候不依赖
默认的依赖范围是compile
小项目
项目背景:一个用户管理项目,分为三个模块:core模块、log模块、dao模块和service模块。dao模块依懒于core模块和log模块,core模块又依懒于hibernate等,最后dao也会依懒于hibernate等,这就是领情的依懒性。依懒的范围在其中也得到体现。在log模块中用到的log4j是1.2.9,在core模块用到的log4j是1.2.16,所以,在service模块中充分解决了传递的冲突问题。
core模块
user实体类
package com.naxsu.vo;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="t_user")
public class User {
private int id;
private String username;
private String nickname;
private String email;
private String password;
@Id
@GeneratedValue
public int getId() {
return id;
}
// set get method ...
}
Hibernate工具类
package com.naxsu.util;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
public class HibernateUtil {
/**
* SessionFactory是单例
*/
private static SessionFactory factory = null;
static {
factory = new Configuration().configure().buildSessionFactory();
}
public static Session openSession() {
return factory.openSession();
}
}
测试类TestUser
package com.naxsu.test;
import org.hibernate.Session;
import org.junit.Assert;
import org.junit.Test;
import com.naxsu.util.HibernateUtil;
import com.naxsu.vo.User;
public class TestUser {
@Test
public void testAdd() {
Session session = HibernateUtil.openSession();
session.beginTransaction();
// User u = new User();
// u.setUsername("admin");
// u.setPassword("admin");
// u.setNickname("超级管理员");
// u.setEmail("admin@admin.com");
// session.save(u);
//
// Assert.assertTrue(u.getId()>0);
session.getTransaction().commit();
}
@Test
public void testLoad() {
Session session = HibernateUtil.openSession();
session.beginTransaction();
User u = (User)session.load(User.class, 1);
Assert.assertEquals(1, u.getId());
session.getTransaction().commit();
}
}
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.naxsu.user</groupId>
<artifactId>user-core</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>user-core</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>3.6.10.Final</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.18</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.4</version>
</dependency>
<dependency>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.12.1.GA</version>
</dependency>
</dependencies>
</project>
log模块
Log实体类
package com.naxsu.user.log;
import java.util.Date;
public class Log {
public static void log(String str) {
System.out.println(new Date()+"---"+str);
}
}
POM.XML文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.naxsu.user</groupId>
<artifactId>user-log</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>user-log</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.9</version>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
</dependencies>
</project>
dao模块
POM.XML文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.naxsu.user</groupId>
<artifactId>user-dao</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>user-dao</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.naxsu.user</groupId>
<artifactId>user-core</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
service模块
POM.XML文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.naxsu.user</groupId>
<artifactId>user-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>user-service</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.10</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.naxsu.user</groupId>
<artifactId>user-dao</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.naxsu.user</groupId>
<artifactId>user-log</artifactId>
<version>0.0.1-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</project>
转载请注明出处:
http://www.naxsu.com/maven_-yi-lai/
分享到:
相关推荐
在本"maven_package"压缩包中,包含了完整的Maven依赖包,这些包广泛适用于各种Java项目,确保了项目的正常运行和高效开发。比如,提到了"log4j-1.2.17.jar",这是一个著名的日志处理框架,对于系统日志记录至关重要...
loadkitv1.0.1.jar是另一个包含在压缩包中的文件,可能是xjar-maven-plugin运行时依赖的一个库。LoadKit可能是用于加载加密后的jar包并处理解密逻辑的工具集,它可能包含了对加密jar的读取和解密算法,使得在运行时...
Apache Maven是一款强大的项目管理和依赖管理工具,广泛应用于Java开发领域。它通过一个项目对象模型(Project Object Model,POM)来管理项目的构建、报告和依赖关系。在Java世界中,Maven几乎已经成为标准的构建...
1. **pom.xml**:Maven的项目对象模型配置文件,包含了项目依赖、插件、构建设置等信息,是Maven构建项目的基础。 2. **src/main/java**:源代码目录,通常会包含SpringMVC的控制器、服务、DAO以及MyBatis的Mapper...
2. **依赖管理**: Maven自动解决项目依赖关系,通过在POM中声明所需的库,Maven会自动下载并管理这些库,避免版本冲突问题。 3. **坐标**: Maven中的每个项目都有唯一的坐标,包括groupId(组织或公司名)、...
Maven通过使用一个项目对象模型(Project Object Model, POM),能够自动化项目的构建、报告和依赖管理过程,极大地提高了开发效率。 【描述】虽然提供的描述是“NULL”,但我们可以通过博文链接...
在"Maven_SSM_fapiao"项目中,Maven负责管理依赖关系,自动化构建过程,包括编译、测试、打包、部署等步骤,极大地提高了开发效率。 **Spring框架** Spring是一个开源的Java平台,它简化了Java企业级应用的开发。...
Maven使用传递性依赖管理,即如果项目A依赖B,B又依赖C,Maven会自动引入C。当多个依赖包含相同JAR但版本不同时,Maven有优先级规则来解决冲突,一般采用“最近使用”原则。 7. **多模块项目**: 大型项目往往由...
Maven仓库是Maven管理这些依赖的核心组件,分为远程仓库、本地仓库和私有仓库。本篇文章将详细讲解`maven_repository.zip`中的内容以及Maven本地仓库的作用。 ### 1. Maven仓库结构 Maven仓库分为以下三个层次: ...
然而,在没有网络或者网络环境不稳定的情况下,依赖于远程Maven仓库下载依赖可能会变得困难。此时,本地Maven仓库或离线Maven仓库的设置就显得尤为重要。本篇文章将详细讲解POM配置文件以及如何利用离线的`maven_...
通过解压并研究这些文件,学习者可以了解到如何配置Maven来管理项目依赖,如何在Spring MVC中配置Mina的Bean,以及如何编写处理网络事件的Mina处理器。 总结来说,这个项目为初学者提供了一个实战案例,让他们能够...
描述中提到的“构建的时候需要本地仓库的jar包”,指的是在执行Maven的`mvn install`或`mvn compile`等命令时,Maven会查找项目`pom.xml`中声明的依赖,并尝试从本地仓库获取这些依赖。如果本地仓库中没有所需依赖,...
Maven 使用 XML 文件(POM.xml)来定义项目的配置信息,包括依赖、构建目标、插件等,极大地简化了构建过程。 在本项目中,"SpringMvc_Maven.doc" 可能是一份文档,详细介绍了如何设置和运行这个 Maven Spring MVC ...
maven_client-0.1.0b31578777196-py3-none-any.whl"表明这是一个从Python Package Index (PyPI)官方源下载的软件包,名为`pulp_maven_client`,版本号为`0.1.0b31578777196`,适用于Python 3解释器,且不依赖特定的...
2. **依赖管理**:Maven自动管理项目所依赖的库,通过在POM中声明依赖,Maven会自动下载并管理这些依赖,避免了版本冲突问题。 3. **生命周期(Lifecycle)**:Maven有预定义的一系列构建阶段,如clean、compile、...
6. **依赖管理**:如何声明和管理C项目的外部库依赖,可能包括系统库和Maven仓库中的库。 7. **构建生命周期**:介绍Maven的clean、compile、test、package等生命周期阶段在C项目中的应用。 8. **插件使用**:可能...
在这个"Maven_ssm_hj"项目中,开发者可能已经配置好了Maven的POM.xml文件,包含了SSM框架的依赖,并且创建了相关的Java类、配置文件(如spring配置文件、MyBatis的mapper XML文件和SqlSessionFactoryBean配置)以及...
Apache Maven 是一个强大的Java项目管理工具,它基于项目对象模型(Project Object Model,POM)的概念,能够自动化构建过程,管理依赖关系,并提供了一系列的生命周期和插件来简化开发流程。"apache-maven20210225_...
它使用一种称为传递性依赖的概念,意味着如果项目A依赖于项目B,而项目B又依赖于项目C,那么Maven会自动处理项目A对项目C的依赖,无需在项目A的POM中显式声明。 对于初学者来说,Maven简化了项目结构,通常遵循标准...
Maven的依赖管理解决了版本冲突问题,通过设定依赖的传递性、范围(compile、runtime、test等)和排除机制,可以有效地管理项目间的依赖关系。 6. **聚合与继承** Maven的聚合项目可以将多个子项目组合在一起,...