Maven2 から jelly はきえたか?

maven はさわればさわるほどバグに突き当たる。
可能な限り maven に触らずに済ますのが得策だ。
maven のデフォルト設定に可能な限り逆らってはいけない。
使うゴールは genapp, jar, war, clean, eclipse, site のみとしたい。
あとは maven.xml に ant をかけばいいだけだ。


jelly さえなくなれば(すべての元凶がこいつだ)

  • ドキュメントを読んだり
  • バグ報告したり
  • 自分でデバッグしてパッチを送ったり
  • プラグインを書いたり

する気にもなるのだが。。。
そういう気にまったくならないので maven はだめだめなのだ。
いまのところ jelly を echo message デバッグで追った経験は一度だけですんでいる。


maven が日本で主流になってしまう前になんとかして
maven を捨てる方法はないか、GroovyAnt を使って自分でmavenに変わるものを作ろうか以下のURLを読んで思案中だった。


しかし 解剖! Maven2 http://blog.goo.ne.jp/ikkoan/d/20040803

  • Maven V1のソースコードは1行も残っていないのではと思います。
  • maven2はAntスクリプト再利用という枠を越えてもっと汎用的な何かを目指そうとしていると思われます。

をみてちょっとかわるかなと思って実際にちょこっとだけためしてみた。

>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 にすべきだ」
とある。


maven の開発は速攻でやめて jelly なしの maven2 を出すべきだとおもうけどどうでしょう?