Quickstart Archetype

archetypeとはMavenの用語で、プロジェクトテンプレートのことです。 Maven archetypeを使うことで、プロジェクトの骨組みをほんの数秒で作ることができます。

出来上がったものは、ビルドとデプロイの準備ができた標準的なMavenプロジェクトです。

まず、あなたのプロジェクトのグループID、Artifact ID、バージョン番号を決めなくてはなりません。 例えば、グループIDは org.example、Artifact IDは myapp、バージョン番号は 1.0.0-SNAPSHOT という具合にします。 また、グループIDとArtifact IDを組み合わせたものがルートパッケージ名となります。

コマンドラインから、次のコマンドを実行してください(ちょっと眠くなるようなコマンドですが):

mvn archetype:create -DarchetypeGroupId=org.apache.tapestry -DarchetypeArtifactId=quickstart -DgroupId=org.example -DartifactId=myapp -DpackageName=org.example.myapp -Dversion=1.0.0-SNAPSHOT

Mavenは、このどっしりとしたコマンドラインの情報を使ってarchetypeを設置し構成します。そしてプロジェクトを生成します:

$ mvn archetype:create -DarchetypeGroupId=org.apache.tapestry -DarchetypeArtifactId=quickstart -DgroupId=org.example -DartifactId=myapp -DpackageName=org.example.myapp -Dversion=1.0.0-SNAPSHOT
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'archetype'.
[INFO] ----------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO]    task-segment: [archetype:create] (aggregator-style)
[INFO] ----------------------------------------------------------------------------
[INFO] Setting property: classpath.resource.loader.class => 'org.codehaus.plexus.velocity.ContextClassLoaderResourceLoader'.
[INFO] Setting property: velocimacro.messages.on => 'false'.
[INFO] Setting property: resource.loader => 'classpath'.
[INFO] Setting property: resource.manager.logwhenfound => 'false'.
[INFO] ************************************************************** 
[INFO] Starting Jakarta Velocity v1.4
[INFO] RuntimeInstance initializing.
[INFO] Default Properties File: org/apache/velocity/runtime/defaults/velocity.properties
[INFO] Default ResourceManager initializing. (class org.apache.velocity.runtime.resource.ResourceManagerImpl)
[INFO] Resource Loader Instantiated: org.codehaus.plexus.velocity.ContextClassLoaderResourceLoader
[INFO] ClasspathResourceLoader : initialization starting.
[INFO] ClasspathResourceLoader : initialization complete.
[INFO] ResourceCache : initialized. (class org.apache.velocity.runtime.resource.ResourceCacheImpl)
[INFO] Default ResourceManager initialization complete.
[INFO] Loaded System Directive: org.apache.velocity.runtime.directive.Literal
[INFO] Loaded System Directive: org.apache.velocity.runtime.directive.Macro
[INFO] Loaded System Directive: org.apache.velocity.runtime.directive.Parse
[INFO] Loaded System Directive: org.apache.velocity.runtime.directive.Include
[INFO] Loaded System Directive: org.apache.velocity.runtime.directive.Foreach
[INFO] Created: 20 parsers.
[INFO] Velocimacro : initialization starting.
[INFO] Velocimacro : adding VMs from VM library template : VM_global_library.vm
[ERROR] ResourceManager : unable to find resource 'VM_global_library.vm' in any resource loader.
[INFO] Velocimacro : error using  VM library template VM_global_library.vm : org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource 'VM_global_library.vm'
[INFO] Velocimacro :  VM library template macro registration complete.
[INFO] Velocimacro : allowInline = true : VMs can be defined inline in templates
[INFO] Velocimacro : allowInlineToOverride = false : VMs defined inline may NOT replace previous VM definitions
[INFO] Velocimacro : allowInlineLocal = false : VMs defined inline will be  global in scope if allowed.
[INFO] Velocimacro : initialization complete.
[INFO] Velocity successfully started.
[INFO] [archetype:create]
[INFO] artifact org.apache.tapestry:quickstart: checking for updates from central
[INFO] ----------------------------------------------------------------------------
[INFO] Using following parameters for creating Archetype: quickstart:RELEASE
[INFO] ----------------------------------------------------------------------------
[INFO] Parameter: groupId, Value: org.example
[INFO] Parameter: packageName, Value: org.example.myapp
[INFO] Parameter: basedir, Value: /Users/Howard/Documents/workspace/tapestry5/target
[INFO] Parameter: package, Value: org.example.myapp
[INFO] Parameter: version, Value: 1.0.0-SNAPSHOT
[INFO] Parameter: artifactId, Value: myapp
[WARNING] org.apache.velocity.runtime.exception.ReferenceException: reference : template = archetype-resources/pom.xml [line 14,column 22] : ${tapestry-release-version} is not a valid reference.
[WARNING] org.apache.velocity.runtime.exception.ReferenceException: reference : template = archetype-resources/pom.xml [line 80,column 26] : ${tapestry-release-version} is not a valid reference.
[INFO] ********************* End of debug info from resources from generated POM ***********************
[WARNING] org.apache.velocity.runtime.exception.ReferenceException: reference : template = archetype-resources/src/main/webapp/Start.tml [line 11,column 34] : ${currentTime} is not a valid reference.
[INFO] Archetype created in dir: /Users/Howard/Documents/workspace/tapestry5/target/myapp
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 2 seconds
[INFO] Finished at: Fri Oct 26 18:12:49 PDT 2007
[INFO] Final Memory: 5M/9M
[INFO] ------------------------------------------------------------------------
$

これを最初に試すときにはMavenの動作に必要なプラグインとJARを全てダウンロードするため、上記のものに加えて大量のメッセージが表示されるでしょう。

あなたが与えた情報を元に、Mavenは新しいアプリケーションの入ったディレクトリを作成します。 Mavenのpom.xmlとweb.xml、log4j.properties、そしてスタートページ(Index.tmlとIndex.java)がそれぞれ適切な場所に作成されます。 また、アプリケーション起動時に実行されるTapestry IoCモジュールも作成されます(AppModule.java)。

Jettyサーブレットコンテナを使えば、アプリケーションを直接実行することができます。

$ cd myapp
~/work/myapp
$ mvn jetty:run
[INFO] Scanning for projects...
[INFO] Searching repository for plugin with prefix: 'jetty'.
[INFO] ----------------------------------------------------------------------------
[INFO] Building myapp Tapestry 5 Application
[INFO]    task-segment: [jetty:run]
[INFO] ----------------------------------------------------------------------------
[INFO] Preparing jetty:run
[INFO] [resources:resources]
[INFO] Using default encoding to copy filtered resources.
[INFO] [compiler:compile]
Compiling 1 source file to /Users/Howard/work/myapp/target/classes
[INFO] [jetty:run]
[INFO] Configuring Jetty for project: myapp Tapestry 5 Application
[INFO] Webapp source directory = /Users/Howard/work/myapp/src/main/webapp
[INFO] web.xml file = /Users/Howard/work/myapp/src/main/webapp/WEB-INF/web.xml
[INFO] Classes = /Users/Howard/work/myapp/target/classes
2007-01-23 12:00:56.656::INFO:  Logging to STDERR via org.mortbay.log.StdErrLog
[INFO] Context path = /myapp
[INFO] Tmp directory = /Users/Howard/work/myapp/target/work
[INFO] Web defaults =  jetty default
[INFO] Webapp directory = /Users/Howard/work/myapp/src/main/webapp
[INFO] Starting jetty 6.1.0pre0 ...
2007-01-23 12:00:56.739::INFO:  jetty-6.1.0pre0
[INFO] Classpath = [file:/Users/Howard/work/myapp/target/classes/, file:/Users/Howard/.m2/repository/commons-codec/commons-codec/1.3/commons-codec-1.3.jar, . . .
[INFO] TapestryFilter Startup time: 306 ms to build IoC Registry, 761 ms overall.
2007-01-23 12:00:57.962::INFO:  Started SelectChannelConnector @ 0.0.0.0:8080
[INFO] Started Jetty Server

これを最初に行う時は、先ほどのようにまたたくさんのダウンロードメッセージが表示されるでしょう。

http://localhost:8080/myappにアクセスしてアプリケーションが動作していることを確認することができます。

コントロール-C を押すことでJettyを止めることができます。

スナップショットについて

Tapestry 5は現在、プレリリースの段階にあります。このarchetypeを含むTapestryライブラリ群はスナップショットとして配布されていて、毎晩リビルドされています。 スナップショットの生成物はMavenの中央リポジトリには入りません。 Tapestryのスナップショットを利用するには、Mavenのコマンドラインに -DremoteRepositories=http://tapestry.formos.com/maven-snapshot-repository/-DarchetypeVersion=5.0.x-SNAPSHOT (最新のスナップショットバージョンを指定する必要があります) を追加してください。

これによって生成されたPOMにはスナップショットリポジトリのエントリが自動的に含まれるので、プロジェクトを作成した後は -DremoteRepositories を使う必要はありません。