2011-06-05 32 views
0

我得到下面的异常在编译时手动生成管理托管bean的Java文件(JSF2与注释),问题而动态编译JSF2管理bean类(使用Java编译器)

error: Class names, 'javax.faces.bean.ManagedBean,javax.faces.bean.SessionScoped,javax.faces.bean.ManagedProperty', are only accepted if annotation processing is explicitly requested. 

下面是我的代码。

List<String> options = new ArrayList<String>(); 
    options.add("-classpath"); 
    options.add(servletContextPath + "WEB-INF\\lib"); 
    options.add("-d"); 
    options.add(servletContextPath + "WEB-INF\\classes"); 
    JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); 
    StandardJavaFileManager fileMan = compiler.getStandardFileManager(null, 
      null, null); 
    DiagnosticCollector<JavaFileObject> diagnostics = new DiagnosticCollector<JavaFileObject>(); 
    Iterable<? extends JavaFileObject> fileObjs = fileMan 
      .getJavaFileObjectsFromStrings(Arrays.asList(javaFileName)); 
    List<String> annotationClassesToCompile = new ArrayList<String>(); 
    annotationClassesToCompile.add(ManagedBean.class.getName()); 
    annotationClassesToCompile.add(SessionScoped.class.getName()); 
    annotationClassesToCompile.add(ManagedProperty.class.getName()); 
    CompilationTask task = compiler.getTask(null, fileMan, diagnostics, 
      options, annotationClassesToCompile, fileObjs);*/ 
    final Boolean result = task.call(); 
    System.out.println(result.toString() + diagnostics); 
    for (Diagnostic diag : diagnostics.getDiagnostics()) { 
     System.out.println(diag.getMessage(Locale.ENGLISH)); 
    } 

回答

0

当编译提供的类的扩展名不正确时,显示错误消息error: Class names, 'X', are only accepted if annotation processing is explicitly requested.。对于通过Java Tools API编译的所有源文件,后缀应该是.java

虽然StandardJavaFileManager API文档指出可能会提供常规文件,但它似乎目前仅限于具有.java扩展名的文件,这些文件是由bug 6422327 in the Sun Bug DB的修补程序引起的。

+0

感谢您的回复,我们也找到了解决方案。精华是将jsf jars路径添加到类路径中。列表 options = new ArrayList (); options.add( “ - 类路径”); options.add(servletContextPath +“WEB-INF \\ lib”); options.add( “ - d”); options.add(servletContextPath +“WEB-INF \\ classes”); – 2011-11-02 11:10:32