2010-04-09 3 views
1

Maven에 내 아키 타입을 사용하는 데 문제가 있습니다. 일부를 덮어 써야합니다. 아키타 입을 수행하는 명령을 실행합니다 : 이미 존재하는 디렉토리의 아키타 입을 생성하십시오.Maven에서 아키타 입기 덮어 쓰기

기존 아키타 입을 덮어 쓸 수있는 매개 변수가 있습니까?

은 내가 받는다는 definitve 가이드를 검색해야하지만 허용하는 유일한 매개 변수는 것을 말한다 : -DgroupId -DartifactId -Dversion -DpackageName -DarchetypeGroupId -DarchetypeArtifactId -DarchetypeVersion -DinteractiveMode

I 디렉토리를 검색하고 파일을 삭제할 수는 있지만이 처리는 자동으로 수행되므로 아무런 관련이없고 두뇌가 필요하지 않습니다.

모두에게 감사드립니다!

편집 : 난 당신이 원형의 소스를 확인해야 할 것 같아요

[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을 사용하고 src/main/java resources src/main/resources 등의 java 파일과 같은 가능한 한 많이 maven 표준을 따르는 필요에 맞게 프로젝트를 사용자 정의하십시오. – ant

+0

@ c0mrade 나는 프로그램 archetype : 프로그램의 사용자가 주어진 값으로부터 생성하는 프로그램을 가지고있다. 사용자가 아키 타입을 다시 생성하는 것은 쉽습니다 (예를 들어, 일부 값을 변경하고 아키타 입을 다시 생성하는 등). 그리고 나는 생성 된 proyect를 단순히 무시할 수 있는지 알고 싶었습니다. – Random

+1

나는 똑같은 일을 할 수 있기를 원한다. - maven archetype을 사용하여 코드를 완전히 재생성하지만 기존 코드를 덮어 쓴다. 그렇게 할 방법이없는 것 같습니다. – user2800708

답변

1

: 나는 거의 잊고, 여기에 몇 가지 받는다는 추적이다. 예 :

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

+0

archtype을 변경할 필요가 없습니다. archetype에 의해 생성 된 proyect를 무시하십시오. 그래서 (같은 디렉토리에) 다시 생성하면 크래시는 발생하지 않지만 기존의 proyect는 무시합니다. – Random

+0

기다림 : 당신이 찾고있는 것은 아마도 mvn install 일 것입니다 : http://maven.apache.org/plugins/maven-install-plugin/index.html –

1

:

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

당신이 은 일반적으로 더 참조 할 수 있도록이 방법

을하지 말아야, 변경 내용을 적용하고 MVN 말했다

를 설치 실행할 나는 regenerat 때 파일을 재정의 싶습니다. 아키 타입 - 요구 사항과 유사하게 사용자는 다른 매개 변수로 프로젝트를 재생성 할 수 있습니다. 제 경우에는 모델에서 전체 REST 스택을 생성하고 있습니다. 아키타 입 자체를 변경하면서 모든 코드를 반복하여 생성하려고합니다.

내가 이것을하고 싶은 이유 중 일부는 Regens 사이에 IntelliJ 프로젝트 파일을 그대로 두는 것입니다. 그래서 생성 된 프로젝트를 IntelliJ로 다시 가져올 필요가 없습니다.

maven archetype plugin은 파일을 덮어 쓰지 않으며이를 사용 가능하게하는 옵션이 없습니다.

내가 발견 한 해결책은 IntelliJ.iml 프로젝트 파일을 제외한 생성 된 프로젝트의 모든 파일을 삭제하고 .idea 및 모든 디렉토리를 그대로 둡니다. 그런 다음 아키 타입 플러그인이 작동합니다. 스크립트에서 archetype 플러그인을 호출하고 그 플러그인을 삭제합니다. '쪽이'재생하는 프로젝트를 포함하는 디렉토리의 이름 인 경우 :

# 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 {} \; 

당신은 당신이 원하는 것을 달성하기 위해 몇 가지 변화를 가지고 올 수 있어야합니다.