ALL is Well!

          敏捷是一條很長的路,摸索著前進著

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            30 隨筆 :: 23 文章 :: 71 評論 :: 0 Trackbacks

          接上一篇Maven2 學習筆記[5]-構建一個Java Application項目。
          一個一個來處理不符合我們需求的地方。

          在我的博客 學習資源庫 鏈接里,有介紹Maven插件的,對于以下不清楚的插件用法、節點用法,可以去查一下,寫的很明確,而且還有例子。
          我就是在那里一邊看用法,一邊寫pom.xml文件。

          1.問題:在QrtzPrj.jar的同一目錄下并沒有lib文件夾,也沒有依賴的jar包。
          這個問題的解決辦法便是引入Maven的maven-dependency-plugin插件。
          內容如下:(配置在<build> <plugins>...</pulugins></build> 中)

                      <plugin>
                          
          <groupId>org.apache.maven.plugins</groupId>
                          
          <artifactId>maven-dependency-plugin</artifactId>
                          
          <executions>
                              
          <execution>
                                  
          <id>copy-dependencies</id>
                                  
          <phase>package</phase>
                                  
          <goals>
                                      
          <goal>copy-dependencies</goal>
                                  
          </goals>
                                  
          <configuration>
                                      
          <outputDirectory>${project.build.directory}/lib</outputDirectory>
                                      
          <overWriteReleases>false</overWriteReleases>
                                      
          <overWriteSnapshots>false</overWriteSnapshots>
                                      
          <overWriteIfNewer>true</overWriteIfNewer>
                                  
          </configuration>
                              
          </execution>
                          
          </executions>
                      
          </plugin>

          保存pom.xml,再次進行打包。嗯,不錯,lib文件夾產生了,所依賴的jar也都拷貝過去了。

          2.問題:沒有config文件夾及配置文件;且配置文件被打在jar包中了。
          這個問題與第一個問題類似,這次需要引入maven的maven-resources-plugin 插件。
          為了不讓配置文件打在jar中,還需要對maven-jar-plugin 進行一些配置。
          a. maven-jar-plugin的配置內容:(在<plugin><configuration>...</configuration></plugin>中配置)
                              <excludes>
                                  
          <exclude>applicationContext.xml</exclude>
                                  
          <exclude>log4j.xml</exclude>
                                  
          <exclude>jdbc.properties</exclude>
                                  
          <exclude>quartz.properties</exclude>
                                  
          <exclude>sql-map-config.xml</exclude>
                              
          </excludes>

          b. maven-resources-plugin 插件的配置內容如下:
                      <plugin>
                          
          <groupId>org.apache.maven.plugins</groupId>
                          
          <artifactId>maven-resources-plugin</artifactId>
                          
          <version>2.3</version>
                          
          <executions>
                              
          <execution>
                                  
          <id>copy-resources</id>
                                  
          <phase>package</phase>
                                  
          <goals>
                                      
          <goal>copy-resources</goal>
                                  
          </goals>
                                  
          <configuration>
                                      
          <encoding>UTF-8</encoding>
                                      
          <outputDirectory>${project.build.directory}/config</outputDirectory>
                                      
          <resources>
                                          
          <resource>
                                              
          <directory>src/main/resources</directory>
                                              
          <includes>
                                                  
          <include>applicationContext.xml</include>
                                                  
          <include>log4j.xml</include>
                                                  
          <include>jdbc.properties</include>
                                                  
          <include>quartz.properties</include>
                                                  
          <include>sql-map-config.xml</include>
                                              
          </includes>
                                              
          <filtering>true</filtering>
                                          
          </resource>
                                      
          </resources>
                                  
          </configuration>
                              
          </execution>
                          
          </executions>
                      
          </plugin>

          保存pom.xml,再進行打包。
          lib文件夾及依賴包,config文件夾及配置文件都拷貝過去了。再打開QrtzPrj.jar看一下,配置文件沒有被打在其中,很好。
          接下來看其他的問題。

          3.問題:manifest文件完全不是我要求的。
          現在的manifest文件內容如下:
          Manifest-Version: 1.0
          Archiver-Version: Plexus Archiver
          Created-By: Apache Maven
          Built-By: Administrator
          Build-Jdk: 1.6.0_13
          Main-Class: com.jn.common.Main
          Class-Path: aspectjweaver-1.6.6.jar spring-2.5.5.jar commons-logging-1
           .0.4.jar ant-antlr-1.8.1.jar commons-beanutils-1.7.0.jar commons-coll
           ections-3.2.1.jar commons-dbcp-1.3.jar commons-pool-1.5.4.jar commons
           -dbutils-1.2.jar commons-io-1.4.jar commons-lang-2.4.jar commons-net-
           2.0.jar ibatis-2.3.4.726.jar jsonlib-2.3.jar jsontools-core-1.7.jar a
           ntlr-2.7.7.jar log4j-1.2.15.jar mail-1.4.jar activation-1.1.jar jms-1
           .1.jar jmxtools-1.2.1.jar jmxri-1.2.1.jar ezmorph-1.0.6.jar ojdbc-14.
           jar quartz-all-1.8.3.jar slf4j-api-1.5.10.jar slf4j-log4j12-1.5.10.jar

          1)classPath中,每個jar文件前應限定文件夾名,即應該加入 lib/。
          2)config文件夾并沒有被加入到classpath中。
          好,查資料,既然是打包時候manifest文件不滿足要求,當然要看 maven-jar-plugin 插件了。繼續研究它吧。

          a.將 maven-jar-plugin 插件的<manifest>節點修改為:
                                  <manifest>
                                      
          <mainClass>com.jn.common.Main</mainClass>
                                      
          <addClasspath>true</addClasspath>
                                      
          <!-- 追加前綴 -->
                                      
          <classpathPrefix>lib/</classpathPrefix>
                                  
          </manifest>

          b.在<archive>節點內增加以下內容:
                                  <manifestEntries>
                                      
          <Class-Path>config/</Class-Path>
                                  
          </manifestEntries>

          好,保存pom.xml,再進行打包。
          manifest文件變成了:
          Manifest-Version: 1.0
          Archiver-Version: Plexus Archiver
          Created-By: Apache Maven
          Built-By: Administrator
          Build-Jdk: 1.6.0_13
          Main-Class: com.jn.common.Main
          Class-Path: config/ lib/aspectjweaver-1.6.6.jar lib/spring-2.5.5.jar l
           ib/commons-logging-1.0.4.jar lib/ant-antlr-1.8.1.jar lib/commons-bean
           utils-1.7.0.jar lib/commons-collections-3.2.1.jar lib/commons-dbcp-1.
           3.jar lib/commons-pool-1.5.4.jar lib/commons-dbutils-1.2.jar lib/comm
           ons-io-1.4.jar lib/commons-lang-2.4.jar lib/commons-net-2.0.jar lib/i
           batis-2.3.4.726.jar lib/jsonlib-2.3.jar lib/jsontools-core-1.7.jar li
           b/antlr-2.7.7.jar lib/log4j-1.2.15.jar lib/mail-1.4.jar lib/activatio
           n-1.1.jar lib/jms-1.1.jar lib/jmxtools-1.2.1.jar lib/jmxri-1.2.1.jar 
           lib/ezmorph-1.0.6.jar lib/ojdbc-14.jar lib/quartz-all-1.8.3.jar lib/s
           lf4j-api-1.5.10.jar lib/slf4j-log4j12-1.5.10.jar

          good!這次應該沒問題了。準備執行吧!

          4.執行后報錯
          大意就是 iBatis 找不到在 sql-map-client.xml配置的 文件路徑<sqlMap resource="com/jn/persistence/sql/sql.xml" />
          于是我到jar包中去查找 此xml文件,果然沒有。
          這下郁悶了,又查了下資料,還得修改 maven-jar-plugin 插件的配置。
          在<configuration>節點下這樣配置:(bin/是編譯后輸出的路徑)
          <classesDirectory>bin/</classesDirectory>

          好,我再打包試試看。打好后,去看了一下com/jn/persistence/sql 目錄,嗯,good,sql.xml也在了。
          我想這下 java -jar QrtzPrj.jar 可以派上用場了吧。

          5.執行后又報錯
          我當時已經快崩潰了。報的錯誤大意是 無法用 http://maven.apache.org  連接到數據庫。
          嗯,很熟悉的url,它就配置在我們的pom.xml中<project>節點內:
          <url>http://maven.apache.org</url>

          大概知道了原因,jdbc.properties文件 和 applicationContext.xml文件有placeholder的操作。
          好吧,我把jdbc.properties里配置的 url=jdbc:oracle:thin:@localhost:1521:root 修改一下,把url改成dburl,相應的 applicationContext.xml 里也改一下。
          (也許這里可以不向maven妥協,希望高人能指點一下,可以讓maven打包時不做這樣的替換。)
          再執行,終于OK了。
          我感嘆:maven 打包做的事情還真多啊!!

          最后附上我的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.jn</groupId>
              
          <artifactId>QrtzPrj</artifactId>
              
          <version>1.0</version>
              
          <packaging>jar</packaging>
              
          <name>QrtzPrj</name>
              
          <url>http://maven.apache.org</url>
              
          <properties>
                  
          <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
              
          </properties>
              
          <build>
                  
          <!-- 指定生成jar包的名稱 -->
                  
          <finalName>QrtzPrj</finalName>
                  
          <plugins>
                      
          <plugin>
                          
          <groupId>org.apache.maven.plugins</groupId>
                          
          <artifactId>maven-compiler-plugin</artifactId>
                          
          <configuration>
                              
          <source>1.6</source>
                              
          <target>1.6</target>
                          
          </configuration>
                      
          </plugin>
                      
          <plugin>
                          
          <groupId>org.apache.maven.plugins</groupId>
                          
          <artifactId>maven-dependency-plugin</artifactId>
                          
          <executions>
                              
          <execution>
                                  
          <id>copy-dependencies</id>
                                  
          <phase>package</phase>
                                  
          <goals>
                                      
          <goal>copy-dependencies</goal>
                                  
          </goals>
                                  
          <configuration>
                                      
          <outputDirectory>${project.build.directory}/lib</outputDirectory>
                                      
          <overWriteReleases>false</overWriteReleases>
                                      
          <overWriteSnapshots>false</overWriteSnapshots>
                                      
          <overWriteIfNewer>true</overWriteIfNewer>
                                  
          </configuration>
                              
          </execution>
                          
          </executions>
                      
          </plugin>
                      
          <plugin>
                          
          <groupId>org.apache.maven.plugins</groupId>
                          
          <artifactId>maven-resources-plugin</artifactId>
                          
          <version>2.3</version>
                          
          <executions>
                              
          <execution>
                                  
          <id>copy-resources</id>
                                  
          <phase>package</phase>
                                  
          <goals>
                                      
          <goal>copy-resources</goal>
                                  
          </goals>
                                  
          <configuration>
                                      
          <encoding>UTF-8</encoding>
                                      
          <outputDirectory>${project.build.directory}/config</outputDirectory>
                                      
          <resources>
                                          
          <resource>
                                              
          <directory>src/main/resources</directory>
                                              
          <includes>
                                                  
          <include>applicationContext.xml</include>
                                                  
          <include>log4j.xml</include>
                                                  
          <include>jdbc.properties</include>
                                                  
          <include>quartz.properties</include>
                                                  
          <include>sql-map-config.xml</include>
                                              
          </includes>
                                              
          <filtering>true</filtering>
                                          
          </resource>
                                      
          </resources>
                                  
          </configuration>
                              
          </execution>
                          
          </executions>
                      
          </plugin>
                      
          <plugin>
                          
          <groupId>org.apache.maven.plugins</groupId>
                          
          <artifactId>maven-jar-plugin</artifactId>
                          
          <goals>
                              
          <goal>jar</goal>
                          
          </goals>
                          
          <configuration>
                              
          <classesDirectory>bin/</classesDirectory>
                              
          <archive>
                                  
          <manifest>
                                      
          <mainClass>com.jn.common.Main</mainClass>
                                      
          <addClasspath>true</addClasspath>
                                      
          <!-- 追加前綴 -->
                                      
          <classpathPrefix>lib/</classpathPrefix>
                                  
          </manifest>
                                  
          <manifestEntries>
                                      
          <Class-Path>config/</Class-Path>
                                  
          </manifestEntries>
                              
          </archive>
                              
          <excludes>
                                  
          <exclude>applicationContext.xml</exclude>
                                  
          <exclude>log4j.xml</exclude>
                                  
          <exclude>jdbc.properties</exclude>
                                  
          <exclude>quartz.properties</exclude>
                                  
          <exclude>sql-map-config.xml</exclude>
                              
          </excludes>
                          
          </configuration>
                      
          </plugin>
                      
          <plugin>
                          
          <groupId>org.apache.maven.plugins</groupId>
                          
          <artifactId>maven-surefire-plugin</artifactId>
                          
          <configuration>
                              
          <testFailureIgnore>true</testFailureIgnore>
                          
          </configuration>
                      
          </plugin>
                      
          <plugin>
                          
          <artifactId>maven-assembly-plugin</artifactId>
                          
          <configuration>
                              
          <descriptorRefs>
                                  
          <descriptorRef>jar-with-dependencies</descriptorRef>
                              
          </descriptorRefs>
                          
          </configuration>
                      
          </plugin>
                  
          </plugins>
                  
          <resources>
                      
          <resource>
                          
          <directory>src/main/resources</directory>
                      
          </resource>
                  
          </resources>
              
          </build>
              
          <dependencies>
                  
          <dependency>
                      
          <groupId>org.aspectj</groupId>
                      
          <artifactId>aspectjweaver</artifactId>
                      
          <version>1.6.6</version>
                  
          </dependency>
                  
          <dependency>
                      
          <groupId>org.springframework</groupId>
                      
          <artifactId>spring</artifactId>
                      
          <version>2.5.5</version>
                  
          </dependency>
                  
          <dependency>
                      
          <groupId>org.apache.ant</groupId>
                      
          <artifactId>ant-antlr</artifactId>
                      
          <version>1.8.1</version>
                  
          </dependency>
                  
          <dependency>
                      
          <groupId>commons-beanutils</groupId>
                      
          <artifactId>commons-beanutils</artifactId>
                      
          <version>1.7.0</version>
                  
          </dependency>
                  
          <dependency>
                      
          <groupId>commons-collections</groupId>
                      
          <artifactId>commons-collections</artifactId>
                      
          <version>3.2.1</version>
                  
          </dependency>
                  
          <dependency>
                      
          <groupId>commons-dbcp</groupId>
                      
          <artifactId>commons-dbcp</artifactId>
                      
          <version>1.3</version>
                  
          </dependency>
                  
          <dependency>
                      
          <groupId>commons-dbutils</groupId>
                      
          <artifactId>commons-dbutils</artifactId>
                      
          <version>1.2</version>
                  
          </dependency>
                  
          <dependency>
                      
          <groupId>commons-io</groupId>
                      
          <artifactId>commons-io</artifactId>
                      
          <version>1.4</version>
                  
          </dependency>
                  
          <dependency>
                      
          <groupId>commons-lang</groupId>
                      
          <artifactId>commons-lang</artifactId>
                      
          <version>2.4</version>
                  
          </dependency>
                  
          <dependency>
                      
          <groupId>commons-logging</groupId>
                      
          <artifactId>commons-logging</artifactId>
                      
          <version>1.0.4</version>
                  
          </dependency>
                  
          <dependency>
                      
          <groupId>commons-net</groupId>
                      
          <artifactId>commons-net</artifactId>
                      
          <version>2.0</version>
                  
          </dependency>
                  
          <dependency>
                      
          <groupId>commons-pool</groupId>
                      
          <artifactId>commons-pool</artifactId>
                      
          <version>1.5.4</version>
                  
          </dependency>
                  
          <dependency>
                      
          <groupId>ibatis</groupId>
                      
          <artifactId>ibatis</artifactId>
                      
          <version>2.3.4.726</version>
                  
          </dependency>
                  
          <dependency>
                      
          <groupId>jsonlib</groupId>
                      
          <artifactId>jsonlib</artifactId>
                      
          <version>2.3</version>
                  
          </dependency>
                  
          <dependency>
                      
          <groupId>com.sdicons.jsontools</groupId>
                      
          <artifactId>jsontools-core</artifactId>
                      
          <version>1.7</version>
                  
          </dependency>
                  
          <dependency>
                      
          <groupId>log4j</groupId>
                      
          <artifactId>log4j</artifactId>
                      
          <version>1.2.15</version>
                  
          </dependency>
                  
          <dependency>
                      
          <groupId>net.sf.ezmorph</groupId>
                      
          <artifactId>ezmorph</artifactId>
                      
          <version>1.0.6</version>
                  
          </dependency>
                  
          <dependency>
                      
          <groupId>ojdbc</groupId>
                      
          <artifactId>ojdbc</artifactId>
                      
          <version>14</version>
                  
          </dependency>
                  
          <dependency>
                      
          <groupId>org.quartz-scheduler</groupId>
                      
          <artifactId>quartz-all</artifactId>
                      
          <version>1.8.3</version>
                  
          </dependency>
                  
          <dependency>
                      
          <groupId>org.slf4j</groupId>
                      
          <artifactId>slf4j-api</artifactId>
                      
          <version>1.5.10</version>
                  
          </dependency>
                  
          <dependency>
                      
          <groupId>org.slf4j</groupId>
                      
          <artifactId>slf4j-log4j12</artifactId>
                      
          <version>1.5.10</version>
                  
          </dependency>
              
          </dependencies>
          </project>


          本文為原創,歡迎轉載,轉載請注明出處BlogJava
          posted on 2010-09-04 11:37 李 明 閱讀(1766) 評論(0)  編輯  收藏 所屬分類: Maven2
          主站蜘蛛池模板: 阿克陶县| 淮北市| 高邑县| 会昌县| 连江县| 齐河县| 通道| 酉阳| 亚东县| 信宜市| 周口市| 安泽县| 阜新| 云浮市| 涿州市| 云龙县| 黄浦区| 鄯善县| 舒兰市| 大方县| 红桥区| 建瓯市| 东平县| 华坪县| 民和| 临清市| 五峰| 南开区| 太和县| 高淳县| 靖安县| 咸宁市| 年辖:市辖区| 隆化县| 武清区| 达日县| 雷山县| 闸北区| 崇文区| 开远市| 萝北县|