`

给JAVA源代码文件统一地添加licence信息头

    博客分类:
  • java
阅读更多
/**
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.apdplat.platform.util;

import java.io.*;
import java.util.ArrayList;
import java.util.List;
/**
 * 给JAVA源代码文件统一地添加licence信息头
 * 检查文件package、import、类级别注释、是否有public class
 * 用到了Java7的新特性,强大
 * @author ysc
 */
public class AddLicenceForJavaFile {
    private static int count = 0;
    private static List<String> fail = new ArrayList<>();
    private static List<String> wrong = new ArrayList<>();

    public static void main(String[] args) {
        String licence="/**\n" +
" * Licensed to the Apache Software Foundation (ASF) under one or more\n" +
" * contributor license agreements.  See the NOTICE file distributed with\n" +
" * this work for additional information regarding copyright ownership.\n" +
" * The ASF licenses this file to You under the Apache License, Version 2.0\n" +
" * (the \"License\"); you may not use this file except in compliance with\n" +
" * the License.  You may obtain a copy of the License at\n" +
" *\n" +
" *     http://www.apache.org/licenses/LICENSE-2.0\n" +
" *\n" +
" * Unless required by applicable law or agreed to in writing, software\n" +
" * distributed under the License is distributed on an \"AS IS\" BASIS,\n" +
" * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n" +
" * See the License for the specific language governing permissions and\n" +
" * limitations under the License.\n" +
" */";
        addLicenceForJavaFile(new File("D:\\Workspaces\\NetBeansProjects\\APDPlat"),licence);
        System.out.println("为 "+count+" 个Java源代码文件添加licence信息头");
        if(fail.size()>0){
            System.out.println("处理失败个数 "+fail.size());
            for(String f : fail){
                System.out.println("        "+f);
            }
        }
        if(wrong.size()>0){
            System.out.println("JAVA源代码错误个数 "+wrong.size());
            for(String w : wrong){
                System.out.println("        "+w);
            }
        }
    }
    /**
     * 给JAVA源代码文件统一地添加licence信息头
     * @param path 源码所处的根目录
     * @param licence 许可证信息(在netbeans中复制一段文本粘贴到变量的双引号内,IDE自动格式化,相当赞)
     */
    private static void addLicenceForJavaFile(File path, String licence) {
        if (path != null && path.exists()) {
            //处理文件夹
            if (path.isDirectory()) {
                String[] children = path.list();
                for (int i = 0; i < children.length; i++) {
                    File child = new File(path.getPath() + System.getProperty("file.separator") + children[i]);
                    //递归处理
                    addLicenceForJavaFile(child, licence);
                }
            } else {
                //处理java文件
                if (path.getName().toLowerCase().endsWith(".java")) {
                    System.out.println(path.getAbsolutePath());
                    count++;
                    try {
                        byte[] content;
                        try (RandomAccessFile f = new RandomAccessFile(path, "rw")) {
                            content = new byte[ (int) f.length()];
                            f.readFully(content);
                        }
                        String text = new String(content);
                        text = text.trim();
                        while (text.startsWith("/n")) {
                            text = text.substring(1);
                        }
                        //如果已经有同样的licence,则忽略
                        int pos = text.indexOf(licence);
                        if(pos!=-1){
                            return;
                        }
                        //有package声明的,保留package以后的内容
                        if (text.indexOf("package") != -1) {
                            text = text.substring(text.indexOf("package"));
                        }
                        //没有package声明的,有import声明的,保留import以后的内容
                        else if (text.indexOf("package") == -1 && text.indexOf("import") != -1) {
                            text = text.substring(text.indexOf("import"));
                        }
                        //没有package声明也没有import声明的,有类级别注释的,则保留类级别注释以后的内容
                        else if (text.indexOf("package") == -1 && text.indexOf("import") == -1 && text.indexOf("/**") != -1 && text.indexOf("public class") != -1 && text.indexOf("/**")<text.indexOf("public class") ) {
                            text = text.substring(text.indexOf("/**"));
                        }
                        //没有package声明也没有import声明的,也没有类级别注释的则保留public class以后的内容
                        else if (text.indexOf("package") == -1 && text.indexOf("import") == -1 && text.indexOf("public class") != -1 && ( text.indexOf("/**")>text.indexOf("public class") || text.indexOf("/**")==-1 )) {
                            text = text.substring(text.indexOf("public class"));
                        }else{
                            wrong.add(path.getAbsolutePath());
                            return;
                        }
                        try (FileWriter writer = new FileWriter(path)) {
                            writer.write(licence);
                            writer.write("\n\n");
                            writer.write(text);
                        }
                    }
                    catch (Exception ex) {
                        fail.add(path.getAbsolutePath());
                    }
                }
            }
        }
    }
}

 

 

引自APDPlat commit:

 

https://github.com/ysc/APDPlat/commit/ccc6d366727c63016233662190efb5673e2130f3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2
8
分享到:
评论

相关推荐

    JAVA中licence控制实现示例

    在Java编程环境中,许可证(Licence)控制是一个重要的实践,特别是在商业软件开发中,用于确保软件的合法使用和防止非法复制。本示例将聚焦于如何在Java中实现许可证管理功能,通过`KeyGenerater`类和JUnit测试来...

    aspose-words word添加水印的jar和licence文件

    总的来说,"aspose-words word添加水印的jar和licence文件"提供了一套完整的解决方案,让开发人员能够方便地在Word文档中添加水印,从而增强文档的安全性和专业性。使用这个工具,可以大大提高工作效率,同时确保...

    C#3种软件licence开发源代码

    C#3种软件licence开发源代码

    java生成licence工具(带源码)整合版

    java生成licence工具,包含生成、验证功能,可直接使用

    aspose-words添加word水印的jar包,licence文件,实例代码

    `licence文件`通常是指Aspose的产品许可证文件,它包含了授权信息,确保用户合法地使用Aspose.Words库。在实际项目中,需要将这个文件放置在正确的位置,以避免运行时出现许可验证错误。 提供的`实例代码`可能是...

    resip 源代码分析

    resip 源代码分析 在本文中,我们将深入分析 resip 的源代码,了解其架构设计、协议栈的层次结构、SIP 消息的组成元素、Resiprocate 的设计理念等方面。 首先,让我们了解 SIP 协议的层次结构。SIP(Session ...

    Java web License 保护我们的java项目

    web系统Licence验证 保证java web ,可以现在IP,mac,自定义参数,License生成器 (JAVA源码+界面) 其中包括license授权机制的原理和制作license的具体步骤 增加了mac 地址验证

    学生信息管理系统C语言源代码学生信息管理系统C语言源代码

    根据提供的信息,我们可以了解到这是一段用C语言编写的“学生信息管理系统”的源代码。该系统主要用于管理学生的个人信息,如学号、姓名、性别、年龄、总分等,并且能够进行数据的添加、保存和输出等功能。下面我们...

    JavaCard licence Model

    TLDA协议允许开发者访问JavaCard源代码以进行实现工作,包括规范(Specification)和参考实现(Reference Implementation, RI)。这一协议是获取JavaCard技术的基础,对于想要开发JavaCard产品的公司和个人来说至关重要...

    hex对接源代码

    4. **文件结构分析**:压缩包内的`00README`通常是项目说明,提供关于代码的使用和配置信息;`LICENCE`文件包含软件的许可协议,指导用户如何合法使用;`bin`目录可能存放编译后的可执行文件;`cache`可能是程序运行...

    AD13破解文件和licence

    altium desiger 13的licence文件和keygen工具

    UDoc java代码分析uml

    标题 "UDoc Java代码分析UML" 涉及到的是一个工具或库,用于将Java源代码转换成UML(统一建模语言)图表。UML是一种标准的建模语言,广泛应用于软件工程中,它允许开发人员以图形方式表示软件系统的设计和结构。UDoc...

    docx4J 文件源代码 docx4J 2.2.2 source files

    docx4J 文件源代码 docx4J source files docx4j is an open source Java library for manipulating OpenXML WordprocessingML documents, released under the Apache software licence. docx is the default file ...

    jrebel licence

    例如,当开发者在IDE中修改Java代码并保存时,JRebel可以自动检测到这些更改,并将更改直接推送到正在运行的应用服务器上,从而实现几乎无延迟的代码更新。这不仅减少了开发周期,还大大提高了代码调试的效率。 ...

    java aspose文件转化-去水印(保证可用)

    `步骤.txt`文件可能包含了详细的转换和去水印步骤,包括如何导入Aspose库,如何编写Java代码,以及如何配置转换和去水印选项。通常,这些步骤会指导用户如何正确设置项目构建路径,确保`aspose-words-20.1-jdk17.jar...

    abaqus6.9 licence文件

    可以用到2028年

    可用到2038年的Polar SI9000 破解Licence文件

    [资料] 可用到2038年的Polar SI9000 破解Licence文件\r\n\r\n网络上流行的Polar SI9000 V7.1.0的破解Licence文件的到期时间是2013-1-1,马上就要到期,急于寻找解决办法,于是在网上疯找,功夫不负有心人,终于找到...

    JAVA中license控制实现示例.doc

    JAVA中license控制实现示例 在 Java 中,license 控制是指通过生成和验证数字签名来控制软件的使用权限。这种方法广泛应用于 J2EE 应用中,特别是在系统购买的早期,提供有限制的 license 文件对系统进行限制。 在...

    MATLAB 2017a的licence文件,证书文件

    MATLAB 2017a的licence文件,matlab2017a版本证书文件

    xilinx ise13.1 licence 文件

    xilinx ise13.1 licence 文件

Global site tag (gtag.js) - Google Analytics