maven3实战之maven使用入门(打包和运行)
----------
将项目进行编译,测试之后,下一个重要步骤就是打包。pom.xml中如果没有指定打包类型,默认打包类型为:jar。我们可以简单地执行命令打包:mvn clean pachage。
类似地,maven会在打包之前执行编译,测试等操作。如以打jar包为例,jar:jar任务负责打包,实际上就是jar插件的jar目标将项目主代码打包成一个名为xxxxxx-1.0-SNAPSHOT.jar的文件。该文件也位于target/输出目录中,它是根据artifact-version.jar的规则进行命名的,如有需要,还可以使用finalName来自定义该文件的名称,这里暂且不展开,后面会详细解释。
在打包之后,又执行了安装任务install:install。从输出可以看到任务将项目输出的jar安装到了maven本地仓库中,可以打开相应的文件夹看到项目的pom和jar。之前我们说只有构件被下载到本地仓库后,才能由所有Maven项目使用,这里同样的道理,只有将自己编写的项目安装到本地仓库之后,其他maven项目才能使用它。
我们已经体验了maven最主要的命令:mvn clean compile,mvn clean test,mvn clean package,mvn clean install。执行test之前是会先执行compile的,执行package之前是会先执行test的,而类似地,install之前会执行package。可以在任何一个maven项目中执行这些命令。
默认打包是生成jar的,如果我的项目还有main方法的,我想打包成可执行的jar包,为了生成可执行的jar文件,需要借助maven-shade-plugin,配置该插件如下:
Xml代码
org.apache.maven.plugins
maven-shade-plugin
1.2.1
package
shade
com.juvenxu.mvnbook.helloworld.HelloWorld
默认打包生成jar是不能够直接运行的,因为带有main方法的类信息不会添加到manifest中(打开jar文件中的META-INF/MANIFEST.MF文件,将无法看到Main-Class一行)。
plugin元素在POM中的相对位置应该在下面。我们配置了mainClass为com.juvenxu.mvnbook.helloworld.HelloWorld,项目在打包时会将该信息放到MANIFEST中。现在执行mvn clean install,待构建完成之后打开target/目录,可以看到hello-world-1.0-SNAPSHOT.jar和original-hello-world-1.0-SNAPSHOT.jar,前者是带有Main-Class信息的可执行jar,后者是原始的jar,打开hello-world-1.0-SNAPSHOT.jar的META-INF/MANIFEST.MF,可以看到它包含这样一行信息:
Main-Class:com.juvenxu.mvnbook.helloworld.HelloWorld
现在,在项目根目录中执行该jar文件:
D:\code\hello-world > java-jar target\hello-world-1.0-SNAPSHOT.jar,可以得到正确的输出了。
1:创建名为:helloword的maven项目
2:/helloword/src/main/java下建立package包hello,在包下建类SayHello
package hello;
public class SayHello {
public String sayhello() {
System.out.println("hello............is anybody here...");
return "dddddddddddddddddddddddddd";
}
public static void main(String[] arg) {
System.out.println(new SayHello().sayhello());
}
}3:/helloword/src/test/java下建立test包,在test包下建HelloWordTest类
package test;
import hello.SayHello;
import junit.framework.Assert;
import junit.framework.TestCase;
public class HelloWordTest extends TestCase {
public HelloWordTest(String name) {
super(name);
}
protected void setUp() { //进行初始化的任务
}
/**
* @param args
*/
public void testSayHello()
{
SayHello s = new SayHello();
String r = s.sayhello();
Assert.assertEquals("dddddddddddddddddddddddddd", r);
}
}
4:pom.xml配置
4.0.0
com.houwen.test
helloword
0.0.1-SNAPSHOT
Maven Helloword
junit
junit
3.8.1
test
org.apache.maven.plugins
maven-shade-plugin
1.2.1
package
shade
hello.SayHello
4.1上述例子中的,运行maven package后
我的Main-Class是hello.SayHello,构建完成后,对应于一个常规的helloword-0.0.1-SNAPSHOT.jar文件,我还得到了一个original-helloword-0.0.1-SNAPSHOT.jar文件。最后,我可以通过helloword-0.0.1-SNAPSHOT.jar命令运行程序。
4.2之后再运行maven install,把生成的jar打入到本地的maven仓库,可以在C:\Documents and Settings\hcen\.m2\repository\com\houwen\test\helloword\0.0.1-SNAPSHOT
找到helloword-0.0.1-SNAPSHOT.jar
5.最后,我可以通过java -jar(jar包路径)/helloword-0.0.1-SNAPSHOT.jar命令运行程序。
用Maven生成一个包孕所有依赖jar包的可执行的jar包
create an executable jar with dependencies using Maven:using plugin - onejar-maven-plugin. Example below (mvn package build jar):
org.dstovall
onejar-maven-plugin
1.3.0
com.company.MainClass
one-jar
You need to add repository for that plugin:
onejar-maven-plugin.googlecode.com
http://onejar-maven-plugin.googlecode.com/svn/mavenrepo
posted on 2014-03-11 17:30 顺其自然EVO 阅读(98308) 评论(0) 编辑 收藏 所属分类: maven