2015-08-23 32 views
1

我有兩個註解:如何從使用註釋處理進行編譯中排除Java類?

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.METHOD) 
public @interface Ann { 
    public String description() default "AAA"; 
    public String template() default "BBB"; 
} 

@Retention(RetentionPolicy.RUNTIME) 
@Target({ElementType.TYPE, ElementType.METHOD}) 
public @interface AnotherAnn { 
    public String text() default "Text"; 
} 

簡單的類註解的方法:

public class App { 
    @Ann(description = "Desc", template = "Templ") 
    public void someMethod(){} 
} 

我想App類來創建新的副本,並在更換@Ann annotaion複製課程(在someMethod方法之前)到@AnotherAnn
E.q.註釋處理後App類的副本:

public class AppCopy { 
    @AnotherAnn(text = "Text") 
    public void someMethod(){} 
} 

然後我就應該排除被編譯App類。 處理器:

@SupportedAnnotationTypes("alexiuscrow.annotation.Ann") 
@SupportedSourceVersion(SourceVersion.RELEASE_6) 
public class Proc extends AbstractProcessor { 

    public Proc() { 
     super(); 
    } 

    @Override 
    public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { 
     /* TODO CREATE COPY & EXCLUDE ORIGINAL */ 
     return true; 
    } 
} 

我該怎麼辦?

+0

把你正在嘗試的Java代碼,給一些更多的細節。 –

+0

你有沒有找到解決你的問題。我對它很感興趣。 – Abdullah

+0

不幸的是沒有 – Alexiuscrow

回答

0

下面是從註釋處理排除某些Java類兩種常用的方法:

  1. 運行編譯器的兩倍。第一次編譯整個項目而不運行註釋處理器。第二次,命令行應包含註釋處理器,並且應只列出要運行註釋處理器的文件。只有編譯器編譯的文件才受註解處理。這包括在命令行上傳遞的文件,以及那些依賴於其.class文件不是最新的文件。

  2. 在註釋處理器中寫入邏輯以跳過處理某些文件。

方法#1是我使用的方法。

+0

thx爲您的答案,但我怎樣才能實現第二種方法? – Alexiuscrow

+0

您可以Google「如何使用Java編寫註釋處理器」。 :-)這裏有很多教程。 – mernst

+0

我知道如何編寫註釋處理器,但我不知道如何跳過某些文件的處理。 – Alexiuscrow