一、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>