maven常用插件pom配置


一、問題描述:

部署一個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>  
                <!-- ${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>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM