Maven - “maven-archetype-simple”是一个有效的原型吗?

时间:2016-10-16 20:09:12

标签: java maven maven-archetype

通常,我使用原型maven-archetype-quickstart创建maven jar项目,效果很好。

但我想创建没有样本App.java类的Maven项目,因此我尝试了maven-archetype-simple原型,并得到错误。

Maven命令:

mvn archetype:generate -DgroupId=eric -DartifactId=hello -Dversion=0.1 -DarchetypeArtifactId=maven-archetype-simple -DinteractiveMode=false -X -DarchetypeCatalog=local

错误提示:

  

[错误]无法执行目标   org.apache.maven.plugins:行家-原型-插件:2.4:产生   project standalone-pom上的(default-cli):定义的工件不是   原型 - > [帮助1]   org.apache.maven.lifecycle.LifecycleExecutionException:失败   执行目标   org.apache.maven.plugins:行家-原型-插件:2.4:产生   project standalone-pom上的(default-cli):定义的工件不是   一个原型   org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212)     在   org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)     在   org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)     在   org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)     在   org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)     在   org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)     在   org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)     在org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)at at   org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193)at at   org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)at   org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)at at   org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288)at at   org.apache.maven.cli.MavenCli.main(MavenCli.java:199)at at   sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at   sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)     在   sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)     在java.lang.reflect.Method.invoke(Method.java:497)at   org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)     在   org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)     在   org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)     在   org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)   引起:org.apache.maven.plugin.MojoFailureException:已定义   神器不是原型   org.apache.maven.archetype.mojos.CreateProjectFromArchetypeMojo.execute(CreateProjectFromArchetypeMojo.java:205)     在   org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)     在   org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)     ... 20更多引起:   org.apache.maven.archetype.exception.ArchetypeGenerationConfigurationFailure:   定义的工件不是原型   org.apache.maven.archetype.ui.generation.DefaultArchetypeGenerationConfigurator.configureArchetype(DefaultArchetypeGenerationConfigurator.java:150)     在   org.apache.maven.archetype.mojos.CreateProjectFromArchetypeMojo.execute(CreateProjectFromArchetypeMojo.java:189)     ... 22更多[错误] [错误] [错误]有关的更多信息   错误和可能的解决方案,请阅读以下文章:   [错误] [帮助1]   http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

问题是:

3 个答案:

答案 0 :(得分:5)

工件maven-archetype-simple does exist on Maven Central,但它不是有效的原型,因为它不包含正确的元数据文件。有效的原型must have in its JAR file

  • 要么META-INF/maven/archetype-metadata.xml(这是新格式);
  • META-INF/maven/archetype.xml甚至是META-INF/archetype.xml(这是旧格式)。

这个特定的工件,就像在Central上一样,没有这些文件。因此,它不被认为是插件的有效原型。这些文件存储了原型所需的参数,它们可能的默认值,它应该使用的文件等等。所以它们确实是必需的。

我不确定是否存在一个原型会使用给定的Maven坐标生成一个pom.xml。这实际上是使用maven-archetype-quickstart而不生成App.javaAppTest.java的情况。请记住,原型实际上是用于从预定义的模板创建项目,例如示例Java EE应用程序或示例Maven项目;所有这些都需要更多的设置,而不仅仅是编写POM文件。

如果你真的,真的,不要那些文件,你可以

Create your own archetype

使用以下目录结构创建一个新的Maven项目,例如my-simple-archetype

pom.xml
src
\---main
    \---resources
        +---archetype-resources
        |       pom.xml
        |
        \---META-INF
            \---maven
                    archetype-metadata.xml

根目录中pom.xml的内容:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>eric</groupId>
  <artifactId>my-simple-archetype</artifactId>
  <version>0.1</version>
  <packaging>maven-archetype</packaging>
  <build>
    <extensions>
      <extension>
        <groupId>org.apache.maven.archetype</groupId>
        <artifactId>archetype-packaging</artifactId>
        <version>2.4</version>
      </extension>
    </extensions>
    <pluginManagement>
      <plugins>
        <plugin>
          <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-archetype-plugin</artifactId>
          <version>2.4</version>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

src/main/resources/archetype-resources/pom.xml的内容:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>${groupId}</groupId>
  <artifactId>${artifactId}</artifactId>
  <version>${version}</version>
</project>

最后,src/main/resources/META-INF/maven/archetype-metadata.xml的内容:

<archetype>
  <id>my-simple-archetype</id>
</archetype>

现在您可以构建此项目并进行安装:

cd my-simple-archetype
mvn clean install

这将更新您的本地目录,以便可以使用此新原型。你终于可以用了!在新目录中,执行

mvn archetype:generate -DgroupId=eric -DartifactId=hello -Dversion=0.1 -DarchetypeArtifactId=my-simple-archetype -DarchetypeGroupId=eric -DinteractiveMode=false

你将得到你想要的项目......它由孤独的pom.xml组成。所以,当然,您现在可以customize this archetype of yours

删除文件

或者您认为不值得付出努力,在创建文件后删除文件要简单得多:

mvn archetype:generate -DgroupId=eric -DartifactId=hello -Dversion=0.1 -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
rmdir /S /Q hello\src

如果您使用的是Linux计算机,请rm -rf hello/src

答案 1 :(得分:1)

关于maven-archetype-simple,即使它是有效的(事实并非如此),它有点过时(2006年)。我建议你使用更新的东西,以便插件和java版本不会太旧。

java8-quickstart-archetype符合条款:

mvn archetype:generate -DgroupId=eric -DartifactId=hello \
-Dversion=0.1 -DarchetypeArtifactId=java8-quickstart-archetype \
-DarchetypeGroupId=pl.org.miki -DinteractiveMode=false

可以在此处找到此原型来源:github.com/mikolak-net/java8-quickstart-archetype

答案 2 :(得分:-2)

这是一个有效的maven原型,请参阅https://maven-repository.com/search?q=maven-archetype-simple