2011-10-29 4 views
2

를 사용하기 -이 내 샘플 프로그램입니다 org.codehaus.groovy.control.MultipleCompilationErrorsException이 나에게 컴파일 오류가 발생 MVN을 사용하여 컴파일하는 동안, 나는 정적 방법이 ExpandoMetaClass를 사용하여 추가하기 위해 노력하고있어, gmaven 플러그인

@Singleton 
     class ThrowError { 
      def parse() 
      { 
       println "Anish" 
      } 

     } 
     ThrowError.metaClass.static.getMap = {m_var -> ThrowError.instance.parse(m_var) } 
발행 MVN이 ..........

[ERROR] Failed to execute goal org.codehaus.gmaven:gmaven-plugin:1.2:generateStubs (default) on project TestExpandoMetaClass: startup failed: 
[ERROR] /C:/groovy/ThrowError.groovy: 4 
: Invalid duplicate class definition of class ThrowError : The source /C:/groovy/ThrowError.groovy contains at least two definitions of the class ThrowError. 
**[ERROR] One of the classes is a explicit generated class using the class statement, the other is a class generated from the s 
cript body based on the file name. Solutions are to change the file name or to change the class name.** 
[ERROR] @ line 4, column 1. 
[ERROR] @Singleton 
[ERROR]^
[ERROR] 
[ERROR] 1 error 
[ERROR] -> [Help 1] 
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.codehaus.gmaven:gmaven-plugin:1.2:generate 
Stubs (default) on project TestExpandoMetaClass: startup failed: 
/C:/groovyThrowError.groovy: 4: Invali 
d duplicate class definition of class ThrowError : The source /groovy/ThrowError.groovy contains at least two definitions of the class ThrowError 

를 컴파일하는 동안

내가 프로젝트를 컴파일 할 gmaven 플러그인이 내 pom.xml 파일 항목 플러그인 gmaven 빌드 항목

되어 사용하고 있습니다
<project> 
............ 
............ 
    <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-compiler-plugin</artifactId> 
        <configuration> 
         <source>1.6</source> 
         <target>1.6</target> 
        </configuration> 
       </plugin> 
       <plugin> 
        <groupId>org.codehaus.mojo</groupId> 
        <artifactId>exec-maven-plugin</artifactId> 
        <version>1.1</version> 
        <executions> 
         <execution> 
          <goals> 
           <goal>java</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 
       <plugin> 
        <groupId>org.codehaus.gmaven</groupId> 
        <artifactId>gmaven-plugin</artifactId> 
        <version>1.2</version> 
        <configuration> 
         <providerSelection>1.7</providerSelection> 
        </configuration> 
        <dependencies> 
         <dependency> 
          <groupId>org.codehaus.gmaven.runtime</groupId> 
          <artifactId>gmaven-runtime-1.7</artifactId> 
          <version>1.2</version> 
         </dependency> 
         <dependency> 
          <groupId>org.codehaus.groovy</groupId> 
          <artifactId>groovy-all</artifactId> 
          <version>1.7.2</version> 
         </dependency> 
        </dependencies> 
        <executions> 
         <execution> 
          <goals> 
           <goal>generateStubs</goal> 
           <goal>compile</goal> 
           <goal>generateTestStubs</goal> 
           <goal>testCompile</goal> 
          </goals> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
.......... 
.......... 
    </project> 

답변

7

Groovy 메일 링리스트에서와 같은 대답을 들었습니다. 아마도 좀 더 자세히 설명 할 것입니다 ... Groovy에는 스크립트와 수업이 있습니다. 클래스는 자바와 같은 클래스 구조를 가진 모든 것입니다. 예를 들어 클래스 B {}는 클래스 구조이며 클래스 B를 정의합니다. 스크립트도 클래스이지만 이러한 구조는 아닙니다. "class B {}; def b = new B()"가있는 경우 B에 대한 클래스 구조가 있지만 내용이 "def b = new B()"인 스크립트도 있습니다. 내가 말했듯이 이것 역시 수업이지만, 그 수업의 이름은 무엇입니까? 이름은 파일이 정의 된 파일 이름으로 정의됩니다 (파일이 없으면 script1456과 같은 이름이 선택됩니다). 이제 "class B {}; def b = new B()"라는 내용으로 B.groovy를 만들 수 있습니다. B라는 하나의 클래스와 같은 이름의 스크립트가 있습니다. 이것은 갈등입니다.

파일 이름을 잘못 지정해도 문제가 없습니다.

+0

이 종류의 클래스를 가져온 경우 스크립트 클래스는 어떻게 실행합니까? –

+0

스크립트에는 run 메소드가 있습니다. 물론 정의 된 클래스에 따라 스크립트가 실행됩니다. – blackdrag

+0

임포트시 에러가 발생하면 Groovy에서 잘못 해석하여 정의 된 클래스에 도달하기 전에 스크립트 클래스 정의를 생성합니다. – user2782001