WebSphere Application Server Liberty Coreのmavenリポジトリを見てみた

CodeZineの方でWebSphere Application Server Liberty Core(以下Liberty Core)についての概要記事が書いてあったので微妙なところで。
http://codezine.jp/article/detail/8834

CodeZineではEclipseによる開発からのデプロイ方法が公開されていますが、
本番環境にデプロイするときにはこういう方法は取らずに基本的にはコマンドラインによるビルドツールを使用します。

Liberty Coreでは専用のmaven repositoryが用意されているようなので、そちらを使用します。
http://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/wasdev/maven/repository/

archetype-catalog.xml がトップに置かれていることからも判るように、いくつかのarchtypeがデフォルトで用意されています。

以下のコマンドを打つことでarchitypeを選択して空のテンプレートを作成することができます。

mvn archetype:generate -DarchetypeCatalog=http://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/wasdev/maven/repository/archetype-catalog.xml

現時点では、以下のarchtypeが登録されているようです。

  1. ejb-jee5-liberty (JEE5 EJB 3.0 targeting WebSphere Liberty archetype)
  2. ejb-jee5-was (JEE5 EJB 3.0 targeting WebSphere archetype)
  3. ejb-jee6-liberty (JEE6 EJB 3.1 targeting WebSphere Liberty archetype)
  4. ejb-jee6-was (JEE6 EJB 3.1 targeting WebSphere archetype)
  5. ejb-jee7-liberty (JEE5 EJB 3.2 targeting WebSphere Liberty archetype)
  6. osgi-ejb30-liberty (WebSphere Liberty OSGi EJB30 Archetype)
  7. osgi-ejb30-was (OSGi EJB 3.0 Archetype targeting WebSphere)
  8. osgi-ejb31-liberty (WebSphere Liberty OSGi EJB31 Archetype)
  9. osgi-ejb31-was (OSGi EJB 3.1 Archetype targeting WebSphere)
  10. osgi-liberty (OSGi Archetype targeting WebSphere Liberty)
  11. osgi-was (OSGi Archetype targeting WebSphere)
  12. osgi-web25-liberty (OSGi Web 2.5 Archetype targeting WebSphere Liberty)
  13. osgi-web25-was (OSGi Web 2.5 Archetype targeting WebSphere)
  14. osgi-web30-liberty (OSGi Web 3.0 Archetype targeting WebSphere Liberty)
  15. osgi-web30-was (OSGi Web 3.0 Archetype targeting WebSphere)
  16. osgi-web31-liberty (WebSphere Liberty OSGi Web31 Archetype)
  17. portletapp-portlet20 (javax.portlet)
  18. webapp-jee5-liberty (JEE5 web application targeting WebSphere Liberty archetype)
  19. webapp-jee5-was (JEE5 web application targeting WebSphere archetype)
  20. webapp-jee6-liberty (JEE6 web application targeting WebSphere Liberty archetype)
  21. webapp-jee6-was (JEE6 web application targeting WebSphere archetype)
  22. webapp-jee7-liberty (JEE7 web application targeting WebSphere Liberty archetype)
  23. liberty-plugin-archetype (liberty-it)

いろいろあるけれども、Java EE 7のFull Platformを使用したいならejb-jee7-liberty、Web Profileを使用したいならwebapp-jee7-libertyを使用するという形になるのではないでしょうか。*1
とりあえずwebapp-jee7-libertyを使用します。

groupIdとartifactId、versionを指定してあげると以下のようなpom.xmlが作成されます。
https://gist.github.com/megascus/cd56a413adcb0a7e645d

こちらのままだとIBMが提供しているmavenリポジトリへアクセスできないので、setting.xml等で設定していないならば、以下の設定を付け加える必要があります。

  <repositories>
    <repository>
      <id>IBM</id>
      <name>IBM Maven2 Repository</name>
      <url>http://public.dhe.ibm.com/ibmdl/export/pub/software/websphere/wasdev/maven/repository/</url>
    </repository>
  </repositories>

これでarchtypeによる空のテンプレートが作成できました。

実際には何に依存しているのか

mvn dependency:treeの結果は以下のとおりになります。

was:sample:war:1.0-SNAPSHOT
\- com.ibm.tools.target:was-liberty:pom:8.5.x.3:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.basics:jar:1.2.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.clusterMember:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.collectiveController:jar:1.1.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.config:jar:1.1.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.connectionpool:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.distributedMap:jar:2.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.dynamicRouting:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.ejbcontainer:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.endpoint:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.hpel:jar:2.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.j2eemanagement:jar:1.1.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.jaxrs20:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.json:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.kernel.service:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.messaging:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.monitor:jar:1.1.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.oauth:jar:1.1.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.restConnector:jar:1.1.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.scalingMember:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.scriptMetric:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.security:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.security.authorization.saf:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.security.registry.saf:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.servlet:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.sessionstats:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.transaction:jar:1.1.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.webCache:jar:1.1.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.webcontainer.security.app:jar:1.1.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.api.zosLocalAdapters:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.anno:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.application:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.artifact:jar:1.2.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.classloading:jar:1.2.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.collectiveMember:jar:1.1.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.containerServices:jar:1.2.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.globalhandler:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.httptransport:jar:1.1.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.javaeedd:jar:1.1.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.jsp:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.kernel.embeddable:jar:1.1.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.kernel.filemonitor:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.kernel.metatype:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.kernel.service:jar:1.3.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.logging:jar:1.1.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.restHandler:jar:1.1.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.servlet:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.ssl:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.threading:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.timedOperations:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.webCache:jar:1.0.9:provided
   +- com.ibm.websphere.appserver.api:com.ibm.websphere.appserver.spi.zosConnect:jar:1.0.9:provided
   +- javax.annotation:javax.annotation-api:jar:1.2:provided
   +- javax.batch:javax.batch-api:jar:1.0:provided
   +- javax.enterprise:cdi-api:jar:1.2:provided
   |  \- javax.inject:javax.inject:jar:1:provided
   +- javax.enterprise.concurrent:javax.enterprise.concurrent-api:jar:1.0:provided
   +- javax.resource:javax.resource-api:jar:1.7:provided
   +- javax.ejb:javax.ejb-api:jar:3.2:provided
   +- javax.el:javax.el-api:jar:3.0.0:provided
   +- javax.interceptor:javax.interceptor-api:jar:1.2:provided
   +- javax.security.jacc:javax.security.jacc-api:jar:1.5:provided
   +- javax.security.auth.message:javax.security.auth.message-api:jar:1.1:provided
   +- javax.mail:javax.mail-api:jar:1.5.0:provided
   |  \- javax.activation:activation:jar:1.1:provided
   +- javax.xml.bind:jaxb-api:jar:2.2.10:provided
   +- javax.ws.rs:javax.ws.rs-api:jar:2.0:provided
   +- javax.xml.ws:jaxws-api:jar:2.2.11:provided
   |  +- javax.xml.soap:javax.xml.soap-api:jar:1.3.5:provided
   |  \- javax.jws:jsr181-api:jar:1.0-MR1:provided
   +- javax.jms:javax.jms-api:jar:2.0:provided
   +- javax.faces:javax.faces-api:jar:2.2:provided
   +- javax.json:javax.json-api:jar:1.0:provided
   +- javax.servlet.jsp:javax.servlet.jsp-api:jar:2.3.1:provided
   +- org.apache.taglibs:taglibs-standard-spec:jar:1.2.5:provided
   +- javax.management.j2ee:javax.management.j2ee-api:jar:1.1.1:provided
   +- org.eclipse.persistence:javax.persistence:jar:2.1.0:provided
   +- javax.servlet:javax.servlet-api:jar:3.1.0:provided
   +- javax.transaction:javax.transaction-api:jar:1.2:provided
   +- javax.validation:validation-api:jar:1.1.0.Final:provided
   +- javax.websocket:javax.websocket-api:jar:1.1:provided
   +- wsdl4j:wsdl4j:jar:1.6.3:provided
   +- org.osgi:org.osgi.compendium:jar:4.2.0:provided
   \- org.osgi:org.osgi.core:jar:4.3.1:provided

Liberty Core特有のライブラリへの直接的なリンクがたくさん入っています。Liberty Coreの機能をすべて使うのであればこちらが必要であるということではないでしょうか。
Java EEだと、javax.javaee-apiやjavax.javaee-web-apiといったJava EE固有のAPIをまとめただけのjarも存在しますが、Liberty Coreでそちらを採用していないのはLiberty Coreがモジュール化機能を備えており、serverで本当に必要なライブラリのみを読み込むことで高速な起動を実現しているためと推察されます。

どのライブラリを読み込むべきかの検討を行った後にmavenの設定を変更し依存ライブラリから除外していくことで使用していないつもりだったけれども実は使用していたみたいな事態を防ぐことができるのではないでしょうか。

*1:なんでFullだとPlatformで、WebだとProfileなんですかね?