Maven教程
▪ mvn archetype:generate 创建Maven项目
▪ mvn compile 编译源代码
▪ mvn deploy 发布项目
▪ mvn test-compile 编译测试源代码
▪ mvn test 运行应用程序中的单元测试
▪ mvn site 生成项目相关信息的网站
▪ mvn clean 清除项目目录中的生成结果
▪ mvn package 根据项目生成的jar
▪ mvn install 在本地Repository中安装jar
▪ mvn eclipse:eclipse 生成eclipse项目文件
▪ mvnjetty:run 启动jetty服务
▪ mvntomcat:run 启动tomcat服务
▪ mvn clean package -Dmaven.test.skip=true:清除以前的包后重新打包,跳过测试类
⒈ 把pom文件中配置的依赖jar包打进来,打成一个包:要用maven-assembly-plugin 这个插件,在pom文件加如下配置
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<appendAssemblyId>false</appendAssemblyId>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>assembly</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
⒉ 而下面这种配置:在eclipse中,Run as ->Maven build-> install 生成的包,只有该项目自己,<dependencies>里引入的第三方jar并没打进去;
但用package命令,生成项目本身一个jar,还生成一个*-jar-with-dependencies.jar,依赖的jar 都在这个*-jar-with-dependencies.jar包里,项目本身的包还是它自己
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</plugin>
</plugins>
</build>
⒊ 如果不想包含依赖的jar包,可以把<build>里面的代码替换成如下code:
<!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.xxx.uploadFile</mainClass>
</manifest>
</archive>
</configuration>
</plugin>
<!-- 拷贝依赖的jar包到lib目录 -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>copy</id>
<phase>package</phase>
<goals>
<goal>copy-dependencies</goal>
</goals>
<configuration>
<outputDirectory>
${project.build.directory}/lib
</outputDirectory>
</configuration>
</execution>
</executions>
</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
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
<scope>complie</scope>
<optional>true</optional>
</dependency>
在用package打包的时候,改成test,生成的jar包里就不会有该jar包的类了。
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
<scope>test</scope>
<optional>true</optional>
</dependency>