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\repository\org\apache\maven\archetype\archetype-catalog\2.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端口是都被占用了。
作者:Eric Li
出处:http://www.cnblogs.com/ericli-ericli/
除转载文章外,随笔版权归作者和博客园所有,欢迎转载,转载请标明出处。
如果您觉得本篇博文对您有所收获,觉得作者还算用心,请点击右下角的 [推荐],谢谢!