zoukankan      html  css  js  c++  java
  • 创建Maven工程

    Eclipse中配置Maven

    1.指定Maven核心程序的位

    WindowPreferencesMavenInstallations  --(Installation home:D:apache-maven-3.2.2)

    2.指定settings.xml

    Window→Preferences→Maven→User Settings --(Global Setting:D:apache-maven-3.2.2confsettings.xml)

    自动查找settings.xml中Local Repository:(D:RepMaven)


     修改工程默认的JDK版本:

    D:apache-maven-3.2.2confsettings.xml下

    <profile>
      <id>jdk-1.8</id>
      <activation>
        <activeByDefault>true</activeByDefault>
        <jdk>1.8</jdk>
      </activation>
      <properties>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
        <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
      </properties>
    </profile>


     创建Maven项目

    new→New Maven project(勾选Create a simple project,然后next)

    →Artifact下(Group Id:com.atguigu.maven ; Artifact Id:MakeFriend,然后finish)


     导入 Maven工程:

    如果第一次导入手动创建的Maven工程:

    Import→Maven→Existing Maven Project(next)→Root Directory:直接选择工作空间(会自动扫描,勾选后,Finish)

    导入后HelloFriend工程,目录:D:SpringToolSuiteHelloFriend下

    会多出:

    .settings

    .classpath

    .project

    如果导入通过Eclipse创建的Maven工程:

    可以Import→General→Existing Projects into Workspace


     运行Maven工程

    工程右键Run As,可选build:

    1.Maven build

    2.Maven build...

    3.Maven clean --清理

    4.Maven generate-sources

    5.Maven install --安装

    6.Maven test --测试

    如果没有想要的命令:可以选择2.Maven build...,Main中(Goals:compile)点击Run


     解决项目测试乱码问题:

    在当前项目的pom.xml文件中增加插件配置

    <build>
      <plugins>
        <!-- 解决maven test命令时console出现中文乱码乱码 -->
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-surefire-plugin</artifactId>
          <version>2.7.2</version>
          <configuration>
            <forkMode>once</forkMode><!--在一个进程中进行所有测试 ; 默认值:once -->
            <argLine>-Dfile.encoding=UTF-8</argLine>
          </configuration>
        </plugin>
      </plugins>
    </build>


     Maven项目依赖的范围

    1) compile

    [1]main目录下的Java代码可以访问这个范围依赖

    [2]test目录下的Java代码可以访问这个范围依赖

    [3]部署Tomcat服务器上运行时放在WEB-INFlib目录下

    例如对Hello的依赖。主程序、测试程序服务器运行时都需要用到

    2) test

    [1]main目录下的Java代码不能访问这个范围依赖

    [2]test目录下的Java代码可以访问这个范围依赖

    [3]部署Tomcat服务器上运行时不会放在WEB-INFlib目录下

    例如:对junit依赖。仅仅是测试程序部分需要。

    3) provided

    [1]main目录下的Java代码可以访问这个范围依赖

    [2]test目录下的Java代码可以访问这个范围依赖

    [3]部署Tomcat服务器上运行时不会放在WEB-INFlib目录下

    例如servlet-api服务器上运行时,Servlet容器会提供相关API,所以部署的时候不需要

    4)runtime

    [1]main目录下的Java代码不能访问这个范围的依赖

    [2]test目录下的Java代码可以访问这个范围的依赖

    [3]部署到Tomcat服务器上运行时放在WEB-INF的lib目录下

    其他importsystem等。


     Maven项目依赖的传递性

    存在间接依赖的情况时,主工程间接依赖jar可以访问吗?要看间接依赖的jar包引入时的依赖范围——只有依赖范围为compile时可以访问


     Maven项目依赖的原则:解决jar包冲突

    1) 路径最短者优先

     

    2) 路径相同时先声明者优先

     

    这里“声明先后顺序指的是dependency标签配置的先后顺序。


     Maven依赖的排除

    1) 有的时候为了确保程序正确可以将有可能重复的间接依赖排除。请看如下的例子:

    假设当前工程为public直接依赖environmentenvironment依赖commons-logging1.1.1对于public来说间接依赖。

    当前工程public直接依赖commons-logging1.1.2

    加入exclusions配置后可以在依赖environment时候排除版本1.1.1commons-logging的间依赖

    在public项目的pom.xml文件中增加插件配置

    <dependency>

      <groupId>com.atguigu.maven</groupId>

      <artifactId>Environment</artifactId>

      <version>0.0.1-SNAPSHOT</version>

      <!-- 依赖排除 -->

      <exclusions>

        <exclusion>

          <groupId>commons-logging</groupId>

          <artifactId>commons-logging</artifactId>

        </exclusion>

      </exclusions>

    </dependency>

    <dependency>

      <groupId>commons-logging</groupId>

      <artifactId>commons-logging</artifactId>

      <version>1.1.2</version>

    </dependency>

     public在依赖Environment时排除他的依赖的commons-logging1.1.1版本,public再依赖commons-logging1.1.2版本


     Maven统一管理目标jar包的版本

    问题是如果我们想要这些jar包的版本统一升级为4.1.1统一配置的方式

    <properties>

      <spring.version>4.1.1.RELEASE</spring.version>

    </properties>

            <dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-core</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-context</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-jdbc</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-orm</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-web</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework</groupId>
    			<artifactId>spring-webmvc</artifactId>
    			<version>${spring.version}</version>
    		</dependency>
    

     Maven项目更新:

    Maven→Update Project


     Maven继承

    为什么需要继承机制?

    由于非compile范围的依赖信息不能在“依赖中传递的,所以有需要的工程只能单独配置。例如

    Hello

    <dependency>

    <groupId>junit</groupId>

    <artifactId>junit</artifactId>

    <version>4.0</version>

    <scope>test</scope>

    </dependency>

    HelloFriend

    <dependency>

    <groupId>junit</groupId>

    <artifactId>junit</artifactId>

    <version>4.0</version>

    <scope>test</scope>

    </dependency>

    MakeFriend

    <dependency>

    <groupId>junit</groupId>

    <artifactId>junit</artifactId>

    <version>4.0</version>

    <scope>test</scope>

    </dependency>

    此时如果项目需要将各个模块的junit版本统一为4.9那么各个工程中手动修改无疑是非常不可取的。使用继承机制就可以将这样的依赖信息统一提取到工程模块中进行统一管理。


     创建父工程

    创建父工程和创建一般的Maven工程操作一致,唯一需要注意的是:打包方式处要设置为pom

    父工程中管理依赖

    Parent项目中的dependencies标签,用dependencyManagement标签括起来

    <!-- 通过继承管理依赖 -->
      <dependencyManagement>
          <dependencies>
              <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.9</version>
                <scope>test</scope>
            </dependency>
          </dependencies>
      </dependencyManagement>

     子工程中引用父工程

    <parent>

      <!-- 父工程坐标 -->

      <groupId>...</groupId>

      <artifactId>...</artifactId>

      <version>...</version>

      <relativePath>从当前目录到父项目的pom.xml文件的相对路径</relativePath>

    </parent>

    <!-- 配置父工程 -->
        <parent>
            <groupId>com.atguigu.maven</groupId>
            <artifactId>Parent</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <!-- 从当前工程出发查询父工程中的pom.xml文件的相对路径 -->
            <relativePath>../Parent/pom.xml</relativePath>
        </parent>

     此时如果子工程的groupId和version如果和父工程重复则可以删除。

    <!--     <groupId>com.atguigu.maven</groupId> -->
        <artifactId>MakeFriend</artifactId>
    <!--     <version>0.0.1-SNAPSHOT</version> -->

    在子项目中重新指定需要的依赖,删除范围和版本号

    <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
    <!--             <version>4.0</version> -->
                <scope>test</scope>
            </dependency>

     Maven项目聚合:

    为什么要使用聚合?

    多个工程拆分为模块后,需要手动逐个安装到仓库后依赖才能够生效。修改源码后需要逐个手动进行clean操作。使用了聚合之后就可以批量进行Maven工程的安装、清理工作。

     如何配置聚合?

    总的聚合工程Parent使用modules/module标签组合,指定模块工程的相对路径即可

    <!-- 聚合 -->
      <modules>
          <module>../MakeFriend</module>
          <module>../OurFriend</module>
          <module>../HelloFriend</module>
          <module>../Hello</module>
      </modules>

     结果:

    [INFO] Parent ............................................. SUCCESS [ 0.254 s]  --因为是所有子工程的父工程,所以先
    [INFO] Hello .............................................. SUCCESS [ 1.268 s]  --因为HelloFriend 和MakeFriend 依赖Hello ,所以先
    [INFO] HelloFriend ........................................ SUCCESS [ 0.674 s]  --因为MakeFriend 依赖HelloFriend ,所以先
    [INFO] OurFriend .......................................... SUCCESS [ 0.035 s]  --因为MakeFriend 依赖OurFriend,所以先
    [INFO] MakeFriend ......................................... SUCCESS [ 0.075 s]  --因为没有被依赖所以最后,如果都没有相互依赖,按pox.xml中的顺序


    Maven项目的Web工程

    创建Maven的Web工程和创建一般的Maven工程操作一致,唯一需要注意的是:打包方式处要设置为war

    但项目中的pom.xml会报错,

    解决办法:项目右键属性→Project Facets,把Dynamic Web Module勾去掉,告诉Eclipse不是一个Web工程,点击Apply应用

    然后再把Dynamic Web Module勾选上,下方出现Further configuration available,点击应用并关闭

  • 相关阅读:
    算法学习:二分法从入门到精通
    TypeScript筑基笔记一:Visual Studio Code 创建Typescript文件和实时监控
    LeetCode 92. 反转链表 II
    LeetCode 1525. 字符串的好分割数目
    字节跳动-people后台一面面经
    LeetCode 117. 填充每个节点的下一个右侧节点指针 II
    LeetCode 1529. 灯泡开关 IV
    LeetCode 165. 比较版本号
    LeetCode 312. 戳气球
    LeetCode 605. 种花问题
  • 原文地址:https://www.cnblogs.com/YUJIE666/p/12246448.html
Copyright © 2011-2022 走看看