2012-05-14 3 views
3

Я пытаюсь создать Java-код с помощью jcodemodel в моем проекте maven. Мой проект maven имеет три модуля. Я написал образец jcodemodel в одном из моих модулей для целей тестирования. Но когда я его выполню, он вызывает ошибку в строке. Но я создал каталог и также проверил. Я проверил этот пример в простом проекте maven, он работает. Но когда я даю его внутри модуля maven, он выдает ошибку. где он проверяет файл сборки?Генерация кода с использованием Jcodemodel

codeModel.build(new File("src/main/java/check")); 

java.io.IOException: ЦСИ \ главная \ Java \ проверка:. Несуществующий каталог в com.sun.codemodel.writer.FileCodeWriter (FileCodeWriter.java:73)

public class Consumer { 

    /** 
    * @param args 
    * @throws JClassAlreadyExistsException 
    * @throws IOException 
    * @throws JAXBException 
    */ 
    public static void main(String[] args) throws JClassAlreadyExistsException, IOException, JAXBException { 
      writeCodeModel("com.cts"); 
    } 

    public static JType getTypeDetailsForCodeModel(JCodeModel jCodeModel, String type) { 
     if (type.equals("Unsigned32")) { 
      return jCodeModel.LONG; 
     } else if (type.equals("Unsigned64")) { 
      return jCodeModel.LONG; 
     } else if (type.equals("Integer32")) { 
      return jCodeModel.INT; 
     } else if (type.equals("Integer64")) { 
      return jCodeModel.LONG; 
     } else if (type.equals("Enumerated")) { 
      return jCodeModel.INT; 
     } else if (type.equals("Float32")) { 
      return jCodeModel.FLOAT; 
     } else if (type.equals("Float64")) { 
      return jCodeModel.DOUBLE; 
     } else { 
      return null; 
     } 
    } 

    // Function to generate CodeModel Class 
    public static void writeCodeModel(String factroyPackage) throws JAXBException { 
     try { 

      JCodeModel codeModel = new JCodeModel(); 
      JDefinedClass foo = codeModel._class("Foo"); //Creates a new class 

      JMethod method = foo.method(JMod.PUBLIC, Void.TYPE, "doFoo"); //Adds a method to the class 
      method.body()._return(JExpr.lit(42)); //the return statement 

      codeModel.build(new File("src/main/java/check")); 

     } catch (Exception ex) { 

      ex.printStackTrace(); 
     } 
    } 

} 
+1

Первой рекомендацией является не создание кода в области src. Назначение по умолчанию для генерации в любом виде - это target/whateverdirectory. – khmarbaise

+0

привет, я дал в качестве codeModel.build (новый файл ("target/classes/com/cts")); но получая такую ​​же ошибку – Ramya

+0

Какой плагин отвечает за создание данной папки (target/classes/com/cts? – khmarbaise

ответ

3

сообщение об исключении кажется довольно ясно:

java.io.IOException: ЦСИ \ главная \ Java \ проверка: несуществующий каталог в com.sun.codemodel.writer.FileCodeWriter. (FileCodeWriter.java:73)

Чтобы создать целевой каталог вы можете изменить свой код, как это предпочтительная папка для сгенерированных источников на target/generated-sources/.

File target = new File("target/generated-sources/java"); 
if (!target.mkdirs()) { 
    throw new IOException("could not create directory"); 
} 
codeModel.build(target); 
Смежные вопросы