Maven Archetypes是"模板",通过它您可以快速生成给定框架或项目类型的运行示例.我正在尝试编译当前在网上活动的所有Maven原型目录的列表.
从有关目录文件的Maven文档:
关于原型的知识存储在目录中.
目录是xml文件.
Archetype插件捆绑了内部目录.默认情况下使用此选项.
Archetype插件可以使用本地文件系统和HTTP连接中的目录.
到目前为止,我已经收集了这个发布目录的存储库列表,但是很想知道是否有人知道更多:
mvn archetype:generate -DarchetypeCatalog=local -DarchetypeCatalog=remote -DarchetypeCatalog=http://repo.fusesource.com/maven2 -DarchetypeCatalog=http://cocoon.apache.org -DarchetypeCatalog=http://download.java.net/maven/2 -DarchetypeCatalog=http://myfaces.apache.org -DarchetypeCatalog=http://tapestry.formos.com/maven-repository -DarchetypeCatalog=http://scala-tools.org -DarchetypeCatalog=http://www.terracotta.org/download/reflector/maven2/
链接到相同的:1)FuseSource 2) Cocoon 3)Java.net 4)MyFaces 5)Tapestry 6)Scala目录 7)Terracotta目录
您会注意到,如果存储库实际发布了原型目录(以上所有内容),您将获得所有选项的UI提示archetype-catalog.xml
.例如:
mvn archetype:generate -DarchetypeCatalog=http://scala-tools.org [INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0) Choose archetype: 1: http://scala-tools.org -> scala-archetype-simple (A simple scala project) 2: http://scala-tools.org -> lift-archetype-blank (A blank/empty liftweb project) 3: http://scala-tools.org -> lift-archetype-basic (A basic liftweb project (with DB, css, ...)) Choose a number: (1/2/3):
例如,如果要直接查看Scala目录文件,可以浏览到http://scala-tools.org/archetype-catalog.xml
但是如果存储库没有提供archetype-catalog.xml,那么就像PascalT所说的那样,你需要提前知道名称(更不方便)并在命令行参数中传递它.
说实话,我并没有真正看到建立所有目录列表的重点.对我来说,首先选择项目然后根据需要添加目录看起来更"自然".这就是为什么IMO在原型列表中有更多价值的原因.即使您在列表中包含所有目录,您仍然需要他们的名字.
无论如何,这里有一些候选人;
Grails在http://snapshots.repository.codehaus.org/中有原型.
Atlassian在https://maven.atlassian.com/repository/public/中有原型
编辑:在马修澄清原型的目录之后.
我误解了一些概念,我的回答并不明确和正确.
目录的要点就是不必提前知道原型的名称.它们用于发布原型并允许mvn archetype:generate
列出原型.因此,在使用时添加"外部"目录(在内部不了解)以获得更广泛的已知原型列表是有意义的mvn archetype:generate
.
对于没有目录的原型,用户必须键入一个必须在某处记录的可怕命令(因为它需要知道该工件).
关于我的主张:
Atlassian的原型在内部目录中.不是一个好主意.
Grails原型不在内部目录或已发布archetype-catalog.xml
.不是一个好主意.
ServiceMix在这里有目录http://servicemix.apache.org/tooling/(基于http://servicemix.apache.org/tooling/
模式).有效的主张.
在挖掘这个时我学到了一件有趣的事情.maven人提供了一个很好的工具,可以帮助人们开发原型来创建目录XML:archetype:crawl
目标基本上是抓取本地Maven存储库,搜索Archetypes并默认生成/更新archetype-catalog.xml
文件~/.m2/repository
.项目,人们只需定期运行如下:
mvn archetype:crawl -Dcatalog=/var/www/html/archetype-catalog.xml
Grails不提供目录.要创建项目,我们必须运行:
mvn org.apache.maven.plugins:maven-archetype-plugin:2.0-alpha-4:generate -DarchetypeGroupId=org.grails \ -DarchetypeArtifactId=grails-maven-archetype \ -DarchetypeVersion=1.0 \ -DarchetypeRepository=http://snapshots.repository.codehaus.org \ -DgroupId=example -DartifactId=my-app
但是一旦我们这样做了,我们在本地存储库中就有了原型.所以,如果我们输入:
mvn archetype:crawl -Dcatalog=/home//.m2/archetype-catalog.xml
原型被列入,~/.m2/archetype-catalog.xml
我们现在也可以使用mvn archetype:generate
Grails(参见选项5):
mvn archetype:generate ... [INFO] No archetype defined. Using maven-archetype-quickstart (org.apache.maven.archetypes:maven-archetype-quickstart:1.0) Choose archetype: 1: local -> maven-archetype-archetype (archetype) 2: local -> maven-archetype-j2ee-simple (j2ee) 3: local -> maven-archetype-quickstart (quickstart) 4: local -> maven-archetype-webapp (webapp) 5: local -> grails-maven-archetype (maven-project) 6: internal -> appfuse-basic-jsf (AppFuse archetype for creating a web application with Hibernate, Spring and JSF) ...
这当然是一个(丑陋的)解决方法,它可能有副作用(你不会看到新版本的原型).实际上,我不认为原型:抓取目标是用于此用途.我希望所有项目都能发布他们的原型.