tanamonの稀に良く書く日記

KEEP CALM AND DRINK BEER

Maven2でWicketをビルドするとエラーになる

GW明けくらいからWicketを使っているプロジェクトをビルドするとエラーがでるようになった。

こんなエラー

[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Failed to resolve artifact.

Couldn't find a version in [1.3.6] to match range [1.4-rc1,)
  org.apache.wicket:wicket-ioc:jar:null

from the specified remote repositories:
  central (http://repo1.maven.org/maven2),
  javelindev.jp (http://maven2.javelindev.jp/repository),
  maven.seasar.org (http://maven.seasar.org/maven2),
  maven2-repository.dev.java.net (http://download.java.net/maven/2),
  maven-repository.dev.java.net (http://download.java.net/maven/1)

Path to dependency:
        1) jp.tanamon:test:war:1.0.0-SNAPSHOT
        2) jp.javelindev:wicketseasar2:jar:1.0-beta1



[INFO] ------------------------------------------------------------------------
[INFO] Trace
org.apache.maven.lifecycle.LifecycleExecutionException: Couldn't find a version in [1.3.6] to match range [1.4-rc1,)
  org.apache.wicket:wicket-ioc:jar:null

from the specified remote repositories:
  central (http://repo1.maven.org/maven2),
  javelindev.jp (http://maven2.javelindev.jp/repository),
  maven.seasar.org (http://maven.seasar.org/maven2),
  maven2-repository.dev.java.net (http://download.java.net/maven/2),
  maven-repository.dev.java.net (http://download.java.net/maven/1)

Path to dependency:
        1) jp.tanamon:test:war:1.0.0-SNAPSHOT
        2) jp.javelindev:wicketseasar2:jar:1.0-beta1


        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:695)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:553)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:523)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.jav
a:371)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:268)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:181)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:356)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:137)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:356)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:623)
        at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
        at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
        at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
        at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
Caused by: org.apache.maven.artifact.versioning.OverConstrainedVersionException: Couldn't find a version in [1.3.6] to m
atch range [1.4-rc1,)
  org.apache.wicket:wicket-ioc:jar:null

from the specified remote repositories:
  central (http://repo1.maven.org/maven2),
  javelindev.jp (http://maven2.javelindev.jp/repository),
  maven.seasar.org (http://maven.seasar.org/maven2),
  maven2-repository.dev.java.net (http://download.java.net/maven/2),
  maven-repository.dev.java.net (http://download.java.net/maven/1)

Path to dependency:
        1) jp.tanamon:test:war:1.0.0-SNAPSHOT
        2) jp.javelindev:wicketseasar2:jar:1.0-beta1


        at org.apache.maven.artifact.resolver.DefaultArtifactCollector.recurse(DefaultArtifactCollector.java:375)
        at org.apache.maven.artifact.resolver.DefaultArtifactCollector.recurse(DefaultArtifactCollector.java:437)
        at org.apache.maven.artifact.resolver.DefaultArtifactCollector.collect(DefaultArtifactCollector.java:74)
        at org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolveTransitively(DefaultArtifactResolver.java:3
16)
        at org.apache.maven.artifact.resolver.DefaultArtifactResolver.resolveTransitively(DefaultArtifactResolver.java:3
04)
        at org.apache.maven.plugin.DefaultPluginManager.resolveTransitiveDependencies(DefaultPluginManager.java:1492)
        at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:435)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:678)
        ... 16 more
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 38 seconds
[INFO] Finished at: Fri May 08 20:21:00 JST 2009
[INFO] Final Memory: 7M/12M
[INFO] ------------------------------------------------------------------------

どうやらWicket 1.3.6が必要なライブラリと1.4-rc1以降が必要なライブラリで競合しているみたい。

ビルドしているプロジェクトのpom.xmlの一部

        <!--  WICKET DEPENDENCIES -->
        <dependency>
            <groupId>org.apache.wicket</groupId>
            <artifactId>wicket</artifactId>
            <version>1.4-rc2</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.wicket</groupId>
            <artifactId>wicket-extensions</artifactId>
            <version>1.4-rc2</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>jp.javelindev</groupId>
            <artifactId>wicketseasar2</artifactId>
            <version>1.0-beta1</version>
            <scope>compile</scope>
        </dependency>

pom.xmlでは1.4-rc2を指定しているのでここではない。
となると、この3つのライブラリの依存関係に問題があるらしい。


で、いろんなところを探し回った後、.m2以下を1.3.6で検索かけたら以下のファイルがヒットした。

%USERPROFILE%\.m2\repository\org\apache\wicket\wicket-ioc\maven-metadata-central.xml

どうもwicket-iocxmlに問題があるっぽい。

maven-metadata-central.xmlの中身

<?xml version="1.0" encoding="UTF-8"?><metadata>
  <groupId>org.apache.wicket</groupId>
  <artifactId>wicket-ioc</artifactId>
  <version>1.3.6</version>
  <versioning>
    <versions>
      <version>1.3.6</version>
    </versions>
    <lastUpdated>20090426215323</lastUpdated>
  </versioning>
</metadata>

ここで、versionに1.3.6と書かれているのがまずい気がする。
というか、少し前のファイルでは1.4-rc2と書かれていた。

少し前のmaven-metadata-central.xml

<?xml version="1.0" encoding="UTF-8"?><metadata>
  <groupId>org.apache.wicket</groupId>
  <artifactId>wicket-ioc</artifactId>
  <version>1.4-rc2</version>
  <versioning>
    <versions>
      <version>1.4-rc2</version>
    </versions>
    <lastUpdated>20090202184423</lastUpdated>
  </versioning>
</metadata>

なので、とりあえずversionの部分を1.4-rc2と書き換えてみた。
そうしたらビルドは成功するようになった。

まとめ

よくわかってないけど、こういうことだろうか?

  • wicketseasar2はwicket-1.4-rc1以降が必要
  • wicketwicket-iocに依存している
  • wicket-iocは1.3.6が最新と定義されている
  • そのため、wicketseaser2を使おうとするとエラーになる

最近wicket-1.3.6がリリースされたことが原因?