Recentemente mi è capitato di rilasciare diversi software java in open source. Allo scopo ho voluto aggiungere, come header di tutti i file java, le informazioni sulla licenza GPLv3, che più o meno è la seguente:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
/******************************************************************************* * [[[Project Description]]] * Copyright (C) 2016 Inspired Soft * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. *******************************************************************************/ |
- L’utilizzo dei template di codice che in Eclipse consente di specificare il formato di ciò che deve essere prodotto per ogni nuovo stub di codice, commento o file (vedi qui);
- L’utilizzo del Copyright tool (download qui) che sfortunatamente sembra non funzionare in presenza di progetti versionati con github;
- L’utilizzo del plugin JAutodoc che automatizza la generazione degli stub javadoc.
Le tre soluzioni si sono rivelate tutte valide nel momento in cui deve essere generata una nuova classe java ma assolutamente inconcludenti per aggiungere header a classi java esistenti, soprattuto se siamo in presenza di progetti di grandi dimensioni.
Per raggiungere il mio scopo ho quindi prodotto una piccola classetta java che scansionasse il mio progetto ed aggiungesse a tutti i file con estensione “.java” le informazioni di licenza sopra citate. Di seguito trovate il codice prodotto, che credo sia sufficientemente commentato.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
package it.inspired.exporter.test; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.util.List; import org.apache.commons.io.FileUtils; public class HeaderFiles { @SuppressWarnings("unchecked") public static void main(String[] args) throws IOException { /* Posizione del codice sorgente */ File dir = new File( "/Users/massimo/Workspace/inspired-open/parco/src/main/java"); /* Estenzione di interesse */ String[] extensions = new String[] { ".java" }; /* Recupera la lista di tutti i file con estensione specificata */ List<File> files = (List<File>) FileUtils.listFiles(dir, extensions, true); /* Recupera il file contenente l'header */ File header = new File( "/Users/massimo/Workspace/inspired-open/model-exporter-test/src/main/resources/header.txt"); /* Aggiunge l'header ad ogni file */ for (File file : files) { System.out.println("file: " + file.getCanonicalPath()); addHeader(header, file); } } /** * Aggiunge l'header al file * @param header File header * @param file File a cui aggiungere l'header */ public static void addHeader(File header, File file) { /* Crea un arrei con i due file da mergiare */ File[] files = new File[] { header, file }; /* Crea il file dove sara' contenuto il risultato del merge */ File mergedFile = new File(file.getAbsoluteFile() + ".tmp"); /* Esegue il merge dei file */ mergeFiles(files, mergedFile); /* Cancella il file originario */ file.delete(); /* Rinomina il file mergiato con il nome del file originario */ mergedFile.renameTo(file); } /** * Esegue il merge di un array di file * * @param files * File da mergiare * @param mergedFile * File mergiato */ public static void mergeFiles(File[] files, File mergedFile) { FileWriter fstream = null; BufferedWriter out = null; try { fstream = new FileWriter(mergedFile, true); out = new BufferedWriter(fstream); } catch (IOException e1) { e1.printStackTrace(); } for (File f : files) { System.out.println("merging: " + f.getName()); FileInputStream fis; try { fis = new FileInputStream(f); BufferedReader in = new BufferedReader(new InputStreamReader( fis)); String aLine; while ((aLine = in.readLine()) != null) { out.write(aLine); out.newLine(); } in.close(); } catch (IOException e) { e.printStackTrace(); } } try { out.close(); } catch (IOException e) { e.printStackTrace(); } } } |