3

Mavenプロジェクトでjcodemodelを使用してJavaコードを生成しようとしています。私のMavenプロジェクトには3つのモジュールがあります。テスト目的でモジュールの1つにサンプル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();
        }
    }

}
4

1 に答える 1

3

例外メッセージはかなり明確に見えます:

java.io.IOException:src \ main \ java \ check: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);
于 2012-05-14T11:28:25.007 に答える