`

maven_依赖

阅读更多
本文出自此处: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/
分享到:
评论
2 楼 hyneng 2012-04-12  
由于自己是一个初步接触者,如果觉得不适合自己就不要看,不要进行人身攻击
1 楼 hyneng 2012-04-12  
自己先顶一个

相关推荐

    maven_package 依赖包(完整)

    在本"maven_package"压缩包中,包含了完整的Maven依赖包,这些包广泛适用于各种Java项目,确保了项目的正常运行和高效开发。比如,提到了"log4j-1.2.17.jar",这是一个著名的日志处理框架,对于系统日志记录至关重要...

    xjar_maven_plugin.rar

    loadkitv1.0.1.jar是另一个包含在压缩包中的文件,可能是xjar-maven-plugin运行时依赖的一个库。LoadKit可能是用于加载加密后的jar包并处理解密逻辑的工具集,它可能包含了对加密jar的读取和解密算法,使得在运行时...

    maven_mahout_template-mahout-0.8

    Apache Maven是一款强大的项目管理和依赖管理工具,广泛应用于Java开发领域。它通过一个项目对象模型(Project Object Model,POM)来管理项目的构建、报告和依赖关系。在Java世界中,Maven几乎已经成为标准的构建...

    maven_springmvc_mybatis_demo-master.zip_DEMO_cutdm5_maven SSM_ma

    1. **pom.xml**:Maven的项目对象模型配置文件,包含了项目依赖、插件、构建设置等信息,是Maven构建项目的基础。 2. **src/main/java**:源代码目录,通常会包含SpringMVC的控制器、服务、DAO以及MyBatis的Mapper...

    12-Maven_maven_

    2. **依赖管理**: Maven自动解决项目依赖关系,通过在POM中声明所需的库,Maven会自动下载并管理这些库,避免版本冲突问题。 3. **坐标**: Maven中的每个项目都有唯一的坐标,包括groupId(组织或公司名)、...

    Maven_Example_A

    Maven通过使用一个项目对象模型(Project Object Model, POM),能够自动化项目的构建、报告和依赖管理过程,极大地提高了开发效率。 【描述】虽然提供的描述是“NULL”,但我们可以通过博文链接...

    Maven_SSM_fapiao

    在"Maven_SSM_fapiao"项目中,Maven负责管理依赖关系,自动化构建过程,包括编译、测试、打包、部署等步骤,极大地提高了开发效率。 **Spring框架** Spring是一个开源的Java平台,它简化了Java企业级应用的开发。...

    maven_package.zip

    Maven使用传递性依赖管理,即如果项目A依赖B,B又依赖C,Maven会自动引入C。当多个依赖包含相同JAR但版本不同时,Maven有优先级规则来解决冲突,一般采用“最近使用”原则。 7. **多模块项目**: 大型项目往往由...

    maven_repository.zip

    Maven仓库是Maven管理这些依赖的核心组件,分为远程仓库、本地仓库和私有仓库。本篇文章将详细讲解`maven_repository.zip`中的内容以及Maven本地仓库的作用。 ### 1. Maven仓库结构 Maven仓库分为以下三个层次: ...

    pom配置文件 maven_repository.rar

    然而,在没有网络或者网络环境不稳定的情况下,依赖于远程Maven仓库下载依赖可能会变得困难。此时,本地Maven仓库或离线Maven仓库的设置就显得尤为重要。本篇文章将详细讲解POM配置文件以及如何利用离线的`maven_...

    maven_spring mvc_mina dome

    通过解压并研究这些文件,学习者可以了解到如何配置Maven来管理项目依赖,如何在Spring MVC中配置Mina的Bean,以及如何编写处理网络事件的Mina处理器。 总结来说,这个项目为初学者提供了一个实战案例,让他们能够...

    jeesite_maven_repository.rar

    描述中提到的“构建的时候需要本地仓库的jar包”,指的是在执行Maven的`mvn install`或`mvn compile`等命令时,Maven会查找项目`pom.xml`中声明的依赖,并尝试从本地仓库获取这些依赖。如果本地仓库中没有所需依赖,...

    SpringMvc_Maven.zip_java项目_maven_maven springmvc_springmvc maven

    Maven 使用 XML 文件(POM.xml)来定义项目的配置信息,包括依赖、构建目标、插件等,极大地简化了构建过程。 在本项目中,"SpringMvc_Maven.doc" 可能是一份文档,详细介绍了如何设置和运行这个 Maven Spring MVC ...

    PyPI 官网下载 | pulp_maven_client-0.1.0b31578777196-py3-none-any.whl

    maven_client-0.1.0b31578777196-py3-none-any.whl"表明这是一个从Python Package Index (PyPI)官方源下载的软件包,名为`pulp_maven_client`,版本号为`0.1.0b31578777196`,适用于Python 3解释器,且不依赖特定的...

    Maven_Example_B

    2. **依赖管理**:Maven自动管理项目所依赖的库,通过在POM中声明依赖,Maven会自动下载并管理这些依赖,避免了版本冲突问题。 3. **生命周期(Lifecycle)**:Maven有预定义的一系列构建阶段,如clean、compile、...

    Maven_Example_C

    6. **依赖管理**:如何声明和管理C项目的外部库依赖,可能包括系统库和Maven仓库中的库。 7. **构建生命周期**:介绍Maven的clean、compile、test、package等生命周期阶段在C项目中的应用。 8. **插件使用**:可能...

    Maven_ssm_hj.zip

    在这个"Maven_ssm_hj"项目中,开发者可能已经配置好了Maven的POM.xml文件,包含了SSM框架的依赖,并且创建了相关的Java类、配置文件(如spring配置文件、MyBatis的mapper XML文件和SqlSessionFactoryBean配置)以及...

    apache-maven20210225_maven_

    Apache Maven 是一个强大的Java项目管理工具,它基于项目对象模型(Project Object Model,POM)的概念,能够自动化构建过程,管理依赖关系,并提供了一系列的生命周期和插件来简化开发流程。"apache-maven20210225_...

    apache-maven-3.6.2_maven_

    它使用一种称为传递性依赖的概念,意味着如果项目A依赖于项目B,而项目B又依赖于项目C,那么Maven会自动处理项目A对项目C的依赖,无需在项目A的POM中显式声明。 对于初学者来说,Maven简化了项目结构,通常遵循标准...

    Maven权威指南_maven_

    Maven的依赖管理解决了版本冲突问题,通过设定依赖的传递性、范围(compile、runtime、test等)和排除机制,可以有效地管理项目间的依赖关系。 6. **聚合与继承** Maven的聚合项目可以将多个子项目组合在一起,...

Global site tag (gtag.js) - Google Analytics