Maven - `maven-archetype-simple` 是一个有效的原型吗?
Maven - Is `maven-archetype-simple` a valid archetype?
通常,我使用原型 maven-archetype-quickstart
创建 maven jar 项目,效果很好。
但我想创建没有示例的 Maven 项目 App.java
class,因此我尝试了 maven-archetype-simple
原型,但出现错误。
Maven 命令:
mvn archetype:generate -DgroupId=eric -DartifactId=hello -Dversion=0.1 -DarchetypeArtifactId=maven-archetype-simple -DinteractiveMode=false -X -DarchetypeCatalog=local
错误提示:
[ERROR] Failed to execute goal
org.apache.maven.plugins:maven-archetype-plugin:2.4:generate
(default-cli) on project standalone-pom: The defined artifact is not
an archetype -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to
execute goal
org.apache.maven.plugins:maven-archetype-plugin:2.4:generate
(default-cli) on project standalone-pom: The defined artifact is not
an archetype at
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212)
at
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at
org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116)
at
org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80)
at
org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51)
at
org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307) at
org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193) at
org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106) at
org.apache.maven.cli.MavenCli.execute(MavenCli.java:863) at
org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288) at
org.apache.maven.cli.MavenCli.main(MavenCli.java:199) at
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497) at
org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289)
at
org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229)
at
org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415)
at
org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356)
Caused by: org.apache.maven.plugin.MojoFailureException: The defined
artifact is not an archetype at
org.apache.maven.archetype.mojos.CreateProjectFromArchetypeMojo.execute(CreateProjectFromArchetypeMojo.java:205)
at
org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134)
at
org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207)
... 20 more Caused by:
org.apache.maven.archetype.exception.ArchetypeGenerationConfigurationFailure:
The defined artifact is not an archetype at
org.apache.maven.archetype.ui.generation.DefaultArchetypeGenerationConfigurator.configureArchetype(DefaultArchetypeGenerationConfigurator.java:150)
at
org.apache.maven.archetype.mojos.CreateProjectFromArchetypeMojo.execute(CreateProjectFromArchetypeMojo.java:189)
... 22 more [ERROR] [ERROR] [ERROR] For more information about the
errors and possible solutions, please read the following articles:
[ERROR] [Help 1]
http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
问题是:
maven-archetype-simple
是一个有效的原型吗?
在maven的官方文档中,它说 maven-archetype-simple
是一个原型,参考: https://maven.apache.org/guides/introduction/introduction-to-archetypes.html ,但它在我的测试中不起作用,所以感到困惑。
- 如何在没有生成代码的情况下创建Maven项目
App.java
?
关于 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://mvnrepository.com/search?q=maven-archetype-simple
神器maven-archetype-simple
does exist on Maven Central, but it isn't a valid archetype since it doesn't containt the right metadata files. A valid archetype 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 文件更多的设置。
如果你真的,真的,不想要那些文件,你可以
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
或者 rm -rf hello/src
如果您使用的是 Linux 机器。
通常,我使用原型 maven-archetype-quickstart
创建 maven jar 项目,效果很好。
但我想创建没有示例的 Maven 项目 App.java
class,因此我尝试了 maven-archetype-simple
原型,但出现错误。
Maven 命令:
mvn archetype:generate -DgroupId=eric -DartifactId=hello -Dversion=0.1 -DarchetypeArtifactId=maven-archetype-simple -DinteractiveMode=false -X -DarchetypeCatalog=local
错误提示:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:2.4:generate (default-cli) on project standalone-pom: The defined artifact is not an archetype -> [Help 1] org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:2.4:generate (default-cli) on project standalone-pom: The defined artifact is not an archetype at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:212) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:116) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:80) at org.apache.maven.lifecycle.internal.builder.singlethreaded.SingleThreadedBuilder.build(SingleThreadedBuilder.java:51) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:128) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:307) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:193) at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:106) at org.apache.maven.cli.MavenCli.execute(MavenCli.java:863) at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:288) at org.apache.maven.cli.MavenCli.main(MavenCli.java:199) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:497) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:289) at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:229) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:415) at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:356) Caused by: org.apache.maven.plugin.MojoFailureException: The defined artifact is not an archetype at org.apache.maven.archetype.mojos.CreateProjectFromArchetypeMojo.execute(CreateProjectFromArchetypeMojo.java:205) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:207) ... 20 more Caused by: org.apache.maven.archetype.exception.ArchetypeGenerationConfigurationFailure: The defined artifact is not an archetype at org.apache.maven.archetype.ui.generation.DefaultArchetypeGenerationConfigurator.configureArchetype(DefaultArchetypeGenerationConfigurator.java:150) at org.apache.maven.archetype.mojos.CreateProjectFromArchetypeMojo.execute(CreateProjectFromArchetypeMojo.java:189) ... 22 more [ERROR] [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
问题是:
maven-archetype-simple
是一个有效的原型吗?
在maven的官方文档中,它说maven-archetype-simple
是一个原型,参考: https://maven.apache.org/guides/introduction/introduction-to-archetypes.html ,但它在我的测试中不起作用,所以感到困惑。- 如何在没有生成代码的情况下创建Maven项目
App.java
?
关于 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://mvnrepository.com/search?q=maven-archetype-simple
神器maven-archetype-simple
does exist on Maven Central, but it isn't a valid archetype since it doesn't containt the right metadata files. A valid archetype 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 文件更多的设置。
如果你真的,真的,不想要那些文件,你可以
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
或者 rm -rf hello/src
如果您使用的是 Linux 机器。