java自定义注释构建和运行命令行

时间:2016-01-10 20:35:29

标签: java annotations

我想使用自己的自定义注释创建一个api,隐藏代码应该被触发。 我创建了我的注释并创建了处理器。 但现在的问题是,我不知道如何构建它。 让我以更好的方式解释: 它是一个控制台应用程序,我必须在调用方法后打印文本。

因此,我创建了一个注释class GridViewCellTemplateSelector : DataTemplateSelector { private readonly string _columnName; public GridViewCellTemplateSelector(string columnName) { _columnName = columnName; } public override DataTemplate SelectTemplate(object item, DependencyObject container) { var entry = (Entry)item; var dataTemplate = new DataTemplate { DataType = typeof (Entry) }; var stackPanelFactory = new FrameworkElementFactory(typeof(StackPanel)); stackPanelFactory.SetValue(StackPanel.OrientationProperty, Orientation.Vertical); var text = new FrameworkElementFactory(typeof(TextBlock)); text.SetBinding(TextBlock.TextProperty, new Binding($"EntryKeyValuePairs[{entry.EntryKeyValuePairs.FindIndex(p => p.Key == _columnName)}].Value")); stackPanelFactory.AppendChild(text); dataTemplate.VisualTree = stackPanelFactory; return dataTemplate; } } ,并创建了一个PrintTextProcessor。 但是当我尝试编译它时,它没有显示所需的输出。 我正在诠释一种方法。 但它看起来注释不起作用。 我错过了什么。

以下是我的代码 注释类:

CellTemplateSelector = new GridViewCellTemplateSelector(column.Name)

注释处理器类:

@PrintText

现在我的主要课程来了:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface PrintText{

}

现在,当我尝试编译并运行它时,它只打印以下文本: 在测试方法

我使用了以下命令

@SupportedAnnotationTypes("com.example.PrintText") public class PrintTextProcessor extends AbstractProcessor { @Override public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv) { Set<? extends Element> elements = roundEnv.getElementsAnnotatedWith(PrintText.class); for(Element e : elements){ if(!e.getClass().equals(ParticularType.class)){ processingEnv.getMessager().printMessage(Kind.ERROR, "@PrintText annotated fields must be of type ParticularType"); } } return true; } }

public class Main{ @PrintMe public void testMethod(){ System.out.println("In test method"); } public static void main(String s[]){ new Main().testMethod(); } }

我错过了什么吗? 我在互联网上经历了几个帖子,发现有适当的工具。 但我不知道如何通过命令行构建和运行它。 我正在使用java6。

提前致谢。

1 个答案:

答案 0 :(得分:1)

这是一个很好的例子https://github.com/provegard/aptdemo 但基本上你必须创建包META-INF / services 并将带有类路径的javax.annotation.processing.Processor文件放入您的处理器(换句话说,注册您的处理器),然后构建您的应用程序,让我们用mvn来获取jar文件(mvn包,参见示例)然后编译与javac(javac -cp /path/to/aptdemo-1.0-SNAPSHOT.jar SomeTestClass.java)