你知道所有Maven原型目录的网址是什么吗?

46

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 Catalog 7) Terracotta Catalog

你会发现,如果存储库实际上发布了原型目录(以上所有存储库都是如此),则会弹出一个 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所说的那样,你需要提前知道名称(不太方便),并在命令行参数中传递。


2
很不幸,在 Maven 3 版本(我相信)中,通过命令行传递目录的 URL 或文件名以像上述方式执行 mvn archetype:generate -DarchetypeCatalog=... 已经不再可行。仅支持 localremoteinternal,并且配置必须在 settings.xml 中进行。详情请参考:https://maven.apache.org/archetype/maven-archetype-plugin/generate-mojo.html#archetypeCatalog。 - Alexander Klimetschek
5个回答

16
坦白地说,我并不真正看到建立所有目录列表的意义。对我来说,更自然的是首先选择一个项目,然后在需要时添加目录。这就是为什么在原型列表中有更多价值的原因。无论如何,以下是一些候选项: 编辑:在Matthew澄清原型目录后。
我误解了一些概念,我的答案不清楚也不正确。
目录的重点正是不必预先知道原型的名称。它们用于发布原型,并允许mvn archetype:generate列出原型。因此,在使用mvn archetype:generate时添加“外部”目录(理解为不在内部的目录)以获得更广泛的已知原型列表是有意义的。
对于没有目录的原型,用户必须输入一个可怕的命令,该命令必须在某个地方记录下来(因为它需要知道构件的知识)。
关于我的建议:
  • Atlassian的原型位于内部目录中。 不是一个好的建议。

  • Grails的原型不在内部目录或已发布的archetype-catalog.xml中。 不是一个好的建议。

  • ServiceMix在这里有目录http://servicemix.apache.org/tooling/(基于http://servicemix.apache.org/tooling/<version>/archetype-catalog.xml模式)。 有效建议。


我在研究中学到的有趣事情是,Maven提供了一个很好的工具来帮助开发原型的人创建目录XML: archetype:crawl目标基本上爬取本地Maven存储库,搜索原型并在默认情况下生成/更新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/<me>/.m2/archetype-catalog.xml

原型将列在~/.m2/archetype-catalog.xml中,我们现在也可以为Grails使用mvn archetype:generate(参见选项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)
...

当然,这是一个(丑陋的)解决方法,可能会有副作用(您将无法看到archetypes的新版本)。实际上,我认为archetype:crawl目标并不是为此使用而设计的。我希望所有项目都能发布它们的archetypes。

感谢您的补充。如果您在使用archetype:generate时指定了目录名称,系统会为您呈现一个列表供您选择,因此您无需提前知道所需原型的名称。https://maven.atlassian.com/...似乎没有archetype-catalog.xml文件。 - Matthew McCullough
感谢对目录的澄清。我会编辑我的回答以进行澄清。顺便说一下,Atlassian原型实际上在内部目录中。 - Pascal Thivent
不错的更新。感谢你提供的所有新数据 Pascal。另外请注意,有一个~/.m2/archetype-catalog.xml的简写——只需说-Dcatalog=local虽然这仍然解决不了Grails没有提供的问题,但生成后会变得更加清晰。 - Matthew McCullough

1

Nexus生成的Nexus索引被M2eclipse所使用,它包含了所有原型信息,并且让你在创建IDE中的新maven项目时可以选择它们。


1
如果您想知道,这是URL https://maven-us.nuxeo.org/nexus/content/groups/public/archetype-catalog.xml。 - Lee Chee Kiam

1

谢谢!如果您能鼓励Terracotta不仅发布原型,而是原型目录,那将非常棒。这真的可以鼓励使用各种原型。有关发布目录的信息:http://www.sonatype.com/books/maven-book/reference/archetype-sect-publishing.html - Matthew McCullough
它看起来像是Terracotta仓库(http://download.terracotta.org/maven2/index.html),但似乎没有archetype-catalog.xml文件。 - Matthew McCullough
Terracotta的问题现在应该已经解决了。 - Alex Miller
Terracotta目录赢了!谢谢Alex! - Matthew McCullough
顺便说一下,马特,请使用原始评论中的URL(http://www.terracotta.org/download/reflector/maven2/),而不是您在评论中放置的URL。原始链接是官方链接,将重定向到实际链接(今天实际链接可能会更改)。 - Alex Miller
好的。我今天早上编辑了原始文章,并链接到:http://www.terracotta.org/download/reflector/maven2/ -- 正确的链接。 - Matthew McCullough

1

对于Maven Archetype列表,请参考此链接http://www.myjeeva.com/2012/06/exclusive-maven-archetype-list/(您将会找到约607个原型)。

在使用 mvn archetype:generate命令时,在问题中选择 Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 197:

提供上述链接中的原型号码

注意:默认值为197

  • 197 -> org.apache.maven.archetypes:maven-archetype-quickstart(一个包含示例Maven项目的原型)

请在您给我负面评价之前,告诉我您的看法或原因,这样我就可以改进我的回答或提供解释。谢谢。 - jeevatkm
你的帖子看起来像是自我推销,因此被踩了。 - Gautam

0

3
这只是一份内部原型列表。Maven的远程目录要更大- http://repo1.maven.org/maven2/archetype-catalog.xml。 - Henryk Konsek
1
这只是因为他们开始使用索引器而变得如此庞大。当最初回答这个问题时,中央目录是在SVN中手动维护的。 - Matthew McCullough

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接