PIXNET Logo登入

Jemmy Walker

跳到主文

部落格全站分類:

  • 相簿
  • 部落格
  • 留言
  • 名片
  • 12月 01 週三 201015:35
  • Ant generate manifest.mf的class-path清單

  在想移blog後,是不是要依抽象類別來分,如Maven、Ant甚至Git放到CM,Regex也包括Shell Script。臨時支援他人寫的程式,跳過Ant直接接觸Maven的我,注記一下Ant在manifest.mf生成dependency jar list的方法。 原來的Ant Script摘錄如下:

<target name="build" depends="compile" description="Compile and generate jar">
    <jar destfile="${dist.dir}/compare.jar" compress="true" basedir="${temp.dir}">
    <manifest>
        <attribute name="Main-Class" value="${mainclass}"/>
        <attribute name="Class-Path" value="lib\commons-collections.jar lib\commons-pool.jar lib\commons-dbcp.jar lib\ojdbc14.jar lib\nls_charset12.jar lib\jdom.jar lib\log4j-1.2.12.jar"/>
    </manifest>
    </jar>
    <copy todir="${dist.dir}" preservelastmodified="true">
        <fileset dir="${source.dir}" includes="config.xml,run.bat" />
    </copy>
    <copy todir="${dist.dir}/lib" preservelastmodified="true">
        <fileset dir="${lib.dir}" includes="*.jar" />
    </copy>
</target>

  如上述片段紅字,設定manifest.mf時,Class-Path後跟著是hard code。再擴充的話,就什麼都要加。若要改成自動讀lib目錄裡所有jar,如下: <attribute name="Class-Path" value="${libs.project}" />   那libs.project的property該如何設置,得在build.xml裡增加以下內容:

<pathconvert property="libs.project" pathsep=" ">
    <mapper>
        <chainedmapper>
            <!-- remove absolute path –>
            <flattenmapper />
            <!-- add lib/ prefix –>
            <globmapper from="*" to="lib/*" />
        </chainedmapper>
    </mapper>
    <path>
        <!-- lib.dir contains all jar files, in several subdirectories –>
        <fileset dir="${lib.dir}">
            <include name="**/*.jar" />
        </fileset>
    </path>
</pathconvert>

  看來設定似乎更累贅,但從英文注釋可以推敲是做什麼目的,設定一次就不擔心hard code拖累。Maven在export jar的manifest.mf也是如出一轍的複雜。
(繼續閱讀...)
文章標籤

Jemmy 發表在 痞客邦 留言(0) 人氣(511)

  • 個人分類:Maven
▲top
  • 9月 03 週五 201015:12
  • 原本可以用的pom.xml出現Missing artifact的issue

  這事發生在我用PC自svn下載之前開發的東東所遇,而到Maven Repository URL去看,其實都有這些jar,但在local裡卻沒下載到,以aspectj-1.6.9為例,只有aspectj-1.6.9.jar.lastUpdated和aspectj-1.6.9.pom.lastUpdated而已.後來直接刪除這個1.6.9目錄再對project clean就下載成功.後來去看了lastUpdated內容,如下: #Last modified on: Fri Sep 03 14:24:24 CST 2010
#Fri Sep 03 14:24:24 CST 2010
http\://localhost\:8081/nexus/content/groups/public=1283495064734   應該是我在PC有安裝Nexus Server作為Local Repository有關.   剛同事問我說Maven用的人多嗎?其實在台灣看來真的不多,有時像Regex一樣,好用但真正會用的不多.對我最近常當獨行俠開發者而言,像多請一個人幫你寫程式,只是還是一個人--囧.似乎是今年開始,我能體會過去朋友所說的,欠缺革命情感的team member開發.以前就了解這個孤寂,但到今年才領受到,也算待我不薄了.
(繼續閱讀...)
文章標籤

Jemmy 發表在 痞客邦 留言(0) 人氣(613)

  • 個人分類:Maven
▲top
  • 7月 20 週二 201022:57
  • Maven排除特定class來mvn package

  看來我對Maven的<build>的<plugin>的來龍去脈還不甚了解,它應該是源自這個repository:http://repo2.maven.org/maven2/org/apache/maven/plugins/。所以maven-compiler-plugin、maven-jar-plugin等都可以應對到這repostiry的出處。   在包成Jar釋給客戶端時,想把不會用到的java檔予以排除編譯之外。其實一開始我就想錯了,真正目的想把不要用到的class不包成jar。所以maven-compiler-plugin是針對*.java的處理,本來預設包成jar時就不會把原始檔放進去,若在<configuration>裡放了<excludes>來排除特定的原始檔,反而把未排除的原始檔包進jar裡,或者在<resources>設定亦同。所以要用maven-jar-plugin來排除特定的class:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.3.1</version>
    <configuration>
        <excludes>
            <exclude>**/Test*.class</exclude>
        </excludes>
    </configuration>
</plugin>

(繼續閱讀...)
文章標籤

Jemmy 發表在 痞客邦 留言(0) 人氣(787)

  • 個人分類:Maven
▲top
  • 7月 18 週日 201010:40
  • Maven額外載入或排除Resources

  在包成Jar或war檔時,如何指定加入或排除額外的檔案,如配置檔、圖檔等。在pom.xml設定如下:

<build>
    ...
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <excludes>
                <exclude>*.jpg</exclude>
                <exclude>resources.xml</exclude>
            </excludes>
        </resource>
    </resources>
    ...
</build>

  在<resource>標籤下可透過<includes>和<excludes>做載入或排除額外的資源檔。
(繼續閱讀...)
文章標籤

Jemmy 發表在 痞客邦 留言(0) 人氣(171)

  • 個人分類:Maven
▲top
  • 7月 01 週四 201015:30
  • Eclipse 3.6 Helios無法執行M2Eclipse之解

  這是個有時效期限的資訊。最新版Eclipse 3.6,代號Helios-希臘神話的太陽神,無法啟動M2Eclipse插件。經由http://permalink.gmane.org/gmane.comp.ide.eclipse.plugins.m2eclipse.user/5898查知,Sonatype會釋出相容於Eclipse 3.6的0.10.2版,目前只釋出核心插件,在安裝好0.10.0後,再安裝https://repository.sonatype.org/content/repositories/forge-sites/m2e/0.10.2/S/0.10.2.20100623-1649/,就能正常在Helio下執行M2Eclipse了。
(繼續閱讀...)
文章標籤

Jemmy 發表在 痞客邦 留言(0) 人氣(91)

  • 個人分類:Maven
▲top
  • 6月 28 週一 201022:52
  • Maven包Jar設定MANIFEST.MF

  在用第三方的jar時,之前很笨在.m2的repository目錄下手動建置groupId子目錄,其實有現成的語法可以把local的jar檔更新至repository。語法如下: mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>   這樣在mvn package或mvn install時就不會找不到3rd的jar而無法打包。接著如何設定Jar的MANIFEST.MF,指定Main Class以及把reference的jar全部copy出來。可參考如下pom.xml設定:

<project>
    ...
    <build>
        <finalName>Foo</finalName>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                   <source>1.5</source>
                   <target>1.5</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.foo.bar.MainClass</mainClass> <!-- 指定MANIFEST.MF的Main Class -->
                            <classpathPrefix>lib/</classpathPrefix>      <!-- 指定MANIFEST.MF的Class Path的前置 -->
                            <addClasspath>true</addClasspath>            <!-- 指定
MANIFEST.MF的Class Path -->
                        </manifest>
                        <manifestEntries>
                            <mode>development</mode>
                            <url>${pom.url}</url>
                        </manifestEntries>
                    </archive>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <id>copy</id>
                        <phase>install</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>

                            <!-- Copy相依Jar檔至/target目錄下的lib目錄,也與上述的classpathPrefix標籤相符 -->
                            <outputDirectory>${project.build.directory}/lib</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    ...
</project>

(繼續閱讀...)
文章標籤

Jemmy 發表在 痞客邦 留言(0) 人氣(1,922)

  • 個人分類:Maven
▲top
  • 6月 08 週二 201023:22
  • CORBA的Maven設定

  想不到因為專案關係,接觸可能會派上用場的CORBA。CORBA是跨語言的元件模型,底蘊還摸不清楚,先記下如何使用Maven操作CORBA。

module ChinaApp 
{ 
    interface China 
    { 
        string MorningChina(); 
    }; 
};

  上面是CORBA的IDL語言檔,檔名China.idl,再用Java裡提供的IDLJ(舊版叫IDLtoJava)去進行Code Generate,可以在command line下idlj China.idl,執行後產出以module為名的目錄及五個java檔,若是idlj -fall -oldImplBase China.idl,則會多產出一個_ChinaImplBase.java檔。   而到Maven的建置如下:

<project>
   ...
   <build>
     <plugins>
        <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>idlj-maven-plugin</artifactId>
                <executions>
                        <execution>
                                <goals>
                                        <goal>generate</goal>
                                </goals>
                        </execution>
                </executions>
                <configuration>
                        <compiler>idlj</compiler>
                        <sources>
                                <source>
                                        <includes>
                                                <include>YOUR_IDL_FILE.idl</include>
                                        </includes>
                                        <emitStubs>true</emitStubs>
                                        <emitSkeletons>true</emitSkeletons>
                                </source>
                        </sources>
                </configuration>
        </plugin>
     </plugins>
   <build>
   ...
</project>
 

  在src/main下新增一個idl子目錄,而<include>標籤涵蓋的IDL檔則放進src/main/idl目錄下,執行mvn idlj:generate後,會在target/generated-sourced/idl目錄下產出以module為名的子目錄及code generate出來的六個Java檔。
(繼續閱讀...)
文章標籤

Jemmy 發表在 痞客邦 留言(0) 人氣(74)

  • 個人分類:Maven
▲top
  • 5月 12 週三 201010:46
  • 設定Source編碼

  在Eclipse執行Maven的jetty:run過程,總出現以下這行討厭的訊息: [WARNING] Using platform encoding (MS950 actually) to copy filtered resources, i.e. build is platform dependent!   後來在pom.xml裡的<properties>標籤加以下的設定就OK了。 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
(繼續閱讀...)
文章標籤

Jemmy 發表在 痞客邦 留言(1) 人氣(641)

  • 個人分類:Maven
▲top
  • 4月 18 週日 201020:37
  • JDepend初體驗

image  參觀了http://www.javaworld.com.tw/roller/piaoyi/entry/usefuleclipseplugins,下載幾個plugin來玩玩。本來想找Maven在Native2Ascii的支援,沒想到就有現成的plugin,可以做到編輯時看到的是中文,存檔變成Unicode格式,而且還是兩個:Properties Editor、JInto。前者可以按右鍵選擇看Unicode內容,後者是採Table式編輯。   稍為符合一定程度的開發,像Coverage、Check Style都會有。而我比較在意的是JDepend,日前前老板問過我一事,有無工具可以推導一個Jar的dependency,我印象中沒有,最多從其中最常用的一個找出它在Maven的artifact id。而JDepend似乎就補足這樣的需求,它的Eclipse Plugin的網址是http://andrei.gmxhome.de/eclipse,安裝後,在package按右鍵,點選[Run JDepend analysis](早一點版本只寫JDepend),就會切換到JDepend Perspective,如下: image   JDepend和Coverage工具之一Coberturu一樣,同時也提供了Maven Plugin,只需要在pom.xml做如下的設定,再執行mvn site:site,便可能產出相依性報表(唉!還是無法在M2Eclipse 0.10.0下自訂mvn site:site):
<project>
...
<build>
...
</build>
...
<reporting>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jdepend-maven-plugin</artifactId>
</plugin>
</plugins>
</reporting>
...
</project>
(繼續閱讀...)
文章標籤

Jemmy 發表在 痞客邦 留言(0) 人氣(201)

  • 個人分類:Maven
▲top
  • 4月 01 週四 201010:23
  • J2EE Maven Plugin List

Product artifact Group ID Artifact ID Java Activation Framework javax.activation activation J2EE javax.j2ee j2ee Java Data Object (JDO) javax.jdo jdo Java Message Service (JMS) javax.jms jms JavaMail javax.mail mail Java Persistence API (JPA) / EJB 3 javax.persistence persistence-api J2EE Connector Architecture javax.resource connector J2EE Connector Architecture API javax.resource connector-api Java Authentication and Authorization Service (JAAS) javax.security jaas Java Authorization Contract for Containers javax.security jacc Servlet API javax.servlet servlet-api Servlet JavaServer Pages (JSP) javax.servlet jsp-api Servlet JavaServer Pages Standard Tag Library (JSTL) javax.servlet jstl JDBC 2.0 Optional Package javax.sql jdbc-stdext Java Transaction API (JTA) javax.transaction jta Java XML RPC javax.xml jaxrpc Portlet javax.portlet portlet-api Java Naming and Directory Interface (JNDI) javax.naming jndi 參考自http://maven.apache.org/guides/mini/guide-coping-with-sun-jars.html。
(繼續閱讀...)
文章標籤

Jemmy 發表在 痞客邦 留言(0) 人氣(40)

  • 個人分類:Maven
▲top
123»

自訂側欄

自訂側欄

個人資訊

Jemmy
暱稱:
Jemmy
分類:
好友:
累積中
地區:

熱門文章

  • (1,414)非我族類的DataTables.js:分頁和排序無作用原因
  • (541)Perl的跨行比對
  • (72)Notes的Agent二三事
  • (31)六句聯
  • (576)Struts-Menu初體驗
  • (18,352)Windows route初體驗
  • (223)Log4J依不同class產出不同log file之二,加Daily Rolling
  • (233)Jar Hell之旅:JUnit, Eclipse, Spring
  • (16,786)Java基本功:Socket Timeout有兩種
  • (1,846)變更Maven的Local Repository

文章分類

  • PostgreSQL (1)
  • Ruby (6)
  • 圖書 (18)
  • 旅行 (8)
  • OSGi (13)
  • 健康 (9)
  • Google (6)
  • 歷史 (5)
  • Spring-Security (5)
  • Java Script (11)
  • Log (8)
  • 娛樂 (25)
  • IT趨勢 (12)
  • 心情 (92)
  • 組織 (41)
  • Java基本功 (18)
  • Regex (19)
  • 新聞與政治 (46)
  • 電腦和網際網路 (47)
  • Maven (28)
  • Spring (31)
  • LotusNotes (12)
  • Java (60)
  • Oracle (17)
  • Struts (21)
  • jQuery (10)
  • 未分類文章 (1)

最新文章

  • JDOM解析XML字串(非檔案)
  • Android SDK不能用於JDK 64bit
  • 非我族類的DataTables.js:分頁和排序無作用原因
  • java.lang.IllegalStateException: Committed之解
  • PostgreSQL二三事
  • Form/Field V.S. Document/Item
  • Spring Mail
  • Ant generate manifest.mf的class-path清單
  • dhcp.bat
  • Java update Notes的DateTime欄位

動態訂閱

文章精選

文章搜尋

誰來我家

參觀人氣

  • 本日人氣:
  • 累積人氣: