<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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 閱讀(100529) 評論(0)  編輯  收藏 所屬分類: maven

    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费在线观看黄网站| 日韩视频在线免费| 亚洲欧洲国产精品香蕉网| 黄色一级毛片免费看| 少妇亚洲免费精品| 日日狠狠久久偷偷色综合免费| 又大又黄又粗又爽的免费视频| 美女视频黄a视频全免费网站一区 美女视频黄a视频全免费网站色 | 亚洲熟妇无码一区二区三区| 三年片在线观看免费大全| 国产亚洲福利在线视频| 精品剧情v国产在免费线观看| 苍井空亚洲精品AA片在线播放| 日本无卡码免费一区二区三区| 免费精品国产自产拍在线观看| 亚洲国产精品一区二区第四页| 国产精品hd免费观看| 水蜜桃亚洲一二三四在线| 亚洲香蕉免费有线视频| 亚洲综合色婷婷在线观看| 国产乱子影视频上线免费观看| yellow免费网站| 亚洲色图在线观看| 国产情侣激情在线视频免费看| 亚洲国产高清国产拍精品| 久久久久亚洲?V成人无码| 国产在线观看免费视频软件| 亚洲国产成人资源在线软件| 精品国产麻豆免费网站| a免费毛片在线播放| 亚洲欧洲国产日韩精品| 精品国产免费观看| 野花香高清在线观看视频播放免费 | 亚洲成AV人片在线观看无| 7723日本高清完整版免费| 视频一区在线免费观看| 亚洲av女电影网| 精品国产免费观看久久久| 久操免费在线观看| 国产精品亚洲一区二区三区久久| 亚洲精品高清无码视频|