无法从现有的maven项目创建原型

时间:2012-05-17 13:30:35

标签: maven maven-3 maven-archetype

我正在尝试从现有的多模块maven项目创建一个原型。为此,我将目录更改为根目录(根pom.xml所在的目录)并发出“mvn archetype:create-from-project”。构建没有完成,我收到以下错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:2.2:create-from-project (default-cli) on project siaci-d: charsetName -> [Help 1]

使用-e和-X标志再次运行我可以看到以下堆栈跟踪:

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-archetype-plugin:2.2:create-from-project (default-cli) on project siaci-d: charsetName
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:213)
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:84)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:320)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
Caused by: org.apache.maven.plugin.MojoFailureException: charsetName
at org.apache.maven.archetype.mojos.CreateArchetypeFromProjectMojo.execute(CreateArchetypeFromProjectMojo.java:285)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
... 19 more

我检查了maven-archetype-plugin文档,但没有找到任何对charsetName属性的引用。所以,我对如何解决这个问题感到有点迷茫。我在Ubuntu盒子上使用maven 3.0.4和java 1.6.0_25。有什么建议吗?

知道这里出了什么问题吗?

2 个答案:

答案 0 :(得分:4)

你刚才发布了这个问题,不过这个答案可能对其他人有所帮助。

我在项目中遇到了同样的问题。如果项目中的文件包含不同encondig中的字符,则会发生此错误。此问题的解决方案是替换此字符 - 如果不是很多,则生成原型,将字符还原为原始字符,最后更改为原型元数据文件中的右侧对话。

另一种选择是更改原型生成中的默认enconding UTF-8,如下所示:

mvn archetype:create-from-project -Darchetype.properties=../archetype.properties 

有关详细信息,请参阅以下指南:

答案 1 :(得分:2)

我正在处理同样的错误然后我发现什么弄乱了原型创作... 首先,我通过在pom.xml上插入以下属性来选择编码ISO-8859-1:

<properties>
    <project.build.sourceEncoding>ISO-8859-1</project.build.sourceEncoding>
    <project.reporting.outputEncoding>${project.build.sourceEncoding}</project.reporting.outputEncoding>
    <project.resources.sourceEncoding>${project.build.sourceEncoding}</project.resources.sourceEncoding>
</properties>

之后,我在pom.xml的build部分插入了以下所有配置的archetype-plugin:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-archetype-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <defaultEncoding>${project.build.sourceEncoding}</defaultEncoding>
        <encoding>${project.build.sourceEncoding}</encoding>
        <archetypeArtifactId>archetype-wsjpa</archetypeArtifactId>
        <archetypeGroupId>br.com.example</archetypeGroupId>
        <archetypeVersion>1.0</archetypeVersion>
        <archetypeFilteredExtentions>java,xml</archetypeFilteredExtentions>
    </configuration>
</plugin>

通过这样做,您应该在自己的pom.xml中提供所有原型生成配置,而不是编写属性文件(archetype.properties)来声明此配置。

最后,我使用mvn clean install然后mvn archetype:create-from-project -e -X

运行了maven

即便如此,你仍然可能会注意到一些编码错误,就像本文中报道的一样,即使你已经更新了你的pom.xml,如上所示......如果你在设置正确的编码后仍然有同样的错误对于您的项目,尝试找出哪个项目文件仍包含无效字符。 要查找troublemaker文件,您应该观察Maven在控制台上显示的调试行,如下所示:"[DEBUG] InputFileName:src\main\resources\META-INF\persistence.xml"并检查哪些项目文件已写入文件夹${basedir}\target\generated-sources\archetype\src\main\resources\archetype-resources。 在原型创建过程中发生编码错误时,上述文件夹与原始项目内容不匹配,因为Maven无法复制某些资源,因为无效或不兼容的字符未包含在属性指定的字符集中。