zoukankan      html  css  js  c++  java
  • Maven学习(二)使用命令创建maven项目

    创建maven项目

    手动

    严格参照约定目录结构,我们开始手动新增文件夹

    命令方式

    project项目

    我们也可以使用maven自动生成目录:

    mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false

    这句话的命令是创建一个默认的项目,但我在执行这个命令时,命令行会停在

    [INFO] Generating project in Batch mode

    我操作时,这句话会停很久,

    增加一个-X参数,可以查看详细信息 mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-app -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false -X

    可以看到,程序停在了下面这一行:[DEBUG] Searching for remote catalog: http://repo1.maven.org/maven2/archetype-catalog.xml

    去查询这个文件的时候网络比较差或者其他原因,导致挂在那里。

    解决方法很简单:

    1. 把上述地址复制到浏览器中,下载这个文件到本地。
    2. 把文件archetype-catalog.xml复制到目录${user.home}.m2
    epositoryorgapachemavenarchetypearchetype-catalog2.2(改过的默认目录的则放在自己修改好目录)下面。
    3. 在上述命令后增加参数-DarchetypeCatalog=local,读取本地文件即可。

    生成项目文件在:

    web项目

    mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=my-WebApp -DarchetypeArtifactId=maven-archetype-webapp -DinteractiveMode=false

    生成的文件都存在一个地方,再此就不赘述了。但是 创建好的JavaWeb项目中目前只有src/main/resources目录,因此还需要手动添加src/main/java、src/test/java、src/test/resources

    项目构建安装及使用

    我的源码文件:

    package com.lsk.mavenCode;
    public class HelloWorld{
        public String doSay(String perName){
            return perName+" say: Hello world";
        }
    }

    测试文件夹下的代码:

    package com.lsk.mavenCode;
    //导入junit的包
    import org.junit.Test;
    import static junit.framework.Assert.*;
    
    public class HelloWorldTest {
    
        @Test
        public void testConsoleHello(){
            HelloWorld hello = new HelloWorld();
            String word = hello.doSay("javaTester");
            assertEquals("javaTester say: Hello world",word);        
        }
    }

    此时的pom.xml文件内容:

    <?xml version="1.0" encoding="UTF-8"?>
    <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">
        <!--所有的Maven项目都必须配置这四个配置项-->
        <modelVersion>4.0.0</modelVersion>
        <!--groupId指的是项目名的项目组,默认就是包名-->
        <groupId>com.lsk.mavenCode</groupId>
        <!--artifactId指的是项目中的某一个模块,默认命名方式是"项目名-模块名"-->
        <artifactId>ConsoleHello</artifactId>
        <!--version指的是版本,这里使用的是Maven的快照版本-->
        <version>SNAPSHOT-0.0.1</version>
        <name>ConsoleHello</name>
    
        <!--添加依赖的jar-->
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.9</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    </project>

    编译

    测试

    打包

    mvn package

    我们可以见到(注意目录)

    安装

    mvn install

     在我们的本地maven仓库(注意目录是包的地址):

    细心的话会发现,后面的每个命令,都会包含前面的命令,其中构建还包含一个mvn clean命名。

     在其他项目中使用通过Maven安装生成的项目jar包

    新建项目

    新项目的pom.xml文件;

    <?xml version="1.0" encoding="UTF-8"?>
    <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">
        <!--所有的Maven项目都必须配置这四个配置项-->
        <modelVersion>4.0.0</modelVersion>
        <!--groupId指的是项目名的项目组,默认就是包名-->
        <groupId>cn.eric.mavenCode</groupId>
        <!--artifactId指的是项目中的某一个模块,默认命名方式是"项目名-模块名"-->
        <artifactId>CallConsoleHello</artifactId>
        <!--version指的是版本,这里使用的是Maven的快照版本-->
        <version>SNAPSHOT-0.0.1</version>
        <name>CallConsoleHello</name>
    
        <!--添加依赖的jar-->
        <dependencies>
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.9</version>
                <scope>test</scope>
            </dependency>
    
        <dependency>
            <groupId>com.lsk.mavenCode</groupId>
            <artifactId>ConsoleHello</artifactId>
            <version>SNAPSHOT-0.0.1</version>
            <scope>compile</scope>
        </dependency>
        </dependencies>
    </project>

    新建项目的源码:

    package cn.eric.mavenCode;
    
    import com.lsk.mavenCode.HelloWorld;
    public class CallHelloWorld{
        public String sayHelloWorldByCall(String personName){
            HelloWorld helloWorld=new HelloWorld();
            String result= helloWorld.doSay(personName);
            return result;
        }
    }

    Test文件下(有好几层):

    package cn.eric.mavenCode;
    
    import static junit.framework.Assert.assertEquals;
    import org.junit.Test;
    import com.lsk.mavenCode.HelloWorld;
    
    public class CallHelloWorldTest{
        @Test
        public void testCallHelloWorld(){
            CallHelloWorld call=new CallHelloWorld();
            String result=call.sayHelloWorldByCall("Eric");
            assertEquals("Eric say: Hello world",result);
        }
    }

    运行上面的命令,

     说明引用是成功的。

    打包发布web项目

    是用外部tomcat

    上面使,使用命令创建的JavaWeb项目是一个空的项目,只有一个index.jsp页面,我们使用Maven将Web项目打包发布运行。

    使用命令切换到web项目(到有pom.xml的根),使用 mvn package进行打包:

    然后我们可以在web项目的target下看到 .war文件:

    将生成的.war文件放到 tomcat的 webapps 目录下:

    开启tomcat,

    打包发布成功。

     使用内置jetty

    除了使用Tomcat服务器运行Web项目之外,我们还可以在Web项目中集成Jetty发布运行,首先在pom.xml文件中配置Jetty插件,如下:

    <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/maven-v4_0_0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.mycompany.app</groupId>
      <artifactId>my-WebApp</artifactId>
      <packaging>war</packaging>
      <version>1.0-SNAPSHOT</version>
      <name>my-WebApp Maven Webapp</name>
      <url>http://maven.apache.org</url>
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
      <!--内嵌jetty-->
      <build>
        <finalName>myWebApp</finalName>
         <pluginManagement>
            <!--配置Jetty-->
              <plugins>
                <plugin>
                 <groupId>org.mortbay.jetty</groupId>   
                 <artifactId>maven-jetty-plugin</artifactId>
                </plugin>
              </plugins>
        </pluginManagement>
      </build>
    
    </project>

    在web目录下,有pom.xml的那一层,执行命令:mvn jetty:run:

     

    出现这个,代表已经可以在浏览器运行了。

    如果启动内置jetty失败的话,可以看下自己的8080端口是都被占用了。

  • 相关阅读:
    [CF538F]A Heap of Heaps(主席树)
    [BZOJ1901][luogu2617]Dynamic Rankings(树状数组+主席树)
    [BZOJ3932][CQOI2015]任务查询系统(差分+主席树)
    [BZOJ2588]Count on a tree(LCA+主席树)
    [BZOJ2733][HNOI2012] 永无乡(线段树合并)
    [BZOJ1604][Usaco2008 Open]Cow Neighborhoods 奶牛的邻居 (Treap+单调队列)
    【贪心】POJ2376-Cleaning Shifts
    【穷竭】POJ3187-Backward Digit Sums
    【枚举+贪心】POJ2718-Smallest Difference
    【BFS】POJ3669-Meteor Shower
  • 原文地址:https://www.cnblogs.com/ericli-ericli/p/6857913.html
Copyright © 2011-2022 走看看