一、maven常用命令:
1.mvn clean 清空产生的项目( target里)
2.mvn compile 编译源代码
3.mvn install 在本地repository中安装jar(包含mvn compile,mvn package,然后上传到本地仓库)
4.mvn deploy 上传到私服(包含mvn install,然后,上传到私服)
5.mvn package 打包
6.mvn test 运行测试
7.mvn site 产生site
8.mvn test-compile 编译测试代码
9.mvn -Dtest package 只打包不测试
10.mvn jar:jar 只打jar包
11.mvn test -skipping compile -skipping test-compile 只测试而不编译,也不测试编译
12.mvn deploy
13.mvn source.jar 源码打包
二、把pom文件中配置的依赖jar包打进来,打成一个包:要用maven-assembly-plugin 这个插件,在pom文件加如下配置
1 <build> 2 <plugins> 3 <plugin> 4 <artifactId>maven-compiler-plugin</artifactId> 5 <version>2.3.2</version> 6 <configuration> 7 <source>1.7</source> 8 <target>1.7</target> 9 </configuration> 10 </plugin> 11 <plugin> 12 <artifactId>maven-assembly-plugin</artifactId> 13 <configuration> 14 <appendAssemblyId>false</appendAssemblyId> 15 <descriptorRefs> 16 <descriptorRef>jar-with-dependencies</descriptorRef> 17 </descriptorRefs> 18 </configuration> 19 <executions> 20 <execution> 21 <id>make-assembly</id> 22 <phase>package</phase> 23 <goals> 24 <goal>assembly</goal> 25 </goals> 26 </execution> 27 </executions> 28 </plugin> 29 </plugins> 30 </build>
二、而下面这种配置:在eclipse中,Run as ->Maven build-> install 生成的包,只有该项目自己,<dependencies>里引入的第三方jar并没打进去;
但用package命令,生成项目本身一个jar,还生成一个*-jar-with-dependencies.jar,依赖的jar 都在这个*-jar-with-dependencies.jar包里,项目本身的包还是它自己
1 <build> 2 <plugins> 3 <plugin> 4 <artifactId>maven-compiler-plugin</artifactId> 5 <version>2.3.2</version> 6 <configuration> 7 <source>1.7</source> 8 <target>1.7</target> 9 </configuration> 10 </plugin> 11 <plugin> 12 <artifactId>maven-assembly-plugin</artifactId> 13 <configuration> 14 <descriptorRefs> 15 <descriptorRef>jar-with-dependencies</descriptorRef> 16 </descriptorRefs> 17 </configuration> 18 </plugin> 19 </plugins> 20 </build>
三、如果不想包含依赖的jar包,可以把<build>里面的代码替换成如下code:
1 <!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 --> 2 <plugin> 3 <groupId>org.apache.maven.plugins</groupId> 4 <artifactId>maven-jar-plugin</artifactId> 5 <configuration> 6 <archive> 7 <manifest> 8 <addClasspath>true</addClasspath> 9 <classpathPrefix>lib/</classpathPrefix> 10 <mainClass>com.xxx.uploadFile</mainClass> 11 </manifest> 12 </archive> 13 </configuration> 14 </plugin> 15 <!-- 拷贝依赖的jar包到lib目录 --> 16 <plugin> 17 <groupId>org.apache.maven.plugins</groupId> 18 <artifactId>maven-dependency-plugin</artifactId> 19 <executions> 20 <execution> 21 <id>copy</id> 22 <phase>package</phase> 23 <goals> 24 <goal>copy-dependencies</goal> 25 </goals> 26 <configuration> 27 <outputDirectory> 28 ${project.build.directory}/lib 29 </outputDirectory> 30 </configuration> 31 </execution> 32 </executions> 33 </plugin>
四、只包含部分依赖jar包
如果想只包含部分依赖jar包
比如说,想做一个工具jar包,依赖公共jar和自己本地jar包,本地jar包需要解压成class打到jar包内,而依赖的公共jar包则不需要。
剔除公共jar包 可以用<scope>
<scope>的值的含义:
compile,缺省值,适用于所有阶段,会随着项目一起发布。
provided,类似compile,期望JDK、容器或使用者会提供这个依赖。如servlet.jar。
runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。
test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。
system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。
编译的时候采用 compile
1 <dependency> 2 <groupId>log4j</groupId> 3 <artifactId>log4j</artifactId> 4 <version>1.2.17</version> 5 <scope>complie</scope> 6 <optional>true</optional> 7 </dependency>
在用package打包的时候,改成test,生成的jar包里就不会有该jar包的类了。
1 <dependency> 2 <groupId>log4j</groupId> 3 <artifactId>log4j</artifactId> 4 <version>1.2.17</version> 5 <scope>test</scope> 6 <optional>true</optional> 7 </dependency>