通常,我使用原型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
问题是:
maven-archetype-simple
是有效的原型吗?maven-archetype-simple
是一个原型,请参考:https://maven.apache.org/guides/introduction/introduction-to-archetypes.html,但它在我的测试中不起作用,所以感到困惑。App.java
?答案 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.java
和AppTest.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
组成。所以,当然,您现在可以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