2010-04-09 117 views
1

我在使用Maven的原型时遇到了一些麻烦,因此我需要覆盖一些原型。我启动一个执行原型的指令:在原型已经存在的目录中生成。覆盖Maven中的原型

是否有一个参数让我覆盖现有的原型?

我有搜索行家definitve指导,但它指出,唯一接受的参数是: -DgroupId -DartifactId -Dversion -DpackageName -DarchetypeGroupId -DarchetypeArtifactId -DarchetypeVersion -DinteractiveMode

我可以只搜索目录并删除文件,但这个过程会自动完成(所以没有人参与,不涉及大脑),我不希望他的机器删除周围的东西。

谢谢大家!

编辑:我差点忘了,这里是一些行家跟踪:

[INFO] Scanning for projects... 
[INFO] Searching repository for plugin with prefix: 'archetype'. 
[INFO] ------------------------------------------------------------------------ 
[INFO] Building Maven Default Project 
[INFO] task-segment: [archetype:generate] (aggregator-style) 
[INFO] ------------------------------------------------------------------------ 
[INFO] Preparing archetype:generate 
[INFO] No goals needed for project - skipping 
[INFO] Setting property: classpath.resource.loader.class => 'org.codehaus.plexus.velocity.ContextClassLoaderResourceLoader'. 
[INFO] Setting property: velocimacro.messages.on => 'false'. 
[INFO] Setting property: resource.loader => 'classpath'. 
[INFO] Setting property: resource.manager.logwhenfound => 'false'. 
[INFO] [archetype:generate {execution: default-cli}] 
[INFO] Generating project in Batch mode 
[INFO] Archetype defined by properties 
[INFO] ---------------------------------------------------------------------------- 
[INFO] Using following parameters for creating OldArchetype: archetype-foo-lib:1.0 
[INFO] ---------------------------------------------------------------------------- 
[INFO] Parameter: groupId, Value: foo.tecnologia 
[INFO] Parameter: packageName, Value: foo.tecnologia 
[INFO] Parameter: basedir, Value: C:\temp\Desarrollo 
[INFO] Parameter: package, Value: foo.tecnologia 
[INFO] Parameter: version, Value: 1.0 
[INFO] Parameter: artifactId, Value: Foo-Lib-Test 
[ERROR] Directory Foo-Lib-Test already exists - please run from a clean directory 
org.apache.maven.archetype.old.ArchetypeTemplateProcessingException: Directory Foo-Lib-Test already exists - please run from a clean directory 
    at org.apache.maven.archetype.old.DefaultOldArchetype.createArchetype(DefaultOldArchetype.java:242) 
    at org.apache.maven.archetype.generator.DefaultArchetypeGenerator.processOldArchetype(DefaultArchetypeGenerator.java:253) 
    at org.apache.maven.archetype.generator.DefaultArchetypeGenerator.generateArchetype(DefaultArchetypeGenerator.java:143) 
    at org.apache.maven.archetype.generator.DefaultArchetypeGenerator.generateArchetype(DefaultArchetypeGenerator.java:286) 
    at org.apache.maven.archetype.DefaultArchetype.generateProjectFromArchetype(DefaultArchetype.java:69) 
    at org.apache.maven.archetype.mojos.CreateProjectFromArchetypeMojo.execute(CreateProjectFromArchetypeMojo.java:184) 
    at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490) 
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694) 
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:569) 
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:539) 
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387) 
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:284) 
    at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180) 
    at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328) 
    at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138) 
    at com.foo.model.CSMavenCli.main(CSMavenCli.java:391) 
    at com.foo.model.MavenAdmin.generateArchetype(MavenAdmin.java:399) 
    at com.foo.model.ValidarPom.validarPom(ValidarPom.java:167) 
    at com.foo.prueba.GenerarPOM.execute(GenerarPOM.java:93) 
    at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58) 
    at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67) 
    at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51) 
    at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191) 
    at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305) 
    at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191) 
    at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283) 
    at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913) 
    at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:729) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174) 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:873) 
    at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665) 
    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528) 
    at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81) 
    at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689) 
    at java.lang.Thread.run(Unknown Source) 
[INFO] ------------------------------------------------------------------------ 
[ERROR] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] : org.apache.maven.archetype.old.ArchetypeTemplateProcessingException: Directory Foo-Lib-Test already exists - please run from a clean directory 
Directory Foo-Lib-Test already exists - please run from a clean directory 
[INFO] ------------------------------------------------------------------------ 
[INFO] For more information, run Maven with the -e switch 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 1 second 
[INFO] Finished at: Fri Apr 09 10:01:33 CEST 2010 
[INFO] Final Memory: 15M/28M 
[INFO] ------------------------------------------------------------------------ 
+1

@Random为什么你需要覆盖?使用快速启动archtype,然后根据您的需要定制项目,并尽可能遵循maven标准,如src/main/java资源src/main/resources中的java文件等。 – ant 2010-04-09 08:09:45

+0

@ c0mrade我有一个程序创建指令archetype:由程序用户从给定值生成。用户很容易重新生成原型(例如,更改一些值并重新生成原型)。我想知道我是否可以简单地覆盖生成的项目。 – Random 2010-05-20 11:37:13

+1

我希望能够做同样的事情 - 使用maven原型完全重新生成代码,但覆盖现有的。似乎没有办法做到这一点。 – user2800708 2015-09-02 10:52:34

回答

1

我猜你会检查出原型的来源。例如

http://svn.apache.org/viewvc/maven/archetype/tags/maven-archetype-quickstart-1.1

应用更改并运行mvn安装

这么说,你应该通常不会做进一步的参考这样

http://maven.apache.org/guides/mini/guide-creating-archetypes.html

+0

我不需要更改archtetype,只需覆盖由原型生成的proyect。所以当我再次生成它(在同一个目录中)时,它不会崩溃,但会覆盖现有的工程。 – Random 2010-05-20 11:39:56

+0

等待:您正在寻找的可能是mvn install:http://maven.apache.org/plugins/maven-install-plugin/index.html – 2010-05-20 11:55:09

1

我想在重新生成时覆盖文件一个原型 - 类似于你的要求,用户可以用不同的参数重新生成一个项目。在我的情况下,我从模型生成一个完整的REST堆栈,当我对原型本身进行更改时,我想迭代地重新生成所有代码。

我想这样做的部分原因是让IntelliJ项目文件在regens之间保持完整 - 这样我就不必将生成的项目重新导入到IntelliJ中。

maven原型插件不会覆盖文件,也没有启用该选项的选项。

我找到的解决方案是删除生成的项目下的所有文件,除了IntelliJ.iml项目文件,并保留.idea和所有目录完好无损。然后,原型插件将工作。我从脚本中调用原型插件并在其中执行删除操作。如果“PP”是包含该项目重新生成目录的名称:

# This should leave IntelliJ project files intact accross regens. 
find pp -type d -name 'target' -exec rm -fR {} \; 
find pp -type d -name 'generated' -exec rm -fR {} \; 
find pp -type f -not -path '*/.idea/*' -not -name '*.iml' -exec rm {} \; 

您应该能够拿出一些这方面的变化,以达到你想要的东西。