私はこの注釈を書きました
@Retention(RetentionPolicy.SOURCE)
public @interface Encrypt {
}
そしてそのプロセッサ...
@SupportedAnnotationTypes("it.trecube.annotation.Encrypt")
@SupportedSourceVersion(SourceVersion.RELEASE_7)
public class EncryptProcessor extends AbstractProcessor{
public EncryptProcessor(){
super();
}
@Override
public boolean process(Set<? extends TypeElement> annotations,
RoundEnvironment roundEnv) {
String className = null;
String packageName = null;
String fqClassName = null;
for (Element elem : roundEnv.getElementsAnnotatedWith(Encrypt.class)) {
if (elem.getKind() == ElementKind.CLASS) {
// Encrypt encrypt = elem.getAnnotation(Encrypt.class);
// String message = "annotation found in " + elem.getSimpleName();
// processingEnv.getMessager().printMessage(Kind.NOTE, message);
TypeElement classElement = (TypeElement) elem;
PackageElement packageElement = (PackageElement) classElement.getEnclosingElement();
processingEnv.getMessager().printMessage(
Diagnostic.Kind.NOTE,
"annotated class: @Encrypt" , elem);
className = classElement.getSimpleName().toString();
packageName = packageElement.getQualifiedName().toString();
fqClassName = classElement.getQualifiedName().toString();
if (fqClassName != null) {
processingEnv.getMessager().printMessage(
Diagnostic.Kind.NOTE,
"fqClassName: "+fqClassName , elem);
Properties props = new Properties();
URL url = this.getClass().getClassLoader().getResource("velocity.properties");
try {
props.load(url.openStream());
} catch (IOException e) {
processingEnv.getMessager().printMessage(
Diagnostic.Kind.ERROR,
"annotated class: " + classElement.getQualifiedName()+"->\n"+
e.getMessage(), elem);
e.printStackTrace();
return true;
}
VelocityEngine ve = new VelocityEngine(props);
ve.init();
VelocityContext vc = new VelocityContext();
vc.put("className", className);
vc.put("packageName", packageName);
Template vt = ve.getTemplate("encrypt.vm");
File file = new File("src/main/java/"+fqClassName.replace(".", "/")+"_Encrypt.aj");
try {
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
processingEnv.getMessager().printMessage(
Diagnostic.Kind.NOTE,
"creating source file: " + file.getAbsolutePath());
processingEnv.getMessager().printMessage(
Diagnostic.Kind.NOTE,
"applying velocity template: " + vt.getName());
vt.merge(vc, bw);
bw.close();
} catch (IOException e) {
processingEnv.getMessager().printMessage(
Diagnostic.Kind.ERROR,
"applying velocity error: " + vt.getName()+"->\n"+e.getMessage());
e.printStackTrace();
}
}
}
}
return true; // no further processing of this annotation type
}
すべてをMavenクライアントプロジェクトでテストし、すべて動作しましたが、既存のSpring(フルMavenビルド)プロジェクトで使用しようとすると動作しません...誰か助けてもらえますか?? TNX