Maven2 から jelly はきえたか?
maven はさわればさわるほどバグに突き当たる。
可能な限り maven に触らずに済ますのが得策だ。
maven のデフォルト設定に可能な限り逆らってはいけない。
使うゴールは genapp, jar, war, clean, eclipse, site のみとしたい。
あとは maven.xml に ant をかけばいいだけだ。
jelly さえなくなれば(すべての元凶がこいつだ)
する気にもなるのだが。。。
そういう気にまったくならないので maven はだめだめなのだ。
いまのところ jelly を echo message デバッグで追った経験は一度だけですんでいる。
maven が日本で主流になってしまう前になんとかして
maven を捨てる方法はないか、GroovyAnt を使って自分でmavenに変わるものを作ろうか以下のURLを読んで思案中だった。
- Featured Article: Ant 1.6 - finally a real build tool
- http://www.theserverside.com/common/printthread.tss?thread_id=25195
- Maven is a good idea with a bad implementation には激しく同意だ。
- New Build Tool: J2EE + Ant = JAM
- Opinion: Complex build systems need a real language
- Ant + Dependencies = Savant
しかし 解剖! Maven2 http://blog.goo.ne.jp/ikkoan/d/20040803
をみてちょっとかわるかなと思って実際にちょこっとだけためしてみた。
>cvs -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic login Logging in to :pserver:anoncvs@cvs.apache.org:2401:/home/cvspublic CVS password: >cvs -z3 -d :pserver:anoncvs@cvs.apache.org:/home/cvspublic co maven-components/ >cd maven-components >dir /S /B *.jelly ファイルが見つかりません >rem よしよし >echo maven.home=e:/temp/maven2> maven.properties >echo maven.repo.local=e:/temp/maven2repo>> maven.properties (注意) -ディレクトリの区切りは / じゃないとだめみたい。 -値に trim もかけられていない。 -maven.repo.local は maven.home の中に作っちゃだめのようだ。 -エラーメッセージのわけわからなさは maven とかわらず >type maven.properties maven.home=e:/temp/maven2 maven.repo.local=e:/temp/maven2repo >copy maven.properties "%USERPROFILE%" >java -jar mboot.jar (テストでエラーがでるけどうまくいった?ようだ) >set M2_HOME=e:\temp\maven2 >set PATH=%M2_HOME%\bin;%PATH% >cd e:\temp\maven2 >dir /S /B *.jelly ファイルが見つかりません >cd e:\temp\maven2repo >dir /S /B *.jelly ファイルが見つかりません。 jelly がないっすよ。多分。めでたい。 >dir /S classworlds # codehaus : Java(tm) ClassLoader Management Framework commons-cli # apache : コマンドラインパーサー jsch # com.jcraft.jsch なにもの? junit # junit marmalade # codehaus : Marmalade is an XML-based scripting language maven # apache maven-clean-plugin # apache maven-plugin-plugin # apache modello # codehaus : なにもの? ognl # 確か式言語? plexus # codehaus : DIコンテナ? qdox # com.thoughtworks.qdox : Quick JavaDoc Scanner surefire # codehaus : Java Project Management Tools xpp3 # xmlpull : なにもの? xstream # com.thoughtworks.xstream : なにもの? >rem codehaus 強し >rem Marmalade が jelly のかわりになるのか? >m2 -v Maven version: >rem 何でやねん!!! >m2 -h usage: maven [options] [goal [goal2 [goal3] ...]] Options: -D,--define arg Define a system property -X,--debug Produce execution debug output -b,--nobanner Suppress logo banner -g,--mojoDescriptors Display available mojoDescriptors -h,--help Display help information -o,--offline Build is happening offline -r,--reactor Execute goals for project found in the reactor -v,--version Display version information >m2 -g Goals: clean:clean compiler:compile compiler:testCompile install:install jar:deploy jar:install jar:jar plugin:bean plugin:deploy plugin:descriptor plugin:install plugin:jelly plugin:plugin plugin:setup pom:deploy pom:install resources:resources resources:testResources surefire:test >rem 不吉な plugin:jelly の文字が。。。 >rem 気を取り直して進む >maven genapp リターン連打 >rem 生成された project.xml をひたすらエラーメッセージをもとに修正(dtdもドキュメントもないので正しいのかはわからんが) >type project.xml <?xml version="1.0" encoding="UTF-8"?> <project> <pomVersion>4</pomVersion> <groupId>genapp</groupId> <artifactId>m2test</artifactId> <version>1.0</version> <name>Example Application</name> <package>example.app</package> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>3.8.1</version> </dependency> </dependencies> <build> <sourceDirectory>src/java</sourceDirectory> <unitTestSourceDirectory>src/test</unitTestSourceDirectory> <unitTest> <includes> <include>**/*Test.java</include> </includes> <excludes> <exclude>**/NaughtyTest.java</exclude> </excludes> </unitTest> <resources> <resource> <directory>src/conf</directory> <includes> <include>*.properties</include> </includes> </resource> </resources> </build> </project> >m2 jar:jar [INFO] Trying to download: /junit/poms/junit-3.8.1.pom from http://www.ibiblio.org/maven [INFO] /junit/poms/junit-3.8.1.pom was not found in http://www.ibiblio.org/maven [INFO] [compiler:compile] [INFO] [compiler:testCompile] [INFO] [resources:resources] [INFO] [resources:testResources] [INFO] [surefire:test] ------------------------------------------------------- T E S T S ------------------------------------------------------- [surefire] Running example.app.AppTest [surefire] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.01 sec There are no test to run. Resume : [surefire] Tests run: 1, Failures: 0, Errors: 0 [INFO] [jar:jar] [INFO] ---------------------------------------------------------------------------- [INFO] BUILD SUCCESSFUL [INFO] ---------------------------------------------------------------------------- [INFO] Total time: 2 seconds [INFO] Finished at: Thu Aug 05 12:35:23 JST 2004 [INFO] Final Memory: 0M/2M [INFO] ---------------------------------------------------------------------------- >rem maven だと junit.jar の dependency がなくてもうまくいくのだが、maven2 では怒られるので追加したのだが怒られる。 >cd target >dir /B classes m2test-1.0.jar test-classes >jar -xvf m2test-1.0.jar META-INF/MANIFEST.MF が抽出されました。 app.properties が抽出されました。 example/app/App.class が抽出されました。 >type META-INF\MANIFEST.MF Manifest-Version: 1.0 Created-By: 2.0 (Apache Maven) テストの部分はちょっと怪しいがとにかく実行できる。 >cd .. >m2 clean:clean [INFO] [clean:clean] Deleting directory E:\temp\m2\target [INFO] ---------------------------------------------------------------------------- [INFO] BUILD SUCCESSFUL [INFO] ---------------------------------------------------------------------------- [INFO] Total time: 0 seconds [INFO] Finished at: Thu Aug 05 12:36:30 JST 2004 [INFO] Final Memory: 0M/1M [INFO] ---------------------------------------------------------------------------- >maven jar __ __ | \/ |__ _Apache__ ___ | |\/| / _` \ V / -_) ' \ ~ intelligent projects ~ |_| |_\__,_|\_/\___|_||_| v. 1.0 Plugin 'maven-deploy-plugin' in project 'Example Application' is not available build:start: java:prepare-filesystem: [mkdir] Created dir: E:\temp\m2\target\classes java:compile: [echo] Compiling to E:\temp\m2/target/classes [javac] Compiling 1 source file to E:\temp\m2\target\classes java:jar-resources: Copying 1 file to E:\temp\m2\target\classes test:prepare-filesystem: [mkdir] Created dir: E:\temp\m2\target\test-classes [mkdir] Created dir: E:\temp\m2\target\test-reports test:test-resources: test:compile: [javac] Compiling 3 source files to E:\temp\m2\target\test-classes test:test: [junit] Running example.app.AppTest [junit] Tests run: 1, Failures: 0, Errors: 0, Time elapsed: 0.1 sec jar:jar: [jar] Building jar: E:\temp\m2\target\m2test-.jar BUILD SUCCESSFUL Total time: 9 seconds Finished at: Thu Aug 05 12:37:14 JST 2004 >maven clean __ __ | \/ |__ _Apache__ ___ | |\/| / _` \ V / -_) ' \ ~ intelligent projects ~ |_| |_\__,_|\_/\___|_||_| v. 1.0 build:start: clean:clean: [delete] Deleting directory E:\temp\m2\target BUILD SUCCESSFUL Total time: 4 seconds Finished at: Thu Aug 05 12:37:31 JST 2004
比較すると
| maven | maven2 ------------------------ clean | 4 | 0 ------------------------ jar | 9 | 2 ------------------------
すくなくとも maven よりは早くなっていることは確かです。
なので ant と同じ感じで気軽にコマンドラインや Eclipse からたたける。
無様なバージョン表示も出なくなった。
初めてのゴールをたたくたびに、お前は本当にダウンロードがすきだのうとあきれる挙動がいまのところない。
http://docs.codehaus.org/display/MAVEN/Plugin+-+Design に
「プラグインはできるだけ簡単にテストできる POJO にすべきだ」
とある。