【问题标题】:Code generation using Jcodemodel使用 Jcodemodel 生成代码
【发布时间】:2012-05-14 10:09:00
【问题描述】:

我正在尝试在我的 maven 项目中使用 jcodemodel 生成 java 代码。我的 Maven 项目有三个模块。我已经在我的一个模块中编写了一个示例 jcodemodel 用于测试目的。但是当我执行它时,会在行中抛出错误。但是我创建了目录并进行了检查。我在简单的 Maven 项目中检查了这个例子,它可以工作。但是当我在 Maven 模块中给出它时,它会抛出错误。它在哪里检查构建文件?

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

java.io.IOException: src\main\java\check: 不存在的目录 在 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();
        }
    }

}

【问题讨论】:

  • 首先建议不要在src区创建代码。任何类型的生成的默认目标是 target/whateverdirectory。
  • 嗨,我已经给出了 codeModel.build(new File("target/classes/com/cts"));但得到同样的错误
  • 哪个插件负责创建给定的文件夹(target/classes/com/cts ?

标签: jakarta-ee maven maven-plugin maven-3 maven-release-plugin


【解决方案1】:

异常信息似乎很清楚:

java.io.IOException: src\main\java\check: 不存在的目录 at 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);

【讨论】:

    猜你喜欢
    • 2015-09-01
    • 1970-01-01
    • 2018-06-01
    • 2018-01-16
    • 1970-01-01
    • 2015-01-10
    • 2017-08-13
    • 2011-01-03
    • 2016-11-28
    相关资源
    最近更新 更多