繁体   English   中英

Maven-“ maven-archetype-simple”是否有效的原型?

[英]Maven - Is `maven-archetype-simple` a valid 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:maven-archetype-plugin:2.4:generate(default-cli):定义的工件不是原型-> [Help 1] org。 apache.maven.lifecycle.LifecycleExecutionException:无法在目标Standalone-Pom上执行目标org.apache.maven.plugins:maven-archetype-plugin:2.4:generate(default-cli):定义的工件不是org的原型。 org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)位于org.apache.maven.lifecycle.internal处的apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212)。在org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)的MojoExecutor.execute(MojoExecutor.java:145)在org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java: 80)在org.org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)。 在org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307)的apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)在org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java: 193)在org.apache.maven.cli.MavenCli.doMain上的org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106)在org.apache.maven.cli.MavenCli.execute(MavenCli.java:863)在org.apache.maven.cli.MavenCli.doMain (MavenCli.java:288)在org.apache.maven.cli.MavenCli.main(MavenCli.java:199)在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java :62),位于org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(位于java.lang.reflect.Method.invoke(Method.java:497)处的sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)处。于org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)的org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)的Launcher.java:289) rg.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)原因:org.apache.maven.plugin.MojoFailureException:定义的工件不是org.apache.maven.archetype.mojos的原型。 org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)处的org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207.CreateProjectFromArchetypeMojo.execute(CreateProjectFromArchetypeMojo.java:205) )... 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 [ERROR] [ERROR] [ERROR]有关错误和可能的解决方案的更多信息,请阅读以下内容 文章:[错误] [帮助1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException

问题是:

maven-archetype-simple工件确实存在于Maven Central上 ,但它不是有效的原型,因为它不包含正确的元数据文件。 有效的原型必须在其JAR文件中

  • 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文件。

如果你真的, 真的 ,不希望这些文件,您可以

创建自己的原型

使用以下目录结构创建一个新的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 因此,当然,您现在可以自定义您的原型

删除文件

或者,您认为这样做不值得,并且在创建文件后删除文件要简单得多:

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

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

关于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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM