2011-06-05 40 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