maven常用插件pom配置

xiaoxiao2021-02-28  37

一、问题描述:

部署一个maven打包项目时,jar包,依赖lib包全部手动上传至服务器,然后用maven部署报错:Exception in thread "main" java.lang.NoClassDefFoundError:,当时心想可能是依赖的lib包有问题,各种重新部署(以为是依赖的包没有更新),确忽略了一个大问题:pom.xml没仔细检查。解决方法:最终发现<plugin>                <groupId>org.apache.maven.plugins</groupId>                <artifactId>maven-jar-plugin</artifactId>                <version>2.4</version>                <configuration>                    <archive>                        <manifest>                            <addClasspath>true</addClasspath>                            <classpathPrefix>lib/</classpathPrefix>                            <mainClass>com.bj58.finance.EntryMain</mainClass>                        </manifest>                    </archive>                </configuration>            </plugin>,这一段被注释了......直接导致依赖的jar包完全没有被添加进MANIFEST.MF(jar包解压缩后:jar包名/META-INF/MANIFEST.MF)的Class-Path。所以最终运行代码时,只要是依赖别的jar包的类就会报错,找不到类。这里涉及到MANIFEST.MF相关,详情请看传送门。

二、这里就涉及Maven常用插件pom.xml中的配置了。特此收集常用配置如下:

1.根据项目类型打包:jar/war打包插件。

首先看<packaging>jar</packing>属性,主流就2种类型。

打成jar包插件:

<plugin>    <groupId>org.apache.maven.plugins</groupId>    <artifactId>maven-jar-plugin</artifactId>    <version>2.4</version>    <configuration>        <archive>            <manifest>                <addClasspath>true</addClasspath>                <classpathPrefix>lib/</classpathPrefix>                <mainClass>com.*.MainClass</mainClass>            </manifest>        </archive>    </configuration></plugin>

打成war包插件:

<plugin>    <groupId>org.apache.maven.plugins</groupId>    <artifactId>maven-war-plugin</artifactId>    <version>2.1.1</version>    <configuration>      <webResources>        <resource>          <directory>src/main/webapp</directory>          <excludes>            <exclude>**/*.jpg</exclude>          </excludes>        </resource>      </webResources>    </configuration>  </plugin>

2. 编译插件

全局属性:源码编码为utf-8

<properties>        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>    </properties>

 

<plugin>    <artifactId>maven-compiler-plugin</artifactId>    <version>2.3.2</version>    <configuration>        <source>1.6</source>//源代码编译版本        <target>1.6</target>//目标平台编译版本        <includes>            <include>**/*.java</include>        </includes>

        <encoding>${project.build.sourceEncoding}</encoding>//字符集编码,这里引用全局属性    </configuration></plugin>

3.拷贝依赖jar包至target/lib下

<plugin>      <groupId>org.apache.maven.plugins</groupId>      <artifactId>maven-dependency-plugin</artifactId>      <version>2.6</version>      <executions>          <execution>              <id>copy-dependencies</id>              <phase>compile</phase>              <goals>                  <goal>copy-dependencies</goal>              </goals>              <configuration>                  <!-- [Math Processing Error]project.build.directory为Maven内置变量,缺省为target−−><outputDirectory>{project.build.directory}/lib</outputDirectory>                  <!-- 表示是否不包含间接依赖的包 -->                  <excludeTransitive>false</excludeTransitive>                  <!-- 表示复制的jar文件去掉版本信息 -->                  <stripVersion>false</stripVersion>              </configuration>          </execution>      </executions>  </plugin>

4.描述打包插件

它支持各种打包文件格式,包括zip、tar.gz、tar.bz2等等

执行mvn assembly:assembly, 执行成功后会在target文件夹下多出一个以-jar-with-dependencies结尾的JAR包. 这个JAR包就包含了项目所依赖的所有JAR的CLASS.

<plugin>    <groupId>org.apache.maven.plugins</groupId>    <artifactId>maven-assembly-plugin</artifactId>    <version>2.2.1</version>    <configuration>      <descriptors>        <descriptor>src/main/assembly/assembly.xml</descriptor>      </descriptors>

  <descriptorRefs>        <descriptorRef>jar-with-dependencies</descriptorRef>//把依赖的jar包一起打包      </descriptorRefs>    </configuration>    <executions>      <execution>        <id>make-assembly</id>        <phase>package</phase>        <goals>          <goal>single</goal>        </goals>      </execution>    </executions></plugin>

5.maven跳过测试用例插件

maven-surefire-plugin 是maven里执行测试用例的插件,不显示配置就会用默认配置。这个插件的 surefire:test 命令会默认绑定maven执行的 test 阶段。

<plugin>    <groupId>org.apache.maven.plugins</groupId>    <artifactId>maven-surefire-plugin</artifactId>    <version>2.19</version>    <dependencies>        <dependency>            <groupId>org.apache.maven.surefire</groupId>            <artifactId>surefire-junit47</artifactId>            <version>2.19</version>        </dependency>    </dependencies>    <configuration>        <skipTests>true</skipTests>//跳过测试用例    </configuration></plugin>

6.maven自动build插件

<pluginManagement>    <plugins>        <plugin>            <groupId>org.eclipse.m2e</groupId>            <artifactId>lifecycle-mapping</artifactId>            <version>1.0.0</version>            <configuration>                <lifecycleMappingMetadata>                    <pluginExecutions>                        <pluginExecution>                            <pluginExecutionFilter>                                <groupId>org.apache.maven.plugins</groupId>                                <artifactId>maven-dependency-plugin</artifactId>                                <versionRange>[2.0,)</versionRange>                                <goals>                                    <goal>copy-dependencies</goal>                                </goals>                            </pluginExecutionFilter>                            <action>                                <ignore/>                            </action>                        </pluginExecution>                        <pluginExecution>                            <pluginExecutionFilter>                                <groupId>org.codehaus.mojo</groupId>                                <artifactId>aspectj-maven-plugin</artifactId>                                <versionRange>[1.0,)</versionRange>                                <goals>                                    <goal>test-compile</goal>                                    <goal>compile</goal>                                </goals>                            </pluginExecutionFilter>                            <action>                                <ignore/>                            </action>                        </pluginExecution>                    </pluginExecutions>                </lifecycleMappingMetadata>            </configuration>        </plugin>    </plugins></pluginManagement>

转载请注明原文地址: https://www.6miu.com/read-2621832.html

最新回复(0)