qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          maven3實戰之maven使用入門(打包和運行)

          maven3實戰之maven使用入門(打包和運行)

          ----------

           

          將項目進行編譯,測試之后,下一個重要步驟就是打包。pom.xml中如果沒有指定打包類型,默認打包類型為:jar。我們可以簡單地執行命令打包: mvn clean pachage

          類似地,maven會在打包之前執行編譯,測試等操作。如以打jar包為例,jar:jar任務負責打包,實際上就是jar插件的jar目標將項目主代碼打包成一個名為xxxxxx-1.0-SNAPSHOT.jar的文件。該文件也位于target/輸出目錄中,它是根據artifact-version.jar的規則進行命名的,如有需要,還可以使用finalName來自定義該文件的名稱,這里暫且不展開,后面會詳細解釋。

          在打包之后,又執行了安裝任務install:install。從輸出可以看到任務將項目輸出的jar安裝到了maven本地倉庫中,可以打開相應的文件夾看到項目的pom和jar。之前我們說只有構件被下載到本地倉庫后,才能由所有Maven項目使用,這里同樣的道理,只有將自己編寫的項目安裝到本地倉庫之后,其他maven項目才能使用它。

          我們已經體驗了maven最主要的命令:mvn clean compile,mvn clean test,mvn clean package,mvn clean install。執行test之前是會先執行compile的,執行package之前是會先執行test的,而類似地,install之前會執行package。可以在任何一個maven項目中執行這些命令。

          默認打包是生成jar的,如果我的項目還有main方法的,我想打包成可執行的jar包,為了生成可執行的jar文件,需要借助maven-shade-plugin,配置該插件如下:

           

           

          Xml代碼  收藏代碼
          1. <plugin>  
          2.     <groupId>org.apache.maven.plugins</groupId>  
          3.     <artifactId>maven-shade-plugin</artifactId>  
          4.     <version>1.2.1</version>  
          5.     <executions>  
          6.         <execution>  
          7.             <phase>package</phase>  
          8.             <goals>  
          9.                 <goal>shade</goal>  
          10.             </goals>  
          11.             <configuration>  
          12.                 <transformers>  
          13.                     <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">  
          14.                         <mainClass>com.juvenxu.mvnbook.helloworld.HelloWorld</mainClass>  
          15.                     </transformer>  
          16.                 </transformers>  
          17.             </configuration>  
          18.         </execution>  
          19.     </executions>  
          20. </plugin>  

           

           

          默認打包生成jar是不能夠直接運行的,因為帶有main方法的類信息不會添加到manifest中(打開jar文件中的META-INF/MANIFEST.MF文件,將無法看到Main-Class一行)。

          plugin元素在POM中的相對位置應該在<project><build><plugins>下面。我們配置了mainClass為com.juvenxu.mvnbook.helloworld.HelloWorld,項目在打包時會將該信息放到MANIFEST中。現在執行mvn clean install,待構建完成之后打開target/目錄,可以看到hello-world-1.0-SNAPSHOT.jar和original-hello-world-1.0-SNAPSHOT.jar,前者是帶有Main-Class信息的可執行jar,后者是原始的jar,打開hello-world-1.0-SNAPSHOT.jar的META-INF/MANIFEST.MF,可以看到它包含這樣一行信息:

          Main-Class:com.juvenxu.mvnbook.helloworld.HelloWorld

          現在,在項目根目錄中執行該jar文件:

          D:\code\hello-world > java-jar target\hello-world-1.0-SNAPSHOT.jar,可以得到正確的輸出了。

          1:創建名為:helloword的maven項目

          2:/helloword/src/main/java下建立package包hello,在包下建類SayHello

          package hello;

          public class SayHello {

              public String sayhello() {
                  System.out.println("hello............is anybody here...");
                  return "dddddddddddddddddddddddddd";
              }

              public static void main(String[] arg) {
                  System.out.println(new SayHello().sayhello());
              }
          }
          3:/helloword/src/test/java下建立test包,在test包下建HelloWordTest類

          package test;

          import hello.SayHello;
          import junit.framework.Assert;
          import junit.framework.TestCase;

          public class HelloWordTest extends TestCase {

              public HelloWordTest(String name) {
                  super(name);
              }
                protected void setUp() {                                         //進行初始化的任務
                      
                    }
              /**
               * @param args
               */
              public void testSayHello()
              {
                  SayHello s = new SayHello();
                  String r = s.sayhello();
                  Assert.assertEquals("dddddddddddddddddddddddddd", r);
              }
          }

          4:pom.xml配置

          <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
            <modelVersion>4.0.0</modelVersion>
            <groupId>com.houwen.test</groupId>
            <artifactId>helloword</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <name>Maven Helloword</name>

          <!--junit依賴是為tset準備,配置后,記得install,把依賴包嵌入resourse內,-->
             <dependencies>
              <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>3.8.1</version>
                <scope>test</scope>
              </dependency>
              </dependencies>
                  <build>

          <!--maven-shade-plugin

          而要得到一個可以直接在命令行通過java命令運行的JAR文件,還要滿足兩個條件:
            JAR包中的/META-INF/MANIFEST.MF元數據文件必須包含Main-Class信息。

          Maven有好幾個插件能幫助用戶完成上述任務,不過用起來最方便的還是maven-shade-plugin,它可以讓用戶配置Main-Class的值,然后在打包的時候將值填入/META-INF/MANIFEST.MF文件。關于項目的依賴,它很聰明地將依賴JAR文件全部解壓后,再將得到的.class文件連同當前項目的.class文件一起合并到最終的CLI包中,這樣,在執行CLI JAR文件的時候,所有需要的類就都在Classpath中了。下面是一個配置樣例:

          -->
                  <plugins>
                  <plugin>
                     <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-shade-plugin</artifactId>
                     <version>1.2.1</version>
                     <executions>
                                <execution>
                         <phase>package</phase>
                         <goals>
                               <goal>shade</goal>
                         </goals>
                         <configuration>
                               <transformers>
                                 <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                  <mainClass>hello.SayHello</mainClass>
                                </transformer>
                               </transformers>
                         </configuration>
                          </execution>
                     </executions>
                  </plugin>
                  </plugins>
              </build>
          </project>


          4.1上述例子中的,運行maven package后

          我的Main-Class是hello.SayHello,構建完成后,對應于一個常規的helloword-0.0.1-SNAPSHOT.jar文件,我還得到了一個original-helloword-0.0.1-SNAPSHOT.jar文件。最后,我可以通過helloword-0.0.1-SNAPSHOT.jar命令運行程序。

          4.2之后再運行maven install,把生成的jar打入到本地的maven倉庫,可以在C:\Documents and Settings\hcen\.m2\repository\com\houwen\test\helloword\0.0.1-SNAPSHOT

          找到helloword-0.0.1-SNAPSHOT.jar

          5.最后,我可以通過java -jar  (jar包路徑)/helloword-0.0.1-SNAPSHOT.jar命令運行程序。

          用Maven生成一個包孕所有依賴jar包的可執行的jar包


          create an executable jar with dependencies using Maven:

          using plugin - onejar-maven-plugin. Example below (mvn package build jar):

          <plugin>
               <groupId>org.dstovall</groupId>
               <artifactId>onejar-maven-plugin</artifactId>
               <version>1.3.0</version>
               <executions>
                     <execution>
                        <configuration>
                            <mainClass>com.company.MainClass</mainClass>
                        </configuration>
                        <goals>
                            <goal>one-jar</goal>
                        </goals>
                     </execution>
               </executions>
          </plugin>
          


          You need to add repository for that plugin:

          <pluginRepositories>
               <pluginRepository>
                     <id>onejar-maven-plugin.googlecode.com</id>
                     <url>http://onejar-maven-plugin.googlecode.com/svn/mavenrepo</url>
               </pluginRepository>
          </pluginRepositories>


          posted on 2014-03-11 17:30 順其自然EVO 閱讀(100535) 評論(0)  編輯  收藏 所屬分類: maven

          <2025年6月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 四子王旗| 枣阳市| 灵川县| 准格尔旗| 光泽县| 巴马| 新和县| 胶州市| 左权县| 扶绥县| 瑞昌市| 原阳县| 和田县| 张家口市| 彭州市| 福海县| 贵港市| 佛冈县| 南澳县| 衡阳市| 黄山市| 隆尧县| 衡山县| 若尔盖县| 延安市| 洛南县| 宝鸡市| 宜州市| 凌云县| 郑州市| 同江市| 凤翔县| 南京市| 房产| 贵阳市| 梨树县| 沾化县| 兴义市| 旅游| 洪泽县| 龙川县|