【问题标题】:Adding copyright info generated java code - Jcodemodel添加版权信息生成的java代码 - Jcodemodel
【发布时间】:2018-01-16 20:31:08
【问题描述】:

我正在使用 JCodeModel 生成 java 源代码。我会在生成的代码中添加版权信息。目前可以吗?

我尝试在 JDefinedClass 中使用javadoc(),它只在类定义上方添加信息。

【问题讨论】:

  • "它只在类定义之上添加信息。"。这不好,因为...?
  • 版权信息应该在包装声明上面吧?
  • 这里不是 Javadoc,它只是像 here 这样的常规注释。如果它不支持这种操作(我从未使用过),您可以以某种非 jcodemodel 的方式添加版权。
  • 您还有其他推荐的方式吗?
  • 老实说,我可能只是重写带有版权信息的文件。不是一个特别有趣或困难的问题 -> 我不会浪费时间。

标签: java jcodemodel


【解决方案1】:

com.sun.codemodel.writer.PrologCodeWriter 正是您正在寻找的

【讨论】:

    【解决方案2】:

    您可以创建一个写入版权标头的CodeWriter。这个CodeWriter 可以委托给另一个——即,你通常会传递给CodeModel#build 方法的那个。

    一个完整的例子:

    import java.io.IOException;
    import java.io.OutputStream;
    
    import com.sun.codemodel.CodeWriter;
    import com.sun.codemodel.JCodeModel;
    import com.sun.codemodel.JPackage;
    import com.sun.codemodel.writer.SingleStreamCodeWriter;
    
    public class HeaderInCodeModel
    {
        public static void main(String[] args) throws Exception
        {
            JCodeModel codeModel = new JCodeModel();
            codeModel._class("com.example.Example");
    
            CodeWriter codeWriter = new SingleStreamCodeWriter(System.out);
    
            String header = "// Copyright 2017 - example.com\n";
            CodeWriter codeWriterWithHeader = 
                createCodeWriterWithHeader(header, codeWriter);
            codeModel.build(codeWriterWithHeader);
        }    
    
        private static CodeWriter createCodeWriterWithHeader(
            String header, CodeWriter delegate)
        {
            CodeWriter codeWriter = new CodeWriter()
            {
                @Override
                public OutputStream openBinary(JPackage pkg, String fileName)
                    throws IOException
                {
                    OutputStream result = delegate.openBinary(pkg, fileName);
                    if (header != null)
                    {
                        result.write(header.getBytes());
                    }
                    return result;
                }
    
                @Override
                public void close() throws IOException
                {
                    delegate.close();
                }
            };
            return codeWriter;
        }
    
    }
    

    生成的类将是

    // Copyright 2017 - example.com
    
    package com.example;
    
    
    public class Example {
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-01
      • 2012-06-15
      • 1970-01-01
      • 2016-07-30
      • 2022-10-23
      • 2012-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多