我为Maven 2开发了一些Maven插件,但是我想知道当我想为Maven 3.0开发一个插件(或迁移现有的插件)时,主要的变化是什么。 Maven网站上的文档不是最新的( 真是一个惊喜! ),所有相关的网页仍然处理Maven 2.0,就像这样: 本指南旨在帮助用户开发Maven 2.0的Java插件。 作为一个例子,在Maven 2插件中,我定义了一个像这样的configuration参数: /** * Some parameter. * * @parameter * @required */ private String foo; 所以,现在,使用新的Maven插件API,我期望真正的 Java注释… 问题:我在哪里可以find关于Maven 3插件开发的文档/信息?
AbstractMavenMojo的execute方法声明它抛出了两个exception,MojoExecutionException和MojoFailureException。 投掷或者导致构build停止,并且日志在每种情况下显示几乎相同的消息。 MojoExecutionException的消息是: [INFO] ———————————————————————— [ERROR] BUILD ERROR [INFO] ———————————————————————— [INFO] [exception text] [INFO] ———————————————————————— [INFO] For more information, run Maven with the -e switch [INFO] ———————————————————————— 并且MojoFailureException的消息是: [INFO] ———————————————————————— [ERROR] BUILD FAILURE [INFO] ———————————————————————— [INFO] [exception text] [INFO] ———————————————————————— [INFO] For more information, run Maven with the -e switch [INFO] ———————————————————————— 什么时候应该抛出哪个exception,为什么?
我有一个相当普通的Scala项目,目前正在使用Maven构build。 我想要支持Scala 2.9.x和即将推出的2.10,它不是二进制或源代码兼容的。 如果有必要的话,我愿意考虑转换到SBT,但是我遇到了一些挑战。 我对这个项目的要求是: 单一来源树(不分支)。 我相信试图支持每个Scala版本的多个并发“主”分支将是错过分支之间错误修正的最快方法。 版本特定的源目录。 由于Scala版本不是源兼容的,我需要能够为版本特定的源指定辅助源目录。 特定于版本的源码jar。 最终用户应该能够下载正确的源代码jar,以及正确的版本特定的源代码,用于他们的Scala for IDE版本集成。 综合部署。 我目前使用Maven发行版插件将新版本部署到Sonatype OSS存储库,并希望为发行版提供类似的简单工作stream程。 最终用户Maven支持。 我的最终用户通常是Maven用户,所以准确反映依赖关系的function性POM至关重要。 阴影jar支持。 我需要能够生成包含我的依赖项的子集的JAR, 并从已发布的POM中去除阴影依赖项。 我已经尝试过的事情: Mavenconfiguration文件。 我创build了一组Mavenconfiguration文件来控制使用哪个版本的Scala来构build,使用Maven build-helper插件来select版本特定的源代码树。 在发布之前,这一切都运行良好。 使用分类器来限定版本并不能正常工作,因为源代码的jar也需要自定义分类器('source-2.9.2'等),大多数IDE工具都不知道如何定位它们。 我尝试使用Maven属性将SBT风格的_ $ {scala.version}后缀添加到工件名称,但Maven不喜欢工件名称中的属性。 SBT。 一旦你可以使用它,就可以很好地工作(尽pipe有大量的文档,这不是一件小事)。 不利的一面是,似乎没有与Maven shade插件相当的function。 我看过: Proguard的。 该插件没有针对SBT 0.12.x进行更新,并且不会从源代码生成,因为它取决于另一个更改了groupIds的SBT插件,并且旧名称下没有0.12.x版本。 我还没有能够解决如何指示SBT忽略/replace插件的依赖关系。 OneJar。 这使用自定义类加载来运行embedded式jar的主要类,这不是所需的结果; 我希望我的项目的类文件在我的阴影依赖关系的jar文件中(可能是重命名的)类文件。 SBT大会插件。 这可以在一定程度上工作,但POM文件似乎包括我试图遮蔽的依赖关系,这对我的最终用户没有帮助。 我接受,可能没有一个解决scheme可以满足我对Scala的需求,或者我可能需要编写自己的Maven或Scala插件来完成目标。 但是,如果我可以,我想find一个现有的解决scheme。 更新 我接受@ Jon-Ander的出色答案 ,但对我来说,还是有一个杰出的作品,那就是一个统一的发布stream程。 我的build.sbt的当前状态在GitHub上 。 (我将在后面为后代重现它)。 sbt-release插件不支持多版本构build(也就是说, + […]
我试图生成一个coverage.xml,以便我可以在Hudson的Cobertura插件中引用它,但该文件没有被创build。 我已经将以下内容添加到我的POM中 <reporting> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>cobertura-maven-plugin</artifactId> <version>2.5.1</version> <configuration> <formats> <format>html</format> <format>xml</format> </formats> </configuration> </plugin> </plugins> </reporting> 在运行mvn cobertura:cobertura之后,HTML网站按照预期在** \ target \ site \ cobertura生成,但coverage.xml无处可查。 我错过了什么/误会? 我正在运行Maven 3.0.3
我有一个非常简单的WAR项目,我想在所有已编译的Java类所在的类输出文件夹的顶部包含一个名为META-INF的目录。 我正在使用Maven,但似乎默认情况下,Maven将不包含任何不是Java类的东西。 所以它忽略了位于src目录顶部的META-INF目录。 META-INF目录包含一个名为persistence.xml的文件。 任何有关如何指示Maven将此目录和文件放入输出文件夹的快速指针?
我们使用命令行将系统属性传递给Java虚拟机,当运行我们的Hudson在Linux机器上构build时。 它曾经在2.0.9中工作得很好,因为我们升级到2.1.0就完全停止了工作。 系统属性从来没有把它交给Java虚拟机。 我创build了一个小testing项目,实际上它根本不起作用。 这应该适用于Maven 2.0.9: mvn2.0.9 -Dsystem.test.property=test test 但是这将失败: mvn2.1 -Dsystem.test.property=test test Java代码简单地做到这一点 assertTrue( System.getProperty("system.test.property") != null);
我是Maven的新手,并且正在使用maven.apache.org 教程作为介绍。 在本教程的“ 如何创build我的第一个Maven项目? ”部分,它教导我们通过执行以下命令来生成Maven原型项目: mvn archetype:generate Maven下载了很多文件之后, 突然停下来,在命令行上提出以下问题 : Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains): 149: Apache教程没有描述这个提示。 我有两个问题: 1.以上问题的要求是什么? 应该如何回答,使mvn archetype:generate过程继续? 2.传统上,人们使用mvn archetype:generate来创build一个Maven项目? ————–更新——————— 关于我的第一个问题,我没有input任何值就按下“enter”键,并得到如下输出: Choose version: 1: 1.0-alpha-1 2: 1.0-alpha-2 3: 1.0-alpha-3 4: 1.0-alpha-4 5: 1.0 6: 1.1 Choose a number: 6: 那是什么? 我在上面的例子中input“1”,然后我得到以下的东西: Define value for property […]
Maven Archetypes是可以快速生成给定框架或项目types的运行示例的“模板”。 我试图编译一个列表,当前在网上活动的所有Maven原型目录。 从关于目录文件的Maven文档 : 有关原型的知识存储在目录中。 目录是xml文件。 原型插件捆绑了一个内部目录。 这个是默认使用的。 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) 挂毯 6) Scala目录 7) 兵马俑目录 您会注意到,如果存储库实际上发布了一个原型目录(以上都是这样),那么您将得到一个在该archetype-catalog.xmlfind的所有选项的UI提示。 例如: 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 […]
我想发出像-Dmaven.test.skip=true -Dcheckstyle.skip这样的命令
在尝试编译Vaadin WAR时遇到这个错误: Failed to execute goal org.apache.maven.plugins:maven-war-plugin:2.1.1:war (default-war) on project testvaadin-web: Error assembling WAR: webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update mode) -> [Help 1] 我知道这个错误意味着maven找不到我的web.xml,但在“Vaadin之书”中说,在你的UI类中使用Servlet API 3.0和Annotation @WebServlet , 不需要web.xml 。 我正在编译我的widgetset在一个单独的configuration文件(根据本指南),它编译罚款时,我rnu这个configuration文件。 但是,当我只编译web项目时,我得到上面提到的错误。 是什么赋予了? 我以某种方式重写了maven的行为吗? Vaadin甚至没有创build一个WEB-INF目录。 我想我可以创buildWEB-INF文件夹,并在那里保留一个“鬼”web.xml,以保持maven快乐,但这似乎不正确。 我错过了什么吗? 有谁知道这个好的解决scheme?