Author: tchemit Date: 2009-05-17 09:02:35 +0000 (Sun, 17 May 2009) New Revision: 469 Added: maven-helper-plugin/trunk/LICENSE.txt maven-helper-plugin/trunk/README.txt maven-helper-plugin/trunk/changelog.txt maven-helper-plugin/trunk/pom.xml maven-helper-plugin/trunk/src/ maven-helper-plugin/trunk/src/main/ maven-helper-plugin/trunk/src/main/java/ maven-helper-plugin/trunk/src/main/java/org/ maven-helper-plugin/trunk/src/main/java/org/nuiton/ maven-helper-plugin/trunk/src/main/java/org/nuiton/AbstractPlugin.java maven-helper-plugin/trunk/src/main/java/org/nuiton/license/ maven-helper-plugin/trunk/src/main/java/org/nuiton/license/JarLicenseResolver.java maven-helper-plugin/trunk/src/main/java/org/nuiton/license/License.java maven-helper-plugin/trunk/src/main/java/org/nuiton/license/LicenseFactory.java maven-helper-plugin/trunk/src/main/java/org/nuiton/license/LicenseGenerator.java maven-helper-plugin/trunk/src/main/java/org/nuiton/license/LicenseGeneratorFactory.java maven-helper-plugin/trunk/src/main/java/org/nuiton/license/LicenseResolver.java maven-helper-plugin/trunk/src/main/java/org/nuiton/license/plugin/ maven-helper-plugin/trunk/src/main/java/org/nuiton/license/plugin/AvailableLicensesPlugin.java maven-helper-plugin/trunk/src/main/java/org/nuiton/license/plugin/LicensePlugin.java maven-helper-plugin/trunk/src/main/java/org/nuiton/license/plugin/ThirdPartyPlugin.java maven-helper-plugin/trunk/src/main/java/org/nuiton/util/ maven-helper-plugin/trunk/src/main/java/org/nuiton/util/DependencyUtil.java maven-helper-plugin/trunk/src/main/java/org/nuiton/util/FileUpdater.java maven-helper-plugin/trunk/src/main/java/org/nuiton/util/FileUpdaterHelper.java maven-helper-plugin/trunk/src/main/java/org/nuiton/util/FileUtil.java maven-helper-plugin/trunk/src/main/java/org/nuiton/util/MirroredFileUpdater.java maven-helper-plugin/trunk/src/main/java/org/nuiton/util/PluginHelper.java maven-helper-plugin/trunk/src/main/java/org/nuiton/util/package.html maven-helper-plugin/trunk/src/main/resources/ maven-helper-plugin/trunk/src/main/resources/META-INF/ maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/ maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/gpl_v1/ maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/gpl_v1/header.txt maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/gpl_v1/license.txt maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/gpl_v2/ maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/gpl_v2/header.txt maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/gpl_v2/license.txt maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/gpl_v3/ maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/gpl_v3/header.txt maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/gpl_v3/license.txt maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/lgpl_v2_1/ maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/lgpl_v2_1/header.txt maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/lgpl_v2_1/license.txt maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/lgpl_v3/ maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/lgpl_v3/header.txt maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/lgpl_v3/license.txt maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/licenses.properties maven-helper-plugin/trunk/src/main/resources/assemblies/ maven-helper-plugin/trunk/src/main/resources/assemblies/deps.xml maven-helper-plugin/trunk/src/main/resources/assemblies/full.xml maven-helper-plugin/trunk/src/site/ maven-helper-plugin/trunk/src/site/rst/ maven-helper-plugin/trunk/src/site/rst/Todo.rst maven-helper-plugin/trunk/src/site/rst/index.rst maven-helper-plugin/trunk/src/site/site.xml maven-helper-plugin/trunk/src/test/ maven-helper-plugin/trunk/src/test/java/ maven-helper-plugin/trunk/src/test/java/org/ maven-helper-plugin/trunk/src/test/java/org/nuiton/ maven-helper-plugin/trunk/src/test/java/org/nuiton/license/ maven-helper-plugin/trunk/src/test/java/org/nuiton/license/BaseLicenseTestCase.java maven-helper-plugin/trunk/src/test/java/org/nuiton/license/JarLicenseResolverTest.java maven-helper-plugin/trunk/src/test/java/org/nuiton/license/LicenseFactoryTest.java maven-helper-plugin/trunk/src/test/java/org/nuiton/license/LicenseGeneratorFactoryTest.java maven-helper-plugin/trunk/src/test/java/org/nuiton/license/LicenseResolverTest.java maven-helper-plugin/trunk/src/test/java/org/nuiton/license/plugin/ maven-helper-plugin/trunk/src/test/java/org/nuiton/license/plugin/LicensePluginTest.java maven-helper-plugin/trunk/src/test/java/org/nuiton/util/ maven-helper-plugin/trunk/src/test/java/org/nuiton/util/BasePluginTestCase.java maven-helper-plugin/trunk/src/test/java/org/nuiton/util/JavaDummy.java maven-helper-plugin/trunk/src/test/java/org/nuiton/util/JavaFileUpdaterTest.java maven-helper-plugin/trunk/src/test/java/org/nuiton/util/JaxxDummy.java maven-helper-plugin/trunk/src/test/java/org/nuiton/util/JaxxFileUpdaterTest.java maven-helper-plugin/trunk/src/test/java/org/nuiton/util/PluginConfig.java maven-helper-plugin/trunk/src/test/resources/ maven-helper-plugin/trunk/src/test/resources/log4j.properties maven-helper-plugin/trunk/src/test/resources/org/ maven-helper-plugin/trunk/src/test/resources/org/nuiton/ maven-helper-plugin/trunk/src/test/resources/org/nuiton/license/ maven-helper-plugin/trunk/src/test/resources/org/nuiton/license/plugin/ maven-helper-plugin/trunk/src/test/resources/org/nuiton/license/plugin/LicensePluginTest/ maven-helper-plugin/trunk/src/test/resources/org/nuiton/license/plugin/LicensePluginTest/licenseOne.txt maven-helper-plugin/trunk/src/test/resources/org/nuiton/license/plugin/LicensePluginTest/testOne.xml maven-helper-plugin/trunk/src/test/resources/org/nuiton/util/ maven-helper-plugin/trunk/src/test/resources/org/nuiton/util/JaxxDummy.jaxx Modified: maven-helper-plugin/trunk/ Log: first import Property changes on: maven-helper-plugin/trunk ___________________________________________________________________ Name: svn:ignore + target Added: maven-helper-plugin/trunk/LICENSE.txt =================================================================== --- maven-helper-plugin/trunk/LICENSE.txt (rev 0) +++ maven-helper-plugin/trunk/LICENSE.txt 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,166 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. + Added: maven-helper-plugin/trunk/README.txt =================================================================== --- maven-helper-plugin/trunk/README.txt (rev 0) +++ maven-helper-plugin/trunk/README.txt 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,2 @@ +To deploy new version of pom: mvn deploy +To install localy: mvn install Added: maven-helper-plugin/trunk/changelog.txt =================================================================== --- maven-helper-plugin/trunk/changelog.txt (rev 0) +++ maven-helper-plugin/trunk/changelog.txt 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,2 @@ +1.0.0 ? + * first release Added: maven-helper-plugin/trunk/pom.xml =================================================================== --- maven-helper-plugin/trunk/pom.xml (rev 0) +++ maven-helper-plugin/trunk/pom.xml 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,516 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <modelVersion>4.0.0</modelVersion> + + <!-- ************************************************************* --> + <!-- *** POM Relationships *************************************** --> + <!-- ************************************************************* --> + + <groupId>org.nuiton</groupId> + <artifactId>maven-helper-plugin</artifactId> + + <version>1.0.0-alpha-1-SNAPSHOT</version> + + <dependencies> + + <!-- compile dependencies --> + + <dependency> + <groupId>commons-logging</groupId> + <artifactId>commons-logging</artifactId> + <version>1.1.1</version> + </dependency> + + <!--dependency> + <groupId>org.apache.maven.enforcer</groupId> + <artifactId>enforcer-api</artifactId> + <version>1.0-beta-1</version> + </dependency--> + + <dependency> + <groupId>org.apache.maven.shared</groupId> + <artifactId>maven-dependency-tree</artifactId> + <version>1.2</version> + </dependency> + + <dependency> + <groupId>org.codehaus.plexus</groupId> + <artifactId>plexus-utils</artifactId> + <version>1.5.5</version> + <!--scope>provided</scope--> + </dependency> + + <!-- provided dependencies --> + + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-project</artifactId> + <version>${maven.version}</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-core</artifactId> + <version>${maven.version}</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-artifact</artifactId> + <version>${maven.version}</version> + <scope>provided</scope> + </dependency> + <dependency> + <groupId>org.apache.maven</groupId> + <artifactId>maven-plugin-api</artifactId> + <version>${maven.version}</version> + <scope>provided</scope> + </dependency> + + <!-- tests dependencies --> + + <dependency> + <groupId>org.apache.maven.shared</groupId> + <artifactId>maven-plugin-testing-harness</artifactId> + <version>1.1</version> + <scope>test</scope> + </dependency> + + <!--dependency> + <groupId>org.apache.maven.shared</groupId> + <artifactId>maven-verifier</artifactId> + <version>1.0</version> + <scope>test</scope> + </dependency--> + + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <version>4.6</version> + <scope>test</scope> + </dependency> + + </dependencies> + + <!-- ************************************************************* --> + <!-- *** Project Information ************************************* --> + <!-- ************************************************************* --> + <name>Maven helper plugin</name> + + <url>${site.home.url}</url> + + <description>Plugin d'aide pour les projets nuiton</description> + <inceptionYear>2009</inceptionYear> + + <organization> + <name>CodeLutin</name> + <url>http://www.codelutin.com/</url> + </organization> + + <licenses> + <license> + <name>LGPL</name> + <url>http://www.gnu.org/licenses/lgpl.txt</url> + <distribution>repo</distribution> + </license> + </licenses> + + <developers> + <developer> + <id>tchemit</id> + <name>Tony Chemit</name> + <email>chemit@codelutin.com</email> + <organization>CodeLutin</organization> + <roles> + <role>Développeur</role> + </roles> + <timezone>+2</timezone> + </developer> + </developers> + + <!-- ************************************************************* --> + <!-- *** Build Settings ****************************************** --> + <!-- ************************************************************* --> + + <packaging>maven-plugin</packaging> + + <properties> + + <maven.version>2.0.10</maven.version> + + <maven.src.dir>${basedir}/src</maven.src.dir> + <maven.compile.source>1.6</maven.compile.source> + <maven.compile.target>1.6</maven.compile.target> + + <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> + <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> + + <maven.test.testFailureIgnore>false</maven.test.testFailureIgnore> + <maven.test.skip>false</maven.test.skip> + <maven.test.forkMode>once</maven.test.forkMode> + + <repository.home.url>http://lutinbuilder.labs.libre-entreprise.org/m2/nuiton/release</repository.home.url> + + <site.home.url>http://www.nuiton.org/embedded/${project.artifactId}</site.home.url> + + </properties> + + <build> + + <defaultGoal>install</defaultGoal> + + <testResources> + <testResource> + <directory>${maven.src.dir}/test/resources</directory> + <includes> + <include>**/*</include> + </includes> + <excludes> + <exclude>**/*~</exclude> + </excludes> + </testResource> + </testResources> + + <plugins> + + <plugin> + <artifactId>maven-plugin-plugin</artifactId> + <executions> + <execution> + <goals> + <goal>helpmojo</goal> + </goals> + </execution> + </executions> + </plugin> + + <plugin> + <artifactId>maven-antrun-plugin</artifactId> + <executions> + <!--Copy licenses files for site--> + <execution> + <id>copy-licenses</id> + <phase>pre-site</phase> + <configuration> + <tasks> + <mkdir dir="target/site" /> + <copy todir="target/site" verbose="${maven.verbose}" overwrite="false"> + <fileset dir="${maven.src.dir}/main/resources/META-INF"> + <include name="licenses/**" /> + </fileset> + </copy> + </tasks> + </configuration> + <goals> + <goal>run</goal> + </goals> + </execution> + </executions> + </plugin> + + <plugin> + <artifactId>maven-jar-plugin</artifactId> + <executions> + <execution> + <id>attach-test</id> + <goals> + <goal>test-jar</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + + <pluginManagement> + + <plugins> + + <plugin> + <artifactId>maven-resources-plugin</artifactId> + <version>2.3</version> + <configuration> + <encoding>${project.build.sourceEncoding}</encoding> + </configuration> + </plugin> + + <plugin> + <artifactId>maven-compiler-plugin</artifactId> + <version>2.0.2</version> + <configuration> + <source>${maven.compile.source}</source> + <target>${maven.compile.target}</target> + <encoding>${project.build.sourceEncoding}</encoding> + </configuration> + </plugin> + + <plugin> + <artifactId>maven-surefire-plugin</artifactId> + <version>2.4.3</version> + <configuration> + <skip>${maven.test.skip}</skip> + <testFailureIgnore>${maven.test.testFailureIgnore}</testFailureIgnore> + <forkMode>${maven.test.forkMode}</forkMode> + </configuration> + </plugin> + + <plugin> + <artifactId>maven-source-plugin</artifactId> + <version>2.1</version> + <inherited>true</inherited> + <executions> + <execution> + <id>attach-sources</id> + <goals> + <goal>jar</goal> + </goals> + </execution> + <execution> + <id>attach-test-sources</id> + <goals> + <goal>test-jar</goal> + </goals> + </execution> + </executions> + </plugin> + + <plugin> + <artifactId>maven-javadoc-plugin</artifactId> + <version>2.4</version> + <configuration> + <docencoding>${project.reporting.outputEncoding}</docencoding> + <encoding>${project.reporting.outputEncoding}</encoding> + <charset>${project.reporting.outputEncoding}</charset> + <quiet>true</quiet> + <!-- uniquement a partir de javadoc 2.5 --> + <!--skip>${maven.javadoc.skip}</skip--> + </configuration> + <executions> + <execution> + <id>attach-javadocs</id> + <goals> + <goal>jar</goal> + </goals> + </execution> + </executions> + + </plugin> + + <plugin> + <artifactId>maven-site-plugin</artifactId> + <version>2.0</version> + <configuration> + <locales>fr</locales> + <siteDirectory>src/site</siteDirectory> + <inputEncoding>${project.reporting.outputEncoding}</inputEncoding> + <outputEncoding>${project.reporting.outputEncoding}</outputEncoding> + <generateReports>true</generateReports> + </configuration> + <!-- pas utilisable avant release du module --> + <!--dependencies> + <dependency> + <groupId>org.nuiton</groupId> + <artifactId>doxia-module-jrst</artifactId> + <version>1.0.2-alpha-1</version> + </dependency> + </dependencies--> + </plugin> + + <plugin> + <artifactId>maven-release-plugin</artifactId> + <version>2.0-beta-9</version> + </plugin> + + <plugin> + <artifactId>maven-plugin-plugin</artifactId> + <version>2.5</version> + </plugin> + + </plugins> + </pluginManagement> + </build> + + + <reporting> + <plugins> + + <!-- The Project Info Reports Plugin has twelve goals: + see http://maven.apache.org/plugins/maven-project-info-reports-plugin + --> + <plugin> + <artifactId>maven-project-info-reports-plugin</artifactId> + <!-- TODO il faut que la version patche soit en org.nuiton --> + <!--version>2.1.1-cl</version--> + <!--version>2.1.2</version--> + <configuration> + <webAccessUrl>http://www.nuiton.org/repositories/browse/${project.artifactId}/trunk</webAccessUrl> + </configuration> + </plugin> + + <plugin> + <artifactId>maven-javadoc-plugin</artifactId> + <version>2.4</version> + <configuration> + <quiet>true</quiet> + <docencoding>${project.build.sourceEncoding}</docencoding> + <encoding>${project.build.sourceEncoding}</encoding> + </configuration> + </plugin> + + <!-- changelog:changelog + changelog:dev-activity + changelog:file-activity --> + <plugin> + <artifactId>maven-changelog-plugin</artifactId> + <version>2.1</version> + </plugin> + + <!-- Implicit add of reportSet to not generate jira reports --> + <plugin> + <artifactId>maven-changes-plugin</artifactId> + <version>2.1</version> + <reportSets> + <reportSet> + <reports> + <report>changes-report</report> + </reports> + </reportSet> + </reportSets> + </plugin> + + <plugin> + <artifactId>maven-checkstyle-plugin</artifactId> + <version>2.2</version> + <configuration> + <encoding>${project.reporting.outputEncoding}</encoding> + </configuration> + </plugin> + + <plugin> + <artifactId>maven-pmd-plugin</artifactId> + <version>2.4</version> + <configuration> + <linkXRef>true</linkXRef> + <sourceEncoding>${project.reporting.outputEncoding}</sourceEncoding> + <minimumTokens>100</minimumTokens> + <targetJdk>${maven.compile.target}</targetJdk> + </configuration> + + </plugin> + + <plugin> + <artifactId>maven-jxr-plugin</artifactId> + <version>2.1</version> + </plugin> + + <plugin> + <artifactId>maven-surefire-report-plugin</artifactId> + <version>2.4.3</version> + </plugin> + + <plugin> + <artifactId>maven-plugin-plugin</artifactId> + <version>2.5</version> + </plugin> + + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>cobertura-maven-plugin</artifactId> + <version>2.2</version> + </plugin> + + </plugins> + </reporting> + + <!-- ************************************************************* --> + <!-- *** Build Environment ************************************** --> + <!-- ************************************************************* --> + + <!--Source control management--> + <scm> + <connection>scm:svn:svn://anonymous@labs.libre-entreprise.org/svnroot/lutinbuilder/maven-helper-skin/trunk</connection> + <developerConnection>scm:svn:svn+ssh://tchemit@labs.libre-entreprise.org/svnroot/lutinbuilder/maven-helper-skin/trunk</developerConnection> + <url>http://labs.libre-entreprise.org/plugins/scmsvn/viewcvs.php/maven-helper-skin/trunk?root=lutinbuilder</url> + <!-- a utiliser quand on sera sur nuiton --> + <!--connection>scm:svn:http://svn.nuiton.org/svn/${project.artifactId}/trunk</connection> + <developerConnection>scm:svn:http://svn.nuiton.org/svn/${project.artifactId}/trunk</developerConnection> + <url>http://svn.nuiton.org/svn/${project.artifactId}/trunk</url--> + </scm> + + <issueManagement> + <system>Redmine</system> + <url>http://www.nuiton.org/projects/${project.artifactId}/issues/</url> + </issueManagement> + + <distributionManagement> + <repository> + <id>nuiton</id> + <url>scpexe://labs.libre-entreprise.org/home/groups/lutinbuilder/htdocs/m2/nuiton/release</url> + </repository> + <snapshotRepository> + <id>nuiton</id> + <url>scpexe://labs.libre-entreprise.org/home/groups/lutinbuilder/htdocs/m2/nuiton/snapshot</url> + </snapshotRepository> + <site> + <id>nuiton</id> + <url>scpexe://labs.libre-entreprise.org/home/groups/lutinbuilder/htdocs/nuiton/${project.artifactId}</url> + <!--url>scpexe://www.nuiton.org/var/lib/redmine-nuiton/project-site/${project.artifactId}</url--> + </site> + </distributionManagement> + + <ciManagement> + <system>hudson</system> + <url>http://hudson.codelutin.com</url> + <notifiers> + <notifier> + <address>admin+hudson@codelutin.com</address> + <configuration> + <recipients>dev@codelutin.com</recipients> + </configuration> + </notifier> + </notifiers> + </ciManagement> + + <profiles> + <!-- perform only on a release stage when using the maven-release-plugin --> + <profile> + <id>release-profile</id> + <activation> + <property> + <name>performRelease</name> + <value>true</value> + </property> + </activation> + + <build> + <plugins> + + <!-- always compute source jar --> + <plugin> + <artifactId>maven-source-plugin</artifactId> + <executions> + <execution> + <id>attach-sources</id> + </execution> + <execution> + <id>attach-test-sources</id> + </execution> + </executions> + </plugin> + + <!-- always compute javadoc jar --> + <plugin> + <artifactId>maven-javadoc-plugin</artifactId> + <executions> + <execution> + <id>attach-javadocs</id> + </execution> + </executions> + </plugin> + + </plugins> + </build> + </profile> + </profiles> + +</project> Added: maven-helper-plugin/trunk/src/main/java/org/nuiton/AbstractPlugin.java =================================================================== --- maven-helper-plugin/trunk/src/main/java/org/nuiton/AbstractPlugin.java (rev 0) +++ maven-helper-plugin/trunk/src/main/java/org/nuiton/AbstractPlugin.java 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,300 @@ +/** + * *##% Plugin maven pour switcher les licenses + * Copyright (C) 2008 CodeLutin + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* + */ +package org.nuiton; + +import java.io.ByteArrayInputStream; +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugin.MojoFailureException; +import org.apache.maven.project.MavenProject; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import org.codehaus.plexus.util.DirectoryScanner; +import org.codehaus.plexus.util.FileUtils; +import org.codehaus.plexus.util.io.RawInputStreamFacade; +import org.nuiton.util.FileUtil; +import org.nuiton.util.MirroredFileUpdater; + +/** + * Un MOJO de base pour les autres MOJO concrets avec les options communes. + * + * @author chemit + */ +public abstract class AbstractPlugin extends AbstractMojo { + + protected abstract boolean ensurePackaging(); + + /** + * la methode qui est lancee au debut de la methode {@link #execute()} pour preparer l'init du goal. + * + * @return <code>true</code> if there is something to generate, <code>false</code> otherwise. + * @throws Exception if any + */ + protected abstract boolean init() throws Exception; + + /** + * Do plugin action. + * <p/> + * The method {@link #execute()} invoke this method only and only if : + * <ul> + * <li>{@link #ensurePackaging()} returns <code>false</code> (filtrer project type, for example).</li> + * <li>method {@link #init()} returns <code>true</code>.</li> + * </ul> + * + * @throws Exception if any + */ + protected abstract void doAction() throws Exception; + protected final String skipAfterInitMessage; + + protected AbstractPlugin(String skipAfterInitMessage) { + this.skipAfterInitMessage = skipAfterInitMessage; + } + + @Override + public void execute() throws MojoExecutionException, MojoFailureException { + try { + + if (ensurePackaging()) { + getLog().info("skip goal for packaging " + getProject().getPackaging()); + return; + } + + boolean canContinue = init(); + + if (!canContinue) { + getLog().info(skipAfterInitMessage); + return; + } + + doAction(); + + } catch (Exception e) { + throw new MojoExecutionException("could not init goal " + getClass().getSimpleName() + " for reason : " + e.getMessage(), e); + } + } + + public abstract MavenProject getProject(); + + public abstract void setProject(MavenProject project); + + public abstract boolean isVerbose(); + + public abstract void setVerbose(boolean verbose); + + /** + * Does the actual copy of the file and logging. + * + * @param srcFile represents the file to copy. + * @param destFile file name of destination file. + * + * @throws MojoExecutionException with a message if an + * error occurs. + */ + protected void copyFile(File srcFile, File destFile) + throws MojoExecutionException { + try { + getLog().info("Copying " + srcFile.getName() + " to " + destFile); + + FileUtils.copyFile(srcFile, destFile); + + } catch (Exception e) { + throw new MojoExecutionException("Error copying from " + srcFile + " to " + destFile, e); + } + } + + /** + * Does the actual copy of the content to a fileand logging. + * + * @param content represents the content to writeFile into file. + * @param destFile file name of destination file. + * @param encoding encoding to use to writeFile file + * @throws MojoExecutionException with a message if an + * error occurs. + */ + protected void copyFile(String content, File destFile, String encoding) + throws MojoExecutionException { + try { + getLog().info("Copying content to " + destFile); + + InputStream in = new ByteArrayInputStream(content.getBytes(encoding)); + RawInputStreamFacade facade = new RawInputStreamFacade(in); + + FileUtils.copyStreamToFile(facade, destFile); + + } catch (Exception e) { + throw new MojoExecutionException("Error copying content to " + destFile, e); + } + } + + public void writeFile(File destFile, String content, String encoding) throws IOException { + FileUtil.write(destFile, content, encoding); + } + + /** + * Test if a file exists and is newer than the pom file. + * + * @param f the file to test + * @return <code>true</code> if file exists and is newer than the pom file, + * <code>false</code> otherwise. + */ + protected boolean isFileNewerThanPomFile(File f) { + File pomFile = getProject().getFile(); + return f.exists() && f.lastModified() > pomFile.lastModified(); + } + + protected void getFilesToTreateForRoots(String[] includes, String[] excludes, List<String> roots, Map<File, String[]> files, MirroredFileUpdater updater) { + + DirectoryScanner ds = new DirectoryScanner(); + ds.setIncludes(includes); + if (excludes != null) { + ds.setExcludes(excludes); + + } + for (String src : roots) { + + File f = new File(src); + if (!f.exists()) { + // do nothing on a non-existent + continue; + } + + if (isVerbose()) { + getLog().info("discovering java source files in root " + src); + } + + ds.setBasedir(f); + // scan + ds.scan(); + + // get files + String[] tmp = ds.getIncludedFiles(); + + if (tmp.length < 1) { + // no files found + continue; + } + + List<String> toTreate = new ArrayList<String>(); + + if (updater != null) { + updater.setSourceDirectory(f); + } + + + for (String filePath : tmp) { + File srcFile = new File(f, filePath); + // check file is up-to-date + if (updater == null || !updater.isFileUpToDate(srcFile)) { + toTreate.add(filePath); + } + } + + + if (toTreate.isEmpty()) { + // no file or all are up-to-date + continue; + } + + // register files + files.put(f, toTreate.toArray(new String[toTreate.size()])); + + } + } + + protected Map<String, String> getFilesToTreate(String[] includes, String[] excludes, File srcDir, MirroredFileUpdater updater) { + + Map<String, String> result = new java.util.TreeMap<String, String>(); + + DirectoryScanner ds = new DirectoryScanner(); + ds.setIncludes(includes); + if (excludes != null) { + ds.setExcludes(excludes); + + } + + if (!srcDir.exists()) { + // do nothing on a non-existent + return result; + } + + if (isVerbose()) { + getLog().info("discovering files for " + srcDir); + } + + ds.setBasedir(srcDir); + // scan + ds.scan(); + + // get files + String[] tmp = ds.getIncludedFiles(); + + if (tmp.length < 1) { + // no files found + return result; + } + + List<String> toTreate = new ArrayList<String>(); + + if (updater != null) { + updater.setSourceDirectory(srcDir); + } + + for (String filePath : tmp) { + File srcFile = new File(srcDir, filePath); + File mirrorFile = updater.getMirrorFile(srcFile); + // check file is up-to-date + if (updater == null || !updater.isFileUpToDate(srcFile)) { + result.put(filePath, mirrorFile.getAbsolutePath()); + toTreate.add(filePath); + } + } + + + if (toTreate.isEmpty()) { + // no file or all are up-to-date + return result; + } + + // register files + return result; + } + + protected void addCompileSourceRoots(File srcDir) { + if (!getProject().getCompileSourceRoots().contains(srcDir.getPath())) { + if (isVerbose()) { + getLog().info("adding source roots : " + srcDir.getPath()); + } + getProject().addCompileSourceRoot(srcDir.getPath()); + } + } + + protected void removeCompileSourceRoots(File srcDir) { + if (getProject().getCompileSourceRoots().contains(srcDir.getPath())) { + if (isVerbose()) { + getLog().info("removing source roots : " + srcDir.getPath()); + } + getProject().getCompileSourceRoots().remove(srcDir.getPath()); + } + } +} Added: maven-helper-plugin/trunk/src/main/java/org/nuiton/license/JarLicenseResolver.java =================================================================== --- maven-helper-plugin/trunk/src/main/java/org/nuiton/license/JarLicenseResolver.java (rev 0) +++ maven-helper-plugin/trunk/src/main/java/org/nuiton/license/JarLicenseResolver.java 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,33 @@ +package org.nuiton.license; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.io.File; +import java.net.URL; + +/** + * Un resolver de license dans le classpath. + * <p/> + * Le chemin de base est le suivant : + * <pre> + * /META-INF/licenses/ + * </pre> + * + * @author chemit + * @see LicenseResolver + */ +public class JarLicenseResolver extends LicenseResolver { + + protected static final Log log = LogFactory.getLog(JarLicenseResolver.class); + + public JarLicenseResolver() { + super(acquireBaseURL()); + } + + protected static String acquireBaseURL() { + String prefix = File.separator + "META-INF" + File.separator + "licenses"; + URL licenseURL = JarLicenseResolver.class.getResource(prefix); + return licenseURL.toString(); + } +} Added: maven-helper-plugin/trunk/src/main/java/org/nuiton/license/License.java =================================================================== --- maven-helper-plugin/trunk/src/main/java/org/nuiton/license/License.java (rev 0) +++ maven-helper-plugin/trunk/src/main/java/org/nuiton/license/License.java 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,89 @@ +package org.nuiton.license; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.Reader; +import java.io.InputStream; +import java.net.URL; +import org.codehaus.plexus.util.IOUtil; + +/** + * The model of a license. + * + * @author chemit + */ +public class License { + + /** the name of the licenses (ex lgpl-3.0) */ + protected String name; + /** url of the license's content */ + protected URL licenseURL; + /** url of the header's template */ + protected URL headerURL; + + public License() { + } + + public String getName() { + return name; + } + + public URL getLicenseURL() { + return licenseURL; + } + + public URL getHeaderURL() { + return headerURL; + } + + public String getLicenseContent(String encoding) throws IOException { + if (licenseURL == null) { + throw new IllegalStateException("no licenseURL defined in " + this); + } + + InputStream inputStream = licenseURL.openStream(); + Reader r = new BufferedReader(new InputStreamReader(inputStream, encoding)); + try { + return IOUtil.toString(r); +// return FileUtil.readAsString(r); + } finally { + r.close(); + } + } + + public String getHeaderContent(String encoding) throws IOException { + if (headerURL == null) { + throw new IllegalStateException("no headerURL defined in " + this); + } + Reader r = new BufferedReader(new InputStreamReader(headerURL.openStream(), encoding)); + try { + return IOUtil.toString(r); +// return FileUtil.readAsString(r); + } finally { + r.close(); + } + } + + public void setName(String name) { + this.name = name; + } + + public void setLicenseURL(URL licenseURL) { + this.licenseURL = licenseURL; + } + + public void setHeaderURL(URL headerURL) { + this.headerURL = headerURL; + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(super.toString()); + sb.append("<name:").append(name); + sb.append(", licenseURL:").append(licenseURL.toString()); + sb.append(", headerURL:").append(headerURL.toString()); + sb.append(">"); + return sb.toString(); + } +} Added: maven-helper-plugin/trunk/src/main/java/org/nuiton/license/LicenseFactory.java =================================================================== --- maven-helper-plugin/trunk/src/main/java/org/nuiton/license/LicenseFactory.java (rev 0) +++ maven-helper-plugin/trunk/src/main/java/org/nuiton/license/LicenseFactory.java 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,73 @@ +package org.nuiton.license; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.TreeMap; + +/** + * Class responsible of instanciate {@link License}. + * <p/> + * The factory use a table of {@link #resolvers} to lookup for licenses. + * <p/> + * To obtain an instance of a {@link org.nuiton.license.LicenseFactory} use the method {@link #newInstance(String[])}. + * + * @author chemit + */ +public class LicenseFactory { + + protected List<LicenseResolver> resolvers; + + public static LicenseFactory newInstance(String... extraResolvers) throws IllegalArgumentException { + LicenseFactory result = new LicenseFactory(); + // always put jar resolver first + result.addResolver(new JarLicenseResolver()); + + if (extraResolvers != null) { + for (String extraResolver : extraResolvers) { + if (extraResolver != null && !extraResolver.trim().isEmpty()) { + // add a extra resolver + result.addResolver(new LicenseResolver(extraResolver)); + } + } + } + return result; + } + + public void addResolver(LicenseResolver licenseResolver) { + resolvers.add(licenseResolver); + } + + public Map<String, String> getLicenseNames() throws IllegalArgumentException { + Map<String, String> result = new TreeMap<String, String>(); + for (LicenseResolver resolver : resolvers) { + Map<String, String> tmp = resolver.getLicenseNames(); + for (Entry<String, String> s : tmp.entrySet()) { + if (!result.containsKey(s.getKey())) { + result.put(s.getKey(), s.getValue()); + } + } + } + return result; + } + + + public License revolv(String licenseName) throws IllegalArgumentException { + if (licenseName == null) { + throw new IllegalArgumentException("licenseName can not be null"); + } + for (LicenseResolver resolver : resolvers) { + License result = resolver.resolv(licenseName); + if (result != null) { + return result; + } + } + throw new IllegalArgumentException("could not find the license " + licenseName + " with resolvers" + resolvers); + } + + protected LicenseFactory() throws IllegalArgumentException { + this.resolvers = new ArrayList<LicenseResolver>(); + } + +} Added: maven-helper-plugin/trunk/src/main/java/org/nuiton/license/LicenseGenerator.java =================================================================== --- maven-helper-plugin/trunk/src/main/java/org/nuiton/license/LicenseGenerator.java (rev 0) +++ maven-helper-plugin/trunk/src/main/java/org/nuiton/license/LicenseGenerator.java 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,12 @@ +package org.nuiton.license; + +/** + * A simple Contract to generate a new header for a given type of file + * + * @author chemit + */ +public interface LicenseGenerator { + + String getHeader(String licenseHeaderContent); + +} Added: maven-helper-plugin/trunk/src/main/java/org/nuiton/license/LicenseGeneratorFactory.java =================================================================== --- maven-helper-plugin/trunk/src/main/java/org/nuiton/license/LicenseGeneratorFactory.java (rev 0) +++ maven-helper-plugin/trunk/src/main/java/org/nuiton/license/LicenseGeneratorFactory.java 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,73 @@ +package org.nuiton.license; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * A factory of {@link LicenseFactory} + * + * @author chemit + */ +public class LicenseGeneratorFactory { + + public static class LicenceGeneratorContext { + + File src; + String[] files; + + public LicenceGeneratorContext(File src, String[] files) { + this.src = src; + this.files = files; + } + + public File getSrc() { + return src; + } + + public String[] getFiles() { + return files; + } + + public void setSrc(File src) { + this.src = src; + } + + public void setFiles(String[] files) { + this.files = files; + } + + } + + protected static Map<LicenseGenerator, List<String>> availableGenerator; + + public static Map<LicenseGenerator, List<String>> getAvailableGenerator() { + if (availableGenerator == null) { + availableGenerator = new HashMap<LicenseGenerator, List<String>>(); + } + return availableGenerator; + } + + public static List<String> getGeneratorMatchers(LicenseGenerator generator) { + List<String> result = null; + if (availableGenerator != null) { + result = availableGenerator.get(generator); + if (result == null) { + // add a new empty list in cache + result = new ArrayList<String>(); + availableGenerator.put(generator, result); + } + } + return result; + } + + public static void addGenerator(LicenseGenerator generator, String matcher) { + List<String> matchers = getGeneratorMatchers(generator); + if (matcher.isEmpty() || !matcher.contains(matcher)) { + matchers.add(matcher); + } + } + +} Added: maven-helper-plugin/trunk/src/main/java/org/nuiton/license/LicenseResolver.java =================================================================== --- maven-helper-plugin/trunk/src/main/java/org/nuiton/license/LicenseResolver.java (rev 0) +++ maven-helper-plugin/trunk/src/main/java/org/nuiton/license/LicenseResolver.java 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,136 @@ +package org.nuiton.license; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Collections; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Properties; +import java.util.TreeMap; + +/** + * Un resolver de license a partir d'un {@link #baseURL} . + * <p/> + * On doit avoir un fichier + * <pre>baseURL/licenses.txt + * </pre> qui contient la liste des licenses gerees par ce resolver. + * <p/> + * Chaque license est definit par deux fichiers : + * <pre> + * baseURL/licenseName/license.txt + * baseURL/licenseName/header.txt + * </pre> + * + * @author chemit + */ +public class LicenseResolver { + + protected static final Log log = LogFactory.getLog(LicenseResolver.class); + + /** + * BaseURL + * + * @required + */ + protected String baseURL; + + /** list of known licenses with this resolver */ + protected Map<String, String> licenseNames; + + public LicenseResolver() { + } + + public LicenseResolver(String baseURL) { + this.baseURL = baseURL; + } + + public String getBaseURL() { + return baseURL; + } + + public void setBaseURL(String baseURL) { + this.baseURL = baseURL; + // reset licenseNames + licenseNames = null; + } + + public Map<String, String> getLicenseNames() { + if (licenseNames == null) { + if (baseURL == null || baseURL.trim().isEmpty()) { + throw new IllegalArgumentException("no baseURL defined in " + this); + } + + Map<String, String> list = new TreeMap<String, String>(); + try { + URL licenseURL = new URL(baseURL + "/licenses.properties"); + + if (!checkExists(licenseURL)) { + throw new IllegalArgumentException("no licenses.properties found withurl [" + licenseURL + "] for resolver " + this); + } + Properties p = new Properties(); + p.load(licenseURL.openStream()); + for (Entry<Object, Object> entry : p.entrySet()) { + list.put((String) entry.getKey(), entry.getValue() + " [" + baseURL + "]"); + } + } catch (MalformedURLException e) { + throw new IllegalArgumentException(e); + } catch (IOException e) { + return null; + } + + licenseNames = Collections.unmodifiableMap(list); + } + return licenseNames; + } + + public License resolv(String licenseName) throws IllegalArgumentException { + if (baseURL == null || baseURL.trim().isEmpty()) { + throw new IllegalArgumentException("no baseURL defined in " + this); + } + if (licenseName == null || licenseName.trim().isEmpty()) { + throw new IllegalArgumentException("licenceName can not be null"); + } + licenseName = licenseName.trim().toLowerCase(); + + if (!getLicenseNames().containsKey(licenseName)) { + // license not found + return null; + } + + try { + URL licenseURL = new URL(baseURL + "/" + licenseName + "/license.txt"); + URL headerURL = new URL(baseURL + "/" + licenseName + "/header.txt"); + + if (!checkExists(licenseURL) || !checkExists(headerURL)) { + // no content find + return null; + } + + License license = new License(); + license.setName(licenseName); + license.setLicenseURL(licenseURL); + license.setHeaderURL(headerURL); + return license; + + + } catch (MalformedURLException e) { + throw new IllegalArgumentException(e); + } catch (IOException e) { + return null; + } + } + + @Override + public String toString() { + return super.toString() + "<baseURL:" + baseURL + ", licenseNames:" + licenseNames + ">"; + } + + protected boolean checkExists(URL url) throws IOException { + return url.openConnection().getContentLength() > 0; + } + +} \ No newline at end of file Added: maven-helper-plugin/trunk/src/main/java/org/nuiton/license/plugin/AvailableLicensesPlugin.java =================================================================== --- maven-helper-plugin/trunk/src/main/java/org/nuiton/license/plugin/AvailableLicensesPlugin.java (rev 0) +++ maven-helper-plugin/trunk/src/main/java/org/nuiton/license/plugin/AvailableLicensesPlugin.java 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,58 @@ +/** + * *##% Plugin maven pour switcher les licenses + * Copyright (C) 2008 CodeLutin + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* + */ +package org.nuiton.license.plugin; + +import org.apache.maven.plugin.AbstractMojo; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugin.MojoFailureException; +import org.nuiton.license.LicenseFactory; + +import java.util.Map.Entry; + +/** + * Le goal pour afficher dans la console les differentes licenses connues. + * + * @author chemit + * @goal available-licenses + * @requiresProject false + */ +public class AvailableLicensesPlugin extends AbstractMojo { + + /** + * La baseURL d'un resolver de license supplementaire + * + * @parameter expression="${helper.extraResolver}" + * @since 1.0.0 + */ + protected String extraResolver; + + @Override + public void execute() throws MojoExecutionException, MojoFailureException { + StringBuilder sb = new StringBuilder(); + sb.append("Available licenses :\n"); + + LicenseFactory factory = LicenseFactory.newInstance(extraResolver); + + for (Entry<String, String> license : factory.getLicenseNames().entrySet()) { + sb.append(" * ").append(license.getKey()).append(" : ").append(license.getValue()).append('\n'); + } + getLog().info(sb.toString()); + } + +} Added: maven-helper-plugin/trunk/src/main/java/org/nuiton/license/plugin/LicensePlugin.java =================================================================== --- maven-helper-plugin/trunk/src/main/java/org/nuiton/license/plugin/LicensePlugin.java (rev 0) +++ maven-helper-plugin/trunk/src/main/java/org/nuiton/license/plugin/LicensePlugin.java 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,252 @@ +/** + * *##% Plugin maven pour switcher les licenses + * Copyright (C) 2008 CodeLutin + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* + */ +package org.nuiton.license.plugin; + +import org.nuiton.license.License; +import org.nuiton.license.LicenseFactory; + +import java.io.File; +import org.apache.maven.project.MavenProject; + +/** + * Le goal pour ajouter le fichier LICENSE.txt dans le classpath (et le generer s'il n'existe pas). + * + * @author chemit + * @goal add-license + * @phase generate-resources + * @requiresProject true + * @requiresDependencyResolution compile + */ +public class LicensePlugin extends org.nuiton.AbstractPlugin { + + /** + * Dependance du projet. + * + * @parameter default-value="${project}" + * @required + * @since 1.0.0 + */ + protected MavenProject project; + /** + * Fichier de la licence du module. + * + * @parameter expression="${helper.licenceFile}" default-value="${basedir}/LICENSE.txt" + * @required + * @readonly + * @since 1.0.0 + */ + protected File licenseFile; + /** + * Le type de license a appliquer. + * + * @parameter expression="${helper.licenseName}" + * @required + * @since 1.0.0 + */ + protected String licenseName; + /** + * Repertoire de sortie des classes (classpath). + * + * @parameter expression="${helper.outputDirectory}" default-value="${project.build.outputDirectory}" + * @required + * @since 1.0.0 + */ + protected File outputDirectory; + /** + * Encoding a utiliser pour lire et ecrire les fichiers. + * + * @parameter expression="${helper.encoding}" default-value="${project.build.sourceEncoding}" + * @required + * @since 1.0.0 + */ + protected String encoding; + /** + * Un flag pour conserver un backup des fichiers modifies. + * + * @parameter expression="${helper.keepBackup}" default-value="false" + * @since 1.0.0 + */ + protected boolean keepBackup; + /** + * Un flag pour forcer la generation. + * + * @parameter expression="${helper.force}" default-value="false" + * @since 1.0.0 + */ + protected boolean force; + /** + * Un flag pour activer le mode verbeux. + * + * @parameter expression="${helper.verbose}" default-value="${maven.verbose}" + * @since 1.0.0 + */ + protected boolean verbose; + /** + * La baseURL d'un resolver de license supplementaire + * + * @parameter expression="${helper.extraResolver}" + * @since 1.0.0 + */ + protected String[] extraResolver; + protected License license; + + public LicensePlugin() { + super("all files are up-to-date."); + } + + @Override + protected boolean ensurePackaging() { + return project != null && ("pom".equals(project.getPackaging()) || "site".equals(project.getPackaging())); + } + + @Override + protected boolean init() throws Exception { + + // must generate if file does not exist + boolean doGenerate = true; + + if (!force) { + // regenerate only if file exists and is newer than pom file + doGenerate = !isFileNewerThanPomFile(licenseFile); + } + + if (doGenerate) { + + // acquire license + + LicenseFactory factory = LicenseFactory.newInstance(extraResolver); + + license = factory.revolv(licenseName); + + } + return doGenerate; + } + + @Override + protected void doAction() throws Exception { + getLog().info("using licence [" + licenseName + "]"); + + if (verbose) { + getLog().info("detail : " + license); + } + + if (licenseFile.exists() && keepBackup) { + if (verbose) { + getLog().info("backup " + licenseFile); + } + // copy it to backup file + File backup = new File(licenseFile.getAbsolutePath() + "~"); + licenseFile.renameTo(backup); + } + + String licenseContent = license.getLicenseContent(encoding); + + // copy LICENSE.txt to classpath + File target = new File(outputDirectory, licenseFile.getName()); + + copyFile(licenseContent, licenseFile, encoding); + + copyFile(licenseFile, target); + + } + + public File getLicenseFile() { + return licenseFile; + } + + public String getLicenseName() { + return licenseName; + } + + public License getLicense() { + return license; + } + + public String[] getExtraResolver() { + return extraResolver; + } + + public String getEncoding() { + return encoding; + } + + public boolean isKeepBackup() { + return keepBackup; + } + + public boolean isForce() { + return force; + } + + public File getOutputDirectory() { + return outputDirectory; + } + + public void setLicenseFile(File licenseFile) { + this.licenseFile = licenseFile; + } + + public void setLicenseName(String licenseName) { + this.licenseName = licenseName; + } + + public void setExtraResolver(String[] extraResolver) { + this.extraResolver = extraResolver; + } + + public void setLicense(License license) { + this.license = license; + } + + public void setEncoding(String encoding) { + this.encoding = encoding; + } + + public void setKeepBackup(boolean keepBackup) { + this.keepBackup = keepBackup; + } + + public void setOutputDirectory(File outputDirectory) { + this.outputDirectory = outputDirectory; + } + + public void setForce(boolean force) { + this.force = force; + } + + @Override + public boolean isVerbose() { + return verbose; + } + + @Override + public void setVerbose(boolean verbose) { + this.verbose = verbose; + } + + @Override + public MavenProject getProject() { + return project; + } + + @Override + public void setProject(MavenProject project) { + this.project = project; + } +} Added: maven-helper-plugin/trunk/src/main/java/org/nuiton/license/plugin/ThirdPartyPlugin.java =================================================================== --- maven-helper-plugin/trunk/src/main/java/org/nuiton/license/plugin/ThirdPartyPlugin.java (rev 0) +++ maven-helper-plugin/trunk/src/main/java/org/nuiton/license/plugin/ThirdPartyPlugin.java 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,378 @@ +/** + * *##% Plugin maven pour switcher les licenses + * Copyright (C) 2008 CodeLutin + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* + */ +package org.nuiton.license.plugin; + +import org.apache.maven.artifact.Artifact; +import org.apache.maven.artifact.factory.ArtifactFactory; +import org.apache.maven.artifact.metadata.ArtifactMetadataSource; +import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.artifact.resolver.ArtifactCollector; +import org.apache.maven.artifact.resolver.filter.ArtifactFilter; +import org.apache.maven.artifact.resolver.filter.ScopeArtifactFilter; +import org.apache.maven.model.License; +import org.apache.maven.project.MavenProject; +import org.apache.maven.project.MavenProjectBuilder; +import org.apache.maven.project.ProjectBuildingException; +import org.apache.maven.shared.dependency.tree.DependencyNode; +import org.apache.maven.shared.dependency.tree.DependencyTreeBuilder; +import org.apache.maven.shared.dependency.tree.DependencyTreeBuilderException; + +import java.io.File; +import java.util.List; +import java.util.SortedSet; +import java.util.TreeSet; +import org.nuiton.AbstractPlugin; + +/** + * Le goal pour copier le fichier THIRD-PARTY.txt (contenant les licenses de toutes les dependances du projet) + * dans le classpath (et le generer s'il n'existe pas). + * + * @author chemit + * @goal add-third-party + * @phase process-classes + * @requiresDependencyResolution test + * @requiresProject true + */ +public class ThirdPartyPlugin extends AbstractPlugin { + + private static final String unknownLicenseMessage = "Unknown license"; + /** + * Dependance du projet. + * + * @parameter default-value="${project}" + * @required + * @since 1.0.0 + */ + protected MavenProject project; + /** + * Fichier ou ecrire les licences des dependances. + * + * @parameter expression="${helper.thirdPartyFile}" default-value="${project.build.outputDirectory}/THIRD-PARTY.txt" + * @required + * @since 1.0.0 + */ + protected File thirdPartyFile; + /** + * Repertoire de sortie des classes (classpath). + * + * @parameter expression="${helper.outputDirectory}" default-value="${project.build.outputDirectory}" + * @required + * @since 1.0.0 + */ + protected File outputDirectory; + /** + * Encoding a utiliser pour lire et ecrire les fichiers. + * + * @parameter expression="${helper.encoding}" default-value="${project.build.sourceEncoding}" + * @required + * @since 1.0.0 + */ + protected String encoding; + /** + * Un flag pour forcer la generation. + * + * @parameter expression="${helper.force}" default-value="false" + * @since 1.0.0 + */ + protected boolean force; + /** + * Un flag pour conserver un backup des fichiers modifies. + * + * @parameter expression="${helper.keepBackup}" default-value="false" + * @since 1.0.0 + */ + protected boolean keepBackup; + /** + * Un flag pour activer le mode verbeux. + * + * @parameter expression="${helper.verbose}" default-value="${maven.verbose}" + * @since 1.0.0 + */ + protected boolean verbose; + /** + * Local Repository. + * + * @parameter expression="${localRepository}" + * @required + * @readonly + * @since 1.0.0 + */ + protected ArtifactRepository localRepository; + /** + * Remote repositories used for the project. + * + * @parameter expression="${project.remoteArtifactRepositories}" + * @required + * @readonly + * @since 1.0.0 + */ + protected List<?> remoteRepositories; + /** + * Dependency tree builder component. + * + * @component + */ + protected DependencyTreeBuilder dependencyTreeBuilder; + /** + * Artifact Factory component. + * + * @component + */ + protected ArtifactFactory factory; + /** + * Artifact metadata source component. + * + * @component + */ + protected ArtifactMetadataSource artifactMetadataSource; + /** + * Artifact collector component. + * + * @component + */ + protected ArtifactCollector collector; + /** + * Maven Project Builder component. + * + * @component + */ + protected MavenProjectBuilder mavenProjectBuilder; + /** + * content of third party file (only computed if {@link #force} is active or the + * {@link #thirdPartyFile} does not exist, or is not up-to-date. + */ + protected String thirdPartyFileContent; + + public ThirdPartyPlugin() { + super("all files are up-to-date."); + } + + @Override + protected boolean ensurePackaging() { + return "pom".equals(project.getPackaging()) || "site".equals(project.getPackaging()); + } + + @Override + protected boolean init() throws Exception { + + boolean doGenerate = true; + + if (!force) { + // regenerate only if file exists and is newer than pom file + doGenerate = !isFileNewerThanPomFile(thirdPartyFile); + } + + if (doGenerate) { + + // prepare thirdPartyFileContent + + DependencyNode dependencyTreeNode = resolveProject(); + + LicenseMap licenseMap = new LicenseMap(); + + for (Object o : dependencyTreeNode.getChildren()) { + + buildLicenseMap((DependencyNode) o, licenseMap); + } + + thirdPartyFileContent = buildGroupedLicenses(licenseMap); + + // log dependencies with no license + SortedSet<String> dependenciesWithNoLicense = licenseMap.get(unknownLicenseMessage); + if (dependenciesWithNoLicense != null) { + for (String dep : dependenciesWithNoLicense) { + // no license found for the dependency + getLog().warn("no license found for dependency " + dep); + } + } + } + + return doGenerate; + } + + @Override + protected void doAction() throws Exception { + if (verbose) { + getLog().info("writing third-party file : " + thirdPartyFile); + } + if (keepBackup && thirdPartyFile.exists()) { + if (verbose) { + getLog().info("backup " + thirdPartyFile); + } + thirdPartyFile.renameTo(new File(thirdPartyFile.getAbsolutePath() + '~')); + } + copyFile(thirdPartyFileContent, thirdPartyFile, encoding); + } + + /** @return resolve the dependency tree */ + protected DependencyNode resolveProject() { + try { + ArtifactFilter artifactFilter = new ScopeArtifactFilter(Artifact.SCOPE_TEST); + return dependencyTreeBuilder.buildDependencyTree(project, localRepository, factory, + artifactMetadataSource, artifactFilter, collector); + } catch (DependencyTreeBuilderException e) { + getLog().error("Unable to build dependency tree.", e); + return null; + } + } + + protected void buildLicenseMap(DependencyNode node, LicenseMap licenseMap) { + if (node.getState() != DependencyNode.INCLUDED) { + // this dependency is not included, so do not treate it + if (verbose) { + getLog().info("do not include this dependency " + node.toNodeString()); + } + return; + } + Artifact artifact = node.getArtifact(); + + if (verbose && getLog().isDebugEnabled()) { + getLog().debug("treate node " + node.toNodeString()); + } + + if (!Artifact.SCOPE_SYSTEM.equals(artifact.getScope())) { + try { + MavenProject artifactProject = getMavenProjectFromRepository(artifact); + String artifactName = getArtifactName(artifactProject); + + List<?> licenses = artifactProject.getLicenses(); + + if (licenses.isEmpty()) { + // no license found for the dependency + licenseMap.put(unknownLicenseMessage, artifactName); + + } else { + for (Object o : licenses) { + if (o == null) { + getLog().warn("could not acquire the license for " + artifactName); + continue; + } + License license = (License) o; + String licenseKey = license.getName(); + if (license.getName() == null) { + licenseKey = license.getUrl(); + } + licenseMap.put(licenseKey, artifactName); + } + } + } catch (ProjectBuildingException e) { + getLog().error("ProjectBuildingException error : ", e); + } + } + if (!node.getChildren().isEmpty()) { + for (Object o : node.getChildren()) { + buildLicenseMap((DependencyNode) o, licenseMap); + } + } + } + + protected String buildGroupedLicenses(LicenseMap licenseMap) { + StringBuilder sb = new StringBuilder(); + sb.append("List of third-party dependencies grouped by their license type."); + for (String licenseName : licenseMap.keySet()) { + sb.append("\n\n").append(licenseName).append(" : "); + + SortedSet<String> projects = licenseMap.get(licenseName); + + for (String projectName : projects) { + sb.append("\n * ").append(projectName); + } + } + return sb.toString(); + } + + protected String getArtifactName(MavenProject artifactProject) { + StringBuilder sb = new StringBuilder(); + + sb.append(artifactProject.getName()); + sb.append(" ("); + sb.append(artifactProject.getGroupId()); + sb.append(":"); + sb.append(artifactProject.getArtifactId()); + sb.append(":"); + sb.append(artifactProject.getVersion()); + sb.append(" - "); + String url = artifactProject.getUrl(); + sb.append(url == null ? "no url defined" : url); + sb.append(")"); + + return sb.toString(); + } + + /** + * Get the <code>Maven project</code> from the repository depending the <code>Artifact</code> given. + * + * @param artifact an artifact + * @return the Maven project for the given artifact + * @throws ProjectBuildingException if any + */ + protected MavenProject getMavenProjectFromRepository(Artifact artifact) + throws ProjectBuildingException { + + boolean allowStubModel = false; + + if (!"pom".equals(artifact.getType())) { + artifact = factory.createProjectArtifact(artifact.getGroupId(), artifact.getArtifactId(), + artifact.getVersion(), artifact.getScope()); + allowStubModel = true; + } + + // TODO: we should use the MavenMetadataSource instead + return mavenProjectBuilder.buildFromRepository(artifact, remoteRepositories, localRepository, + allowStubModel); + } + + protected class LicenseMap extends java.util.TreeMap<String, SortedSet<String>> { + + private static final long serialVersionUID = 864199843545688069L; + + public SortedSet<String> put(String key, String value) { + // handle multiple values as a set to avoid duplicates + SortedSet<String> valueList = get(key); + if (valueList == null) { + valueList = new TreeSet<String>(); + } + if (getLog().isDebugEnabled()) { + getLog().debug("key:" + key + ",value: " + value); + } + valueList.add(value); + return put(key, valueList); + } + } + + @Override + public boolean isVerbose() { + return verbose; + } + + @Override + public void setVerbose(boolean verbose) { + this.verbose = verbose; + } + + @Override + public MavenProject getProject() { + return project; + } + + @Override + public void setProject(MavenProject project) { + this.project = project; + } +} Added: maven-helper-plugin/trunk/src/main/java/org/nuiton/util/DependencyUtil.java =================================================================== --- maven-helper-plugin/trunk/src/main/java/org/nuiton/util/DependencyUtil.java (rev 0) +++ maven-helper-plugin/trunk/src/main/java/org/nuiton/util/DependencyUtil.java 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,216 @@ +package org.nuiton.util; + +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.maven.artifact.Artifact; +import org.apache.maven.shared.dependency.tree.DependencyNode; + +/** + * Une classe de methodes utiles sur les dependences entre artifacts. + * + * @author chemit + * @since 0.5 + */ +public class DependencyUtil { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + private static final Log log = LogFactory.getLog(DependencyUtil.class); + + public static void sortArtifacts(DependencyNode rootNode, List<Artifact> i18nArtifacts, boolean verbose) { + + if (i18nArtifacts.size() == 1) { + return; + } + + Map<String, ArtifactDependencyEntry> dico = new java.util.HashMap<String, ArtifactDependencyEntry>(i18nArtifacts.size()); + + for (Artifact a : i18nArtifacts) { + ArtifactDependencyEntry entry = new ArtifactDependencyEntry(a); + dico.put(entry.artifactKey, entry); + } + + // contient les artifacts non encore fixes + Set<String> universe = new java.util.HashSet<String>(dico.keySet()); + + // recupere les noeuds pour chaque artifact en une seule passe + + setNodes(rootNode, dico, universe, verbose); + + // contient les artifacts resouds dans l'ordre de dependances + List<String> parsed = new java.util.ArrayList<String>(); + + // premiere passe pour recuperer l'ensemble des dependances + for (ArtifactDependencyEntry entry : dico.values()) { + List<String> dependencies = getDependencies(rootNode, entry, universe, verbose); + entry.depIds = dependencies; + } + + int level = 0; + do { + if (verbose) { + log.info("run into level " + (level++)); + } + // on parcourt les artifacts pour detecter les nouveau artifacts fixes + List<String> levelFixed = new java.util.ArrayList<String>(); + + for (String key : universe) { + ArtifactDependencyEntry entry = dico.get(key); + // cet artifact n'est pas encore fixe + if (entry.depIds.isEmpty()) { + // plus de dependance pour cet artifact + levelFixed.add(key); + if (verbose) { + log.info("fixed artifact " + key); + } + } + } + + if (levelFixed.isEmpty()) { + // aucune modification, c'est un cycle! + throw new IllegalStateException("cycle detecte ! entre les artifacts " + universe); + } + + // on met a jour les listes + universe.removeAll(levelFixed); + parsed.addAll(levelFixed); + + if (universe.isEmpty()) { + // tout a ete resolu, plus rien a faire + break; + } + + // on supprime les dependances fixees a ce niveau + for (String key : universe) { + ArtifactDependencyEntry entry = dico.get(key); + entry.depIds.removeAll(levelFixed); + } + + levelFixed.clear(); + } while (true); + + i18nArtifacts.clear(); + for (String key : parsed) { + i18nArtifacts.add(dico.get(key).artifact); + } + + } + + protected static String getArtifactId(Artifact artifact) { + return artifact.getArtifactId() + ":" + artifact.getGroupId(); + } + + protected static List<String> getDependencies(DependencyNode rootNode, ArtifactDependencyEntry entry, Set<String> universe, boolean verbose) { + + List<String> order = new java.util.ArrayList<String>(); + Set<String> exclude = new java.util.HashSet<String>(); + + if (verbose) { + log.info("start [" + entry.artifactKey + "]"); + } + DependencyNode node = entry.node; + + getDependencies(rootNode, node, entry.artifactKey, universe, verbose, order, exclude); + + return order; + } + + private static void getDependencies(DependencyNode rootNode, DependencyNode node, String artifactKey, Set<String> universe, boolean verbose, List<String> order, Set<String> exclude) { + + for (Iterator<?> itr = node.preorderIterator(); itr.hasNext();) { + DependencyNode d = (DependencyNode) itr.next(); + Artifact artifact = d.getArtifact(); + String key = getArtifactId(artifact); + if (artifactKey.equals(key)) { + // artifact du noeud en parametre, rien a faire + continue; + } + if (order.contains(key) || exclude.contains(key)) { + // artifact deja rencontree + continue; + } + + if (d.getState() != DependencyNode.INCLUDED) { + // on doit recuperer le noeud complete + if (log.isDebugEnabled()) { + log.debug("!!! doit recuperer le noeud complet pour " + d.getArtifact()); + } + DependencyNode node1 = getNode(rootNode, key, verbose); + getDependencies(rootNode, node1, artifactKey, universe, verbose, order, exclude); + } + + if (log.isDebugEnabled()) { + log.debug("[" + artifactKey + "] ??????? [" + key + "]"); + } + + if (universe.contains(key)) { + // artifact a retenir + if (verbose) { + log.info(" << [" + d.getArtifact() + "]"); + } + order.add(key); + continue; + } + + // cet artifact peut etre marque comme a ne plus etre scanne + exclude.add(key); + } + + } + + protected static void setNodes(DependencyNode rootNode, Map<String, ArtifactDependencyEntry> dico, Set<String> universe, boolean verbose) { + + for (Iterator<?> itr = rootNode.preorderIterator(); itr.hasNext();) { + DependencyNode d = (DependencyNode) itr.next(); + Artifact artifact = d.getArtifact(); + String key = getArtifactId(artifact); + if (log.isDebugEnabled()) { + log.debug("key : " + key); + } + if (universe.contains(key) && d.getState() == DependencyNode.INCLUDED) { + ArtifactDependencyEntry entry = dico.get(key); + entry.node = d; + if (d == null) { + // ce cas ne devrait jamais arrive + throw new IllegalStateException("on a pas trouve le node pour l'artifact " + artifact); + } + if (log.isDebugEnabled()) { + log.debug("detected node : " + d); + } + } + } + } + + protected static DependencyNode getNode(DependencyNode rootNode, String requiredKey, boolean verbose) { + + for (Iterator<?> itr = rootNode.preorderIterator(); itr.hasNext();) { + DependencyNode d = (DependencyNode) itr.next(); + Artifact artifact = d.getArtifact(); + String key = getArtifactId(artifact); + if (log.isDebugEnabled()) { + log.debug("key : " + key); + } + if (requiredKey.equals(key) && d.getState() == DependencyNode.INCLUDED) { + return d; + } + } + + return null; + } + + public static class ArtifactDependencyEntry { + + protected final Artifact artifact; + protected final String artifactKey; + protected DependencyNode node; + protected List<String> depIds; + + public ArtifactDependencyEntry(Artifact artifact) { + this.artifact = artifact; + this.artifactKey = getArtifactId(artifact); + } + } +} Added: maven-helper-plugin/trunk/src/main/java/org/nuiton/util/FileUpdater.java =================================================================== --- maven-helper-plugin/trunk/src/main/java/org/nuiton/util/FileUpdater.java (rev 0) +++ maven-helper-plugin/trunk/src/main/java/org/nuiton/util/FileUpdater.java 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,38 @@ +/** + * *##% Lutin plugin utilities library + * Copyright (C) 2008 CodeLutin + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* + */ +package org.nuiton.util; + +import java.io.File; + +/** + * Contract to be realized to test if a file is up to date. + * <p/> + * use {@link #isFileUpToDate(java.io.File)} to determine if a file is up to date. + * + * @author chemit + */ +public interface FileUpdater { + + /** + * @param f file to test + * @return <code>true</code> if file is up to date, <code>false</code> otherwise + */ + boolean isFileUpToDate(File f); + +} Added: maven-helper-plugin/trunk/src/main/java/org/nuiton/util/FileUpdaterHelper.java =================================================================== --- maven-helper-plugin/trunk/src/main/java/org/nuiton/util/FileUpdaterHelper.java (rev 0) +++ maven-helper-plugin/trunk/src/main/java/org/nuiton/util/FileUpdaterHelper.java 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,79 @@ +/** + * *##% Lutin plugin utilities library + * Copyright (C) 2008 CodeLutin + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* + */ +package org.nuiton.util; + +import java.io.File; + +/** @author chemit */ +public class FileUpdaterHelper { + + static public MirroredFileUpdater newJavaFileUpdater() { + return newJavaFileUpdater(null, null); + } + + static public MirroredFileUpdater newJaxxFileUpdater() { + return newJaxxFileUpdater(null, null); + } + + static public MirroredFileUpdater newJavaFileUpdater(File src, File dst) { + return new JavaFileUpdater(src, dst); + } + + static public MirroredFileUpdater newJaxxFileUpdater(File src, File dst) { + return new JaxxFileUpdater(src, dst); + } + + /** + * To test if a java source file is newser than his compiled class + * + * @author chemit + */ + public static class JavaFileUpdater extends MirroredFileUpdater { + + protected JavaFileUpdater(File sourceDirectory, File destinationDirectory) { + super(".java", ".class", sourceDirectory, destinationDirectory); + } + + @Override + public File getMirrorFile(File f) { + String file = f.getAbsolutePath().substring(prefixSourceDirecotory); + String mirrorRelativePath = file.substring(0, file.length() - 4) + "class"; + return new File(destinationDirectory + File.separator + mirrorRelativePath); + } + } + + /** + * To test if a jaxx source file is newser than his generated java source file + * + * @author chemit + */ + public static class JaxxFileUpdater extends MirroredFileUpdater { + + protected JaxxFileUpdater(File sourceDirectory, File destinationDirectory) { + super(".jaxx", ".java", sourceDirectory, destinationDirectory); + } + + @Override + public File getMirrorFile(File f) { + String file = f.getAbsolutePath().substring(prefixSourceDirecotory); + String mirrorRelativePath = file.substring(0, file.length() - 4) + "java"; + return new File(destinationDirectory + File.separator + mirrorRelativePath); + } + } +} Added: maven-helper-plugin/trunk/src/main/java/org/nuiton/util/FileUtil.java =================================================================== --- maven-helper-plugin/trunk/src/main/java/org/nuiton/util/FileUtil.java (rev 0) +++ maven-helper-plugin/trunk/src/main/java/org/nuiton/util/FileUtil.java 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,127 @@ +/** + * *##% Lutin plugin utilities library + * Copyright (C) 2008 CodeLutin + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* + */ +package org.nuiton.util; + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.OutputStreamWriter; +import java.nio.channels.FileChannel; +import org.codehaus.plexus.util.FileUtils; +import org.codehaus.plexus.util.IOUtil; +import org.codehaus.plexus.util.io.RawInputStreamFacade; + +/** + * Methodes utiles pour le traitement de fichiers. + * + * TODO utiliser l'api offert de maven : plexus-utils par exemple... + * + * @author chemit + */ +public class FileUtil { + + /** + * Permet de copier le fichier source vers le fichier cible. + * + * @param source le fichier source + * @param target le fichier cible + * @throws java.io.IOException Erreur de copie + */ + public static void copy(File source, File target) throws IOException { + target.getParentFile().mkdirs(); + FileChannel sourceChannel = new FileInputStream(source).getChannel(); + FileChannel targetChannel = new FileOutputStream(target).getChannel(); + sourceChannel.transferTo(0, sourceChannel.size(), targetChannel); + // or + // targetChannel.transferFrom(sourceChannel, 0, sourceChannel.size()); + sourceChannel.close(); + targetChannel.close(); + } + + /** + * Permet de lire un fichier et de retourner sont contenu sous forme d'une + * chaine de carateres + * + * @param file le fichier a lire + * @param encoding encoding to read file + * @return the content of the file + * @throws IOException if IO pb + */ + static public String readAsString(File file, String encoding) throws IOException { + FileInputStream inf = new FileInputStream(file); + BufferedReader in = new BufferedReader(new InputStreamReader(inf, encoding)); + try { + return IOUtil.toString(in); +// return FileUtil.readAsString(r); + } finally { + in.close(); + } + } + + /** + * Permet de lire un fichier et de retourner sont contenu sous forme d'une + * chaine de carateres + * + * @param file le reader a lire + * @return the content of the file + * @throws IOException if IO pb + */ + static public String readAsString(java.io.Reader file) throws IOException { + StringBuffer result = new StringBuffer(); + char[] cbuf = new char[2000]; + BufferedReader in = new BufferedReader(file); + int nb = in.read(cbuf); + while (nb != -1) { + result.append(cbuf, 0, nb); + nb = in.read(cbuf); + } + in.close(); + return result.toString(); + } + + /** + * Sauvegarde un contenu dans un fichier. + * + * @param file le fichier a ecrire + * @param content le contenu du fichier + * @param encoding l'encoding d'ecriture + * @throws IOException if IO pb + */ + static public void writeString(File file, String content, String encoding) throws IOException { + file.getParentFile().mkdirs(); + BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file), encoding)); + out.write(content); + out.close(); + } + + + public static void write(File destFile, String content, String encoding) throws IOException { + + InputStream in = new ByteArrayInputStream(content.getBytes(encoding)); + RawInputStreamFacade facade = new RawInputStreamFacade(in); + + FileUtils.copyStreamToFile(facade, destFile); + } +} Added: maven-helper-plugin/trunk/src/main/java/org/nuiton/util/MirroredFileUpdater.java =================================================================== --- maven-helper-plugin/trunk/src/main/java/org/nuiton/util/MirroredFileUpdater.java (rev 0) +++ maven-helper-plugin/trunk/src/main/java/org/nuiton/util/MirroredFileUpdater.java 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,114 @@ +/** + * *##% Lutin plugin utilities library + * Copyright (C) 2008 CodeLutin + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* + */ +package org.nuiton.util; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.io.File; + +/** + * Simple base implementation of a {@link FileUpdater} for an updater with a sourcedir and a destinationdir. + * + * @author chemit + */ +public class MirroredFileUpdater implements FileUpdater { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private final Log log = LogFactory.getLog(MirroredFileUpdater.class); + /** source basedir */ + protected File sourceDirectory; + /** length of source basedir absolute path */ + protected int prefixSourceDirecotory; + /** destination basedir */ + protected File destinationDirectory; + protected String fileInPattern = ""; + protected String fileOutPattern = ""; + + public MirroredFileUpdater(String fileInPattern, String fileOutPattern, File sourceDirectory, File destinationDirectory) { + this.fileInPattern = fileInPattern; + this.fileOutPattern = fileOutPattern; + this.sourceDirectory = sourceDirectory; + this.destinationDirectory = destinationDirectory; + if (sourceDirectory != null) { + this.prefixSourceDirecotory = sourceDirectory.getAbsolutePath().length(); + } + if (log.isDebugEnabled()) { + log.debug(this); + } + } + + public File getSourceDirectory() { + return sourceDirectory; + } + + public File getDestinationDirectory() { + return destinationDirectory; + } + + public String getFileInPattern() { + return fileInPattern; + } + + public String getFileOutPattern() { + return fileOutPattern; + } + +// public abstract File getMirrorFile(File f); + public File getMirrorFile(File f) { + String filename = f.getName(); + String file = f.getAbsolutePath().substring(prefixSourceDirecotory); + file = file.substring(0, file.length() - filename.length()); + String destFinlename = applyTransformationFilename(filename); + String mirrorRelativePath = file + destFinlename; + return new File(destinationDirectory + File.separator + mirrorRelativePath); + } + + @Override + public boolean isFileUpToDate(File f) { + File mirror = getMirrorFile(f); + return mirror.exists() && f.lastModified() < mirror.lastModified(); + } + + public void setDestinationDirectory(File destinationDirectory) { + this.destinationDirectory = destinationDirectory; + } + + public void setSourceDirectory(File sourceDirectory) { + this.sourceDirectory = sourceDirectory; + this.prefixSourceDirecotory = sourceDirectory.getAbsolutePath().length(); + } + + public void setFileInPattern(String fileInPattern) { + this.fileInPattern = fileInPattern; + } + + public void setFileOutPattern(String fileOutPattern) { + this.fileOutPattern = fileOutPattern; + } + + public String applyTransformationFilename(String filename) { + return filename.replaceAll(fileInPattern, fileOutPattern); + } + + @Override + public String toString() { + return super.toString() + "<srcdir:" + sourceDirectory + ", destdir:" + destinationDirectory + ">"; + } +} Added: maven-helper-plugin/trunk/src/main/java/org/nuiton/util/PluginHelper.java =================================================================== --- maven-helper-plugin/trunk/src/main/java/org/nuiton/util/PluginHelper.java (rev 0) +++ maven-helper-plugin/trunk/src/main/java/org/nuiton/util/PluginHelper.java 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,200 @@ +package org.nuiton.util; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.FilterOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.OutputStream; +import java.io.OutputStreamWriter; +import java.text.MessageFormat; +import java.util.Collections; +import java.util.Enumeration; +import java.util.List; +import java.util.Properties; +import java.util.Vector; + +/** + * Une classe pour mutualiser toutes les méthodes utiles pour un plugin. + * + * @author chemit + */ +public class PluginHelper { + + /** + * Permet de convertir une liste non typee, en une liste typee. + * <p/> + * La liste en entree en juste bien castee. + * <p/> + * On effectue une verification sur le typage des elements de la liste. + * <p/> + * Note : <b>Aucune liste n'est creee, ni recopiee</b> + * + * @param <O> le type des objets de la liste + * @param list la liste a convertir + * @param type le type des elements de la liste + * @return la liste typee + * @throws IllegalArgumentException si un element de la liste en entree n'est + * pas en adequation avec le type voulue. + */ + @SuppressWarnings({"unchecked"}) + static public <O> List<O> toGenericList(List<?> list, Class<O> type) throws IllegalArgumentException { + if (list.isEmpty()) { + return (List<O>) list; + } + for (Object o : list) { + if (!(type.isAssignableFrom(o.getClass()))) { + throw new IllegalArgumentException("can not cast List with object of type " + o.getClass() + " to " + type + " type!"); + } + } + return (List<O>) list; + } + static final protected double[] timeFactors = {1000000, 1000, 60, 60, 24}; + static final protected String[] timeUnites = {"ns", "ms", "s", "m", "h", "d"}; + + static public String convertTime(long value) { + return convert(value, timeFactors, timeUnites); + } + + static public String convertTime(long value, long value2) { + return convertTime(value2 - value); + } + + static public String convert(long value, double[] factors, String[] unites) { + long sign = value == 0 ? 1 : value / Math.abs(value); + int i = 0; + double tmp = Math.abs(value); + while (i < factors.length && i < unites.length && tmp > factors[i]) { + tmp = tmp / factors[i++]; + } + + tmp *= sign; + String result; + result = MessageFormat.format("{0,number,0.###}{1}", tmp, + unites[i]); + return result; + } + + /** + * Permet d'avoir les fichiers de proprietes tries. + * + * @author julien + * @author chemit + */ + public static class SortedProperties extends Properties { + + private static final long serialVersionUID = -1147150444452577558L; + /** l'encoding a utiliser pour lire et ecrire le properties. */ + protected String encoding; + /** un drapeau pour savoir s'il faut enlever l'entete generere */ + protected boolean removeHeader; + + public SortedProperties(String encoding) { + this(encoding, true); + } + + public SortedProperties(String encoding, boolean removeHeader) { + super(); + this.encoding = encoding; + this.removeHeader = removeHeader; + } + + public SortedProperties(Properties defaults) { + super(defaults); + } + + @Override + public synchronized Enumeration<Object> keys() { + List<Object> objects = Collections.list(super.keys()); + Vector<Object> result; + try { + // Attention, si les clef ne sont pas des string, ca ne marchera pas + List<String> list = toGenericList(objects, String.class); + Collections.sort(list); + result = new Vector<Object>(list); + } catch (IllegalArgumentException e) { + // keys are not string !!! + // can not sort keys + result = new Vector<Object>(objects); + } + return result.elements(); + } + + /** + * Charge le properties a partir d'un fichier. + * + * @param src le fichier src a charger en utilisant l'encoding declare + * @return l'instance du properties + * @throws IOException if any io pb + */ + public SortedProperties load(File src) throws IOException { + super.load(new InputStreamReader(new FileInputStream(src), encoding)); + return this; + } + + /** + * Sauvegarde le properties dans un fichier, sans commentaire et en utilisant l'encoding declare. + * + * @param dst the fichier de destination + * @throws IOException if any io pb + */ + public void store(File dst) throws IOException { + if (removeHeader) { + super.store(new OutputStreamWriter(new PropertiesDateRemoveFilterStream(new FileOutputStream(dst)), encoding), null); + } else { + super.store(new FileOutputStream(dst), null); + } + } + + /** + * Sauvegarde le properties dans un fichier, sans commentaire en laissant java encode en unicode. + * + * @param dst le fichier de destination + * @throws IOException if any io pb + */ + public void store(OutputStream dst) throws IOException { + if (removeHeader) { + super.store(new PropertiesDateRemoveFilterStream(dst), null); + } else { + super.store(dst, null); + } + } + } + + /** + * Un ecrivain qui supprime la premiere ligne rencontree dans le flux. + * + * + * <b>Note: </b> Attention, les performance d'utilisation de cet ecrivain + * est problèmatique, car sur de gros fichiers (>1000 entrees) les + * performances se degradent serieusement : pour 1200 entrees on arrive à + * plus de 5 secondes, alors que sans on a 76 ms! ... + * + * FIXME : implanter quelque chose de plus performant dans tous les cas + */ + public static class PropertiesDateRemoveFilterStream extends FilterOutputStream { + + private boolean firstLineOver; + char endChar; + + public PropertiesDateRemoveFilterStream(OutputStream out) { + super(out); + firstLineOver = false; + String lineSeparator = System.getProperty("line.separator"); + endChar = lineSeparator.charAt(lineSeparator.length() - 1); + } + + @Override + public void write(int b) throws IOException { + if (!firstLineOver) { + char c = (char) b; + if (c == endChar) { + firstLineOver = true; + } + } else { + out.write(b); + } + } + } +} Added: maven-helper-plugin/trunk/src/main/java/org/nuiton/util/package.html =================================================================== --- maven-helper-plugin/trunk/src/main/java/org/nuiton/util/package.html (rev 0) +++ maven-helper-plugin/trunk/src/main/java/org/nuiton/util/package.html 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,7 @@ +<html> +<body> +<h1>Lutin plugin util</h1> +Ensemble de classe Java permettant de simplifier le developpement de plugins maven en +factorisant des besoins que l'on retrouve dans tous les developpements. +</body> +</html> \ No newline at end of file Added: maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/gpl_v1/header.txt =================================================================== --- maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/gpl_v1/header.txt (rev 0) +++ maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/gpl_v1/header.txt 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,16 @@ +%1$s +Copyright (C) %2$s %3$s + +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 1 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 Lesser 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/gpl-1.0.html>. Added: maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/gpl_v1/license.txt =================================================================== --- maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/gpl_v1/license.txt (rev 0) +++ maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/gpl_v1/license.txt 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,250 @@ + GNU GENERAL PUBLIC LICENSE + Version 1, February 1989 + + Copyright (C) 1989 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The license agreements of most software companies try to keep users +at the mercy of those companies. By contrast, our General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. The +General Public License applies to the Free Software Foundation's +software and to any other program whose authors commit to using it. +You can use it for your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Specifically, the General Public License is designed to make +sure that you have the freedom to give away or sell copies of free +software, that you receive source code or can get it if you want it, +that you can change the software or use pieces of it in new free +programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of a such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must tell them their rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any program or other work which +contains a notice placed by the copyright holder saying it may be +distributed under the terms of this General Public License. The +"Program", below, refers to any such program or work, and a "work based +on the Program" means either the Program or any work containing the +Program or a portion of it, either verbatim or with modifications. Each +licensee is addressed as "you". + + 1. You may copy and distribute verbatim copies of the Program's source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and +disclaimer of warranty; keep intact all the notices that refer to this +General Public License and to the absence of any warranty; and give any +other recipients of the Program a copy of this General Public License +along with the Program. You may charge a fee for the physical act of +transferring a copy. + + 2. You may modify your copy or copies of the Program or any portion of +it, and copy and distribute such modifications under the terms of Paragraph +1 above, provided that you also do the following: + + a) cause the modified files to carry prominent notices stating that + you changed the files and the date of any change; and + + b) cause the whole of any work that you distribute or publish, that + in whole or in part contains the Program or any part thereof, either + with or without modifications, to be licensed at no charge to all + third parties under the terms of this General Public License (except + that you may choose to grant warranty protection to some or all + third parties, at your option). + + c) If the modified program normally reads commands interactively when + run, you must cause it, when started running for such interactive use + in the simplest and most usual way, to print or display an + announcement including an appropriate copyright notice and a notice + that there is no warranty (or else, saying that you provide a + warranty) and that users may redistribute the program under these + conditions, and telling the user how to view a copy of this General + Public License. + + d) You may charge a fee for the physical act of transferring a + copy, and you may at your option offer warranty protection in + exchange for a fee. + +Mere aggregation of another independent work with the Program (or its +derivative) on a volume of a storage or distribution medium does not bring +the other work under the scope of these terms. + + 3. You may copy and distribute the Program (or a portion or derivative of +it, under Paragraph 2) in object code or executable form under the terms of +Paragraphs 1 and 2 above provided that you also do one of the following: + + a) accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of + Paragraphs 1 and 2 above; or, + + b) accompany it with a written offer, valid for at least three + years, to give any third party free (except for a nominal charge + for the cost of distribution) a complete machine-readable copy of the + corresponding source code, to be distributed under the terms of + Paragraphs 1 and 2 above; or, + + c) accompany it with the information you received as to where the + corresponding source code may be obtained. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form alone.) + +Source code for a work means the preferred form of the work for making +modifications to it. For an executable file, complete source code means +all the source code for all modules it contains; but, as a special +exception, it need not include source code for modules which are standard +libraries that accompany the operating system on which the executable +file runs, or for standard header files or definitions files that +accompany that operating system. + + 4. You may not copy, modify, sublicense, distribute or transfer the +Program except as expressly provided under this General Public License. +Any attempt otherwise to copy, modify, sublicense, distribute or transfer +the Program is void, and will automatically terminate your rights to use +the Program under this License. However, parties who have received +copies, or rights to use copies, from you under this General Public +License will not have their licenses terminated so long as such parties +remain in full compliance. + + 5. By copying, distributing or modifying the Program (or any work based +on the Program) you indicate your acceptance of this license to do so, +and all its terms and conditions. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the original +licensor to copy, distribute or modify the Program subject to these +terms and conditions. You may not impose any further restrictions on the +recipients' exercise of the rights granted herein. + + 7. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of the license which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +the license, you may choose any version ever published by the Free Software +Foundation. + + 8. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to humanity, the best way to achieve this is to make it +free software which everyone can redistribute and change under these +terms. + + To do so, attach the following notices to the program. It is safest to +attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) 19yy <name of author> + + 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 1, 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, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19xx name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the +appropriate parts of the General Public License. Of course, the +commands you use may be called something other than `show w' and `show +c'; they could even be mouse-clicks or menu items--whatever suits your +program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + program `Gnomovision' (a program to direct compilers to make passes + at assemblers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +That's all there is to it! Added: maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/gpl_v2/header.txt =================================================================== --- maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/gpl_v2/header.txt (rev 0) +++ maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/gpl_v2/header.txt 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,16 @@ +%1$s +Copyright (C) %2$s %3$s + +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 2 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 Lesser 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/gpl-2.0.html>. Added: maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/gpl_v2/license.txt =================================================================== --- maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/gpl_v2/license.txt (rev 0) +++ maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/gpl_v2/license.txt 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + 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 2 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, write to the Free Software Foundation, Inc., + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. Added: maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/gpl_v3/header.txt =================================================================== --- maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/gpl_v3/header.txt (rev 0) +++ maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/gpl_v3/header.txt 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,16 @@ +%1$s +Copyright (C) %2$s %3$s + +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 Lesser 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/gpl-3.0.html>. Added: maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/gpl_v3/license.txt =================================================================== --- maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/gpl_v3/license.txt (rev 0) +++ maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/gpl_v3/license.txt 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + 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/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (C) <year> <name of author> + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<http://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<http://www.gnu.org/philosophy/why-not-lgpl.html>. Added: maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/lgpl_v2_1/header.txt =================================================================== --- maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/lgpl_v2_1/header.txt (rev 0) +++ maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/lgpl_v2_1/header.txt 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,16 @@ +%1$s +Copyright (C) %2$s %3$s + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser General Public License as +published by the Free Software Foundation, either version 2.1 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 Lesser Public License for more details. + +You should have received a copy of the GNU General Lesser Public +License along with this program. If not, see +<http://www.gnu.org/licenses/lgpl-2.1.html>. Added: maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/lgpl_v2_1/license.txt =================================================================== --- maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/lgpl_v2_1/license.txt (rev 0) +++ maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/lgpl_v2_1/license.txt 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,502 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 2.1, February 1999 + + Copyright (C) 1991, 1999 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +Licenses are intended to guarantee your freedom to share and change +free software--to make sure the software is free for all its users. + + This license, the Lesser General Public License, applies to some +specially designated software packages--typically libraries--of the +Free Software Foundation and other authors who decide to use it. You +can use it too, but we suggest you first think carefully about whether +this license or the ordinary General Public License is the better +strategy to use in any particular case, based on the explanations below. + + When we speak of free software, we are referring to freedom of use, +not price. Our General Public Licenses are designed to make sure that +you have the freedom to distribute copies of free software (and charge +for this service if you wish); that you receive source code or can get +it if you want it; that you can change the software and use pieces of +it in new free programs; and that you are informed that you can do +these things. + + To protect your rights, we need to make restrictions that forbid +distributors to deny you these rights or to ask you to surrender these +rights. These restrictions translate to certain responsibilities for +you if you distribute copies of the library or if you modify it. + + For example, if you distribute copies of the library, whether gratis +or for a fee, you must give the recipients all the rights that we gave +you. You must make sure that they, too, receive or can get the source +code. If you link other code with the library, you must provide +complete object files to the recipients, so that they can relink them +with the library after making changes to the library and recompiling +it. And you must show them these terms so they know their rights. + + We protect your rights with a two-step method: (1) we copyright the +library, and (2) we offer you this license, which gives you legal +permission to copy, distribute and/or modify the library. + + To protect each distributor, we want to make it very clear that +there is no warranty for the free library. Also, if the library is +modified by someone else and passed on, the recipients should know +that what they have is not the original version, so that the original +author's reputation will not be affected by problems that might be +introduced by others. + + Finally, software patents pose a constant threat to the existence of +any free program. We wish to make sure that a company cannot +effectively restrict the users of a free program by obtaining a +restrictive license from a patent holder. Therefore, we insist that +any patent license obtained for a version of the library must be +consistent with the full freedom of use specified in this license. + + Most GNU software, including some libraries, is covered by the +ordinary GNU General Public License. This license, the GNU Lesser +General Public License, applies to certain designated libraries, and +is quite different from the ordinary General Public License. We use +this license for certain libraries in order to permit linking those +libraries into non-free programs. + + When a program is linked with a library, whether statically or using +a shared library, the combination of the two is legally speaking a +combined work, a derivative of the original library. The ordinary +General Public License therefore permits such linking only if the +entire combination fits its criteria of freedom. The Lesser General +Public License permits more lax criteria for linking other code with +the library. + + We call this license the "Lesser" General Public License because it +does Less to protect the user's freedom than the ordinary General +Public License. It also provides other free software developers Less +of an advantage over competing non-free programs. These disadvantages +are the reason we use the ordinary General Public License for many +libraries. However, the Lesser license provides advantages in certain +special circumstances. + + For example, on rare occasions, there may be a special need to +encourage the widest possible use of a certain library, so that it becomes +a de-facto standard. To achieve this, non-free programs must be +allowed to use the library. A more frequent case is that a free +library does the same job as widely used non-free libraries. In this +case, there is little to gain by limiting the free library to free +software only, so we use the Lesser General Public License. + + In other cases, permission to use a particular library in non-free +programs enables a greater number of people to use a large body of +free software. For example, permission to use the GNU C Library in +non-free programs enables many more people to use the whole GNU +operating system, as well as its variant, the GNU/Linux operating +system. + + Although the Lesser General Public License is Less protective of the +users' freedom, it does ensure that the user of a program that is +linked with the Library has the freedom and the wherewithal to run +that program using a modified version of the Library. + + The precise terms and conditions for copying, distribution and +modification follow. Pay close attention to the difference between a +"work based on the library" and a "work that uses the library". The +former contains code derived from the library, whereas the latter must +be combined with the library in order to run. + + GNU LESSER GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License Agreement applies to any software library or other +program which contains a notice placed by the copyright holder or +other authorized party saying it may be distributed under the terms of +this Lesser General Public License (also called "this License"). +Each licensee is addressed as "you". + + A "library" means a collection of software functions and/or data +prepared so as to be conveniently linked with application programs +(which use some of those functions and data) to form executables. + + The "Library", below, refers to any such software library or work +which has been distributed under these terms. A "work based on the +Library" means either the Library or any derivative work under +copyright law: that is to say, a work containing the Library or a +portion of it, either verbatim or with modifications and/or translated +straightforwardly into another language. (Hereinafter, translation is +included without limitation in the term "modification".) + + "Source code" for a work means the preferred form of the work for +making modifications to it. For a library, complete source code means +all the source code for all modules it contains, plus any associated +interface definition files, plus the scripts used to control compilation +and installation of the library. + + Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running a program using the Library is not restricted, and output from +such a program is covered only if its contents constitute a work based +on the Library (independent of the use of the Library in a tool for +writing it). Whether that is true depends on what the Library does +and what the program that uses the Library does. + + 1. You may copy and distribute verbatim copies of the Library's +complete source code as you receive it, in any medium, provided that +you conspicuously and appropriately publish on each copy an +appropriate copyright notice and disclaimer of warranty; keep intact +all the notices that refer to this License and to the absence of any +warranty; and distribute a copy of this License along with the +Library. + + You may charge a fee for the physical act of transferring a copy, +and you may at your option offer warranty protection in exchange for a +fee. + + 2. You may modify your copy or copies of the Library or any portion +of it, thus forming a work based on the Library, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) The modified work must itself be a software library. + + b) You must cause the files modified to carry prominent notices + stating that you changed the files and the date of any change. + + c) You must cause the whole of the work to be licensed at no + charge to all third parties under the terms of this License. + + d) If a facility in the modified Library refers to a function or a + table of data to be supplied by an application program that uses + the facility, other than as an argument passed when the facility + is invoked, then you must make a good faith effort to ensure that, + in the event an application does not supply such function or + table, the facility still operates, and performs whatever part of + its purpose remains meaningful. + + (For example, a function in a library to compute square roots has + a purpose that is entirely well-defined independent of the + application. Therefore, Subsection 2d requires that any + application-supplied function or table used by this function must + be optional: if the application does not supply it, the square + root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Library, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Library, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library +with the Library (or with a work based on the Library) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may opt to apply the terms of the ordinary GNU General Public +License instead of this License to a given copy of the Library. To do +this, you must alter all the notices that refer to this License, so +that they refer to the ordinary GNU General Public License, version 2, +instead of to this License. (If a newer version than version 2 of the +ordinary GNU General Public License has appeared, then you can specify +that version instead if you wish.) Do not make any other change in +these notices. + + Once this change is made in a given copy, it is irreversible for +that copy, so the ordinary GNU General Public License applies to all +subsequent copies and derivative works made from that copy. + + This option is useful when you wish to copy part of the code of +the Library into a program that is not a library. + + 4. You may copy and distribute the Library (or a portion or +derivative of it, under Section 2) in object code or executable form +under the terms of Sections 1 and 2 above provided that you accompany +it with the complete corresponding machine-readable source code, which +must be distributed under the terms of Sections 1 and 2 above on a +medium customarily used for software interchange. + + If distribution of object code is made by offering access to copy +from a designated place, then offering equivalent access to copy the +source code from the same place satisfies the requirement to +distribute the source code, even though third parties are not +compelled to copy the source along with the object code. + + 5. A program that contains no derivative of any portion of the +Library, but is designed to work with the Library by being compiled or +linked with it, is called a "work that uses the Library". Such a +work, in isolation, is not a derivative work of the Library, and +therefore falls outside the scope of this License. + + However, linking a "work that uses the Library" with the Library +creates an executable that is a derivative of the Library (because it +contains portions of the Library), rather than a "work that uses the +library". The executable is therefore covered by this License. +Section 6 states terms for distribution of such executables. + + When a "work that uses the Library" uses material from a header file +that is part of the Library, the object code for the work may be a +derivative work of the Library even though the source code is not. +Whether this is true is especially significant if the work can be +linked without the Library, or if the work is itself a library. The +threshold for this to be true is not precisely defined by law. + + If such an object file uses only numerical parameters, data +structure layouts and accessors, and small macros and small inline +functions (ten lines or less in length), then the use of the object +file is unrestricted, regardless of whether it is legally a derivative +work. (Executables containing this object code plus portions of the +Library will still fall under Section 6.) + + Otherwise, if the work is a derivative of the Library, you may +distribute the object code for the work under the terms of Section 6. +Any executables containing that work also fall under Section 6, +whether or not they are linked directly with the Library itself. + + 6. As an exception to the Sections above, you may also combine or +link a "work that uses the Library" with the Library to produce a +work containing portions of the Library, and distribute that work +under terms of your choice, provided that the terms permit +modification of the work for the customer's own use and reverse +engineering for debugging such modifications. + + You must give prominent notice with each copy of the work that the +Library is used in it and that the Library and its use are covered by +this License. You must supply a copy of this License. If the work +during execution displays copyright notices, you must include the +copyright notice for the Library among them, as well as a reference +directing the user to the copy of this License. Also, you must do one +of these things: + + a) Accompany the work with the complete corresponding + machine-readable source code for the Library including whatever + changes were used in the work (which must be distributed under + Sections 1 and 2 above); and, if the work is an executable linked + with the Library, with the complete machine-readable "work that + uses the Library", as object code and/or source code, so that the + user can modify the Library and then relink to produce a modified + executable containing the modified Library. (It is understood + that the user who changes the contents of definitions files in the + Library will not necessarily be able to recompile the application + to use the modified definitions.) + + b) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (1) uses at run time a + copy of the library already present on the user's computer system, + rather than copying library functions into the executable, and (2) + will operate properly with a modified version of the library, if + the user installs one, as long as the modified version is + interface-compatible with the version that the work was made with. + + c) Accompany the work with a written offer, valid for at + least three years, to give the same user the materials + specified in Subsection 6a, above, for a charge no more + than the cost of performing this distribution. + + d) If distribution of the work is made by offering access to copy + from a designated place, offer equivalent access to copy the above + specified materials from the same place. + + e) Verify that the user has already received a copy of these + materials or that you have already sent this user a copy. + + For an executable, the required form of the "work that uses the +Library" must include any data and utility programs needed for +reproducing the executable from it. However, as a special exception, +the materials to be distributed need not include anything that is +normally distributed (in either source or binary form) with the major +components (compiler, kernel, and so on) of the operating system on +which the executable runs, unless that component itself accompanies +the executable. + + It may happen that this requirement contradicts the license +restrictions of other proprietary libraries that do not normally +accompany the operating system. Such a contradiction means you cannot +use both them and the Library together in an executable that you +distribute. + + 7. You may place library facilities that are a work based on the +Library side-by-side in a single library together with other library +facilities not covered by this License, and distribute such a combined +library, provided that the separate distribution of the work based on +the Library and of the other library facilities is otherwise +permitted, and provided that you do these two things: + + a) Accompany the combined library with a copy of the same work + based on the Library, uncombined with any other library + facilities. This must be distributed under the terms of the + Sections above. + + b) Give prominent notice with the combined library of the fact + that part of it is a work based on the Library, and explaining + where to find the accompanying uncombined form of the same work. + + 8. You may not copy, modify, sublicense, link with, or distribute +the Library except as expressly provided under this License. Any +attempt otherwise to copy, modify, sublicense, link with, or +distribute the Library is void, and will automatically terminate your +rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses +terminated so long as such parties remain in full compliance. + + 9. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Library or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Library (or any work based on the +Library), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + + 10. Each time you redistribute the Library (or any work based on the +Library), the recipient automatically receives a license from the +original licensor to copy, distribute, link with or modify the Library +subject to these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties with +this License. + + 11. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Library at all. For example, if a patent +license would not permit royalty-free redistribution of the Library by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 12. If the distribution and/or use of the Library is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Library under this License may add +an explicit geographical distribution limitation excluding those countries, +so that distribution is permitted only in or among countries not thus +excluded. In such case, this License incorporates the limitation as if +written in the body of this License. + + 13. The Free Software Foundation may publish revised and/or new +versions of the Lesser General Public License from time to time. +Such new versions will be similar in spirit to the present version, +but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library +specifies a version number of this License which applies to it and +"any later version", you have the option of following the terms and +conditions either of that version or of any later version published by +the Free Software Foundation. If the Library does not specify a +license version number, you may choose any version ever published by +the Free Software Foundation. + + 14. If you wish to incorporate parts of the Library into other free +programs whose distribution conditions are incompatible with these, +write to the author to ask for permission. For software which is +copyrighted by the Free Software Foundation, write to the Free +Software Foundation; we sometimes make exceptions for this. Our +decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Libraries + + If you develop a new library, and you want it to be of the greatest +possible use to the public, we recommend making it free software that +everyone can redistribute and change. You can do so by permitting +redistribution under these terms (or, alternatively, under the terms of the +ordinary General Public License). + + To apply these terms, attach the following notices to the library. It is +safest to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least the +"copyright" line and a pointer to where the full notice is found. + + <one line to give the library's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + This library 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 + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the library, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the + library `Frob' (a library for tweaking knobs) written by James Random Hacker. + + <signature of Ty Coon>, 1 April 1990 + Ty Coon, President of Vice + +That's all there is to it! Added: maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/lgpl_v3/header.txt =================================================================== --- maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/lgpl_v3/header.txt (rev 0) +++ maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/lgpl_v3/header.txt 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,16 @@ +%1$s +Copyright (C) %2$s %3$s + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU Lesser 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 Lesser Public License for more details. + +You should have received a copy of the GNU General Lesser Public +License along with this program. If not, see +<http://www.gnu.org/licenses/lgpl-3.0.html>. Added: maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/lgpl_v3/license.txt =================================================================== --- maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/lgpl_v3/license.txt (rev 0) +++ maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/lgpl_v3/license.txt 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,166 @@ + GNU LESSER GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + You may place library facilities that are a work based on the +Library side by side in a single library together with other library +facilities that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. + Added: maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/licenses.properties =================================================================== --- maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/licenses.properties (rev 0) +++ maven-helper-plugin/trunk/src/main/resources/META-INF/licenses/licenses.properties 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,5 @@ +gpl_v1=License gpl version 1.0 +gpl_v2=License gpl version 2.0 +gpl_v3=License gpl version 3.0 +lgpl_v2_1=License lgpl version 2.1 +lgpl_v3=License lgpl version 3.0 Added: maven-helper-plugin/trunk/src/main/resources/assemblies/deps.xml =================================================================== --- maven-helper-plugin/trunk/src/main/resources/assemblies/deps.xml (rev 0) +++ maven-helper-plugin/trunk/src/main/resources/assemblies/deps.xml 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,45 @@ +<assembly> + <id>deps</id> + <formats> + <format>zip</format> + </formats> + <!-- This don't support SNAPSHOT --> + <dependencySets> + <dependencySet> + <outputDirectory>lib</outputDirectory> + <excludes> + <!--exclude>junit:junit</exclude--> + <exclude>${artifact.groupId}:${artifact.artifactId}</exclude> + </excludes> + <scope>runtime</scope> + </dependencySet> + </dependencySets> + <fileSets> + <fileSet> + <directory>target</directory> + <outputDirectory>/</outputDirectory> + <includes> + <include>*.jar</include> + </includes> + <excludes> + <exclude>*-sources.jar</exclude> + <exclude>*-javadoc.jar</exclude> + </excludes> + </fileSet> + <fileSet> + <outputDirectory>/</outputDirectory> + <includes> + <include>README*</include> + <include>LICENSE*</include> + <include>pom.xml</include> + </includes> + </fileSet> + <fileSet> + <outputDirectory>/</outputDirectory> + <directory>target/classes</directory> + <includes> + <include>THIRD-PARTY.txt</include> + </includes> + </fileSet> + </fileSets> +</assembly> \ No newline at end of file Added: maven-helper-plugin/trunk/src/main/resources/assemblies/full.xml =================================================================== --- maven-helper-plugin/trunk/src/main/resources/assemblies/full.xml (rev 0) +++ maven-helper-plugin/trunk/src/main/resources/assemblies/full.xml 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,47 @@ +<assembly> + <id>full</id> + <formats> + <format>zip</format> + </formats> + <!-- This don't support SNAPSHOT --> + <dependencySets> + <dependencySet> + <outputDirectory>lib</outputDirectory> + <excludes> + <exclude>${artifact.groupId}:${artifact.artifactId}</exclude> + </excludes> + <scope>runtime</scope> + </dependencySet> + </dependencySets> + <fileSets> + <fileSet> + <directory>target</directory> + <outputDirectory>/</outputDirectory> + <includes> + <include>*.jar</include> + </includes> + <excludes> + <exclude>*-sources.jar</exclude> + </excludes> + </fileSet> + <fileSet> + <outputDirectory>/</outputDirectory> + <includes> + <include>README*</include> + <include>LICENSE*</include> + <include>pom.xml</include> + </includes> + </fileSet> + <fileSet> + <outputDirectory>/</outputDirectory> + <directory>target/classes</directory> + <includes> + <include>THIRD-PARTY.txt</include> + </includes> + </fileSet> + <fileSet> + <directory>src</directory> + <!--useDefaultExcludes>true</useDefaultExcludes--> + </fileSet> + </fileSets> +</assembly> \ No newline at end of file Added: maven-helper-plugin/trunk/src/site/rst/Todo.rst =================================================================== --- maven-helper-plugin/trunk/src/site/rst/Todo.rst (rev 0) +++ maven-helper-plugin/trunk/src/site/rst/Todo.rst 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,4 @@ +TODO +==== + +Any idea ? Added: maven-helper-plugin/trunk/src/site/rst/index.rst =================================================================== --- maven-helper-plugin/trunk/src/site/rst/index.rst (rev 0) +++ maven-helper-plugin/trunk/src/site/rst/index.rst 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,47 @@ +Introduction +------------ + +TODO Update this documentation + +Maven license-switcher Plugin +============================= + +The Maven License Switcher Plugin is used to switch the license on java sources of a maven module. + +Goals Overview +~~~~~~~~~~~~~~ + +The plugin has the following goals: + + * `license-switcher license`_ add license file and third-party files to classpath (generate them if necessary). + + * `license-switcher third-party`_ write the licenses of all third-party libraries used in project. + + * `license-switcher switch`_ parse Java sources and switch license header. + + * `license-switcher help`_ display help about the plugin (goals, usage). + + * `license-switcher available-licenses`_ display the known licenses of the plugin. + +Usage +~~~~~ + + Instructions on how to use the Plugin can be found on `usage page`_ + +Examples +~~~~~~~~ + + to be done. + +.. _license-switcher license: license-mojo.html + +.. _license-switcher third-party: third-party-mojo.html + +.. _license-switcher switch: switch-mojo.html + +.. _license-switcher help: help-mojo.html + +.. _license-switcher available-licenses: available-licenses-mojo.html + +.. _usage page: usage.html + \ No newline at end of file Added: maven-helper-plugin/trunk/src/site/site.xml =================================================================== --- maven-helper-plugin/trunk/src/site/site.xml (rev 0) +++ maven-helper-plugin/trunk/src/site/site.xml 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,62 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project name="${project.name}"> + + <publishDate format="dd/MM/yyyy"/> + + <skin> + <groupId>org.nuiton</groupId> + <artifactId>maven-nuiton-skin</artifactId> + <version>1.0.0-alpha-1</version> + </skin> + + <bannerLeft> + <name>${project.name}</name> + <href>index.html</href> + </bannerLeft> + + <bannerRight> + <src>http://www.codelutin.com/images/lutinorange-codelutin.png</src> + <href>${project.organization.url}</href> + </bannerRight> + + <poweredBy> + <logo href="http://maven.apache.org" name="Maven" img="images/logos/maven-feather.png"/> + </poweredBy> + + <body> + <links> + <item name="Labs" href="http://labs.libre-entreprise.org"/> + <item name="Nuiton" href="http://www.nuiton.org"/> + <item name="${project.organization.name}" href="${project.organization.url}"/> + </links> + + <menu name="Utilisateur"> + <item name="Introduction" href="index.html"/> + <item name="Goals" href="plugin-info.html"> + <item name="add-license" href="add-license-mojo.html"/> + <item name="add-third-party" href="add-third-party-mojo.html"/> + <item name="add-scm" href="add-scm-mojo.html"/> + <item name="available-licenses" href="available-licenses-mojo.html"/> + <item name="help" href="help-mojo.html"/> + </item> + </menu> + + <menu name="Téléchargement"> + <item href="${repository.home.url}/org/nuiton/${project.artifactId}/${project.version}/${project.build.finalName}.jar" + name="Librairie (jar)"/> + <item href="${repository.home.url}/org/nuiton/${project.artifactId}/${project.version}/${project.build.finalName}-javadoc.jar" + name="Javadoc (jar)"/> + <item href="${repository.home.url}/org/nuiton/${project.artifactId}/${project.version}/${project.build.finalName}-sources.jar" + name="Sources (jar)"/> + <item href="${repository.home.url}/org/nuiton/${project.artifactId}/${project.version}/${project.build.finalName}-tests.jar" + name="Test Librairie (jar)"/> + <item href="${repository.home.url}/org/nuiton/${project.artifactId}/${project.version}/${project.build.finalName}-test-javadoc.jar" + name="Test Javadoc (jar)"/> + <item href="${repository.home.url}/org/nuiton/${project.artifactId}/${project.version}/${project.build.finalName}-test-sources.jar" + name="Test Sources (jar)"/> + </menu> + + <menu ref="reports"/> + + </body> +</project> Added: maven-helper-plugin/trunk/src/test/java/org/nuiton/license/BaseLicenseTestCase.java =================================================================== --- maven-helper-plugin/trunk/src/test/java/org/nuiton/license/BaseLicenseTestCase.java (rev 0) +++ maven-helper-plugin/trunk/src/test/java/org/nuiton/license/BaseLicenseTestCase.java 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,68 @@ +package org.nuiton.license; + +import org.junit.Assert; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import org.codehaus.plexus.util.IOUtil; +import org.nuiton.util.FileUtil; + +/** @author chemit */ +public abstract class BaseLicenseTestCase extends Assert { + + protected static final String encoding = "utf-8"; + + protected File getBaseDir() { + String path = System.getenv("basedir"); + if (path == null) { + path = new File("").getAbsolutePath(); + } + return new File(path); + } + + protected void assertLicenseFound(String name, License license) throws IOException { + assertNotNull(license); + assertEquals(name, license.getName()); + assertNotNull(license.getLicenseContent(encoding)); + assertNotNull(license.getHeaderContent(encoding)); + } + + protected File createLicenseRepository(boolean createLicene) throws IOException { + long timestamp = System.currentTimeMillis(); + + File repo = new File(getBaseDir(), "target" + File.separator + "licenses_" + timestamp); + + if (createLicene) { + + String licenseName = "dummy_" + timestamp; + addLicenseToRepository(repo, licenseName); + } + return repo; + } + + protected void addLicenseToRepository(File repo, String licenseName) throws IOException { + + File defFile = new File(repo, "licenses.properties"); + + String content = ""; + if (defFile.exists()) { + + content = IOUtil.toString(new FileInputStream(defFile), encoding) + "\n"; +// content = FileUtil.readAsString(defFile, encoding) + "\n"; + } + + + FileUtil.write(defFile, content + licenseName + "=My dummy license\n", encoding); +// FileUtil.writeString(defFile, content + licenseName + "=My dummy license\n", encoding); + // create dummy licenses + File file = new File(repo, licenseName); + file.mkdirs(); + FileUtil.write(new File(file, "license.txt"), "license:" + licenseName, encoding); + FileUtil.write(new File(file, "header.txt"), "header:" + licenseName, encoding); +// FileUtil.writeString(new File(file, "license.txt"), "license:" + licenseName, encoding); +// FileUtil.writeString(new File(file, "header.txt"), "header:" + licenseName, encoding); + + } +} + Added: maven-helper-plugin/trunk/src/test/java/org/nuiton/license/JarLicenseResolverTest.java =================================================================== --- maven-helper-plugin/trunk/src/test/java/org/nuiton/license/JarLicenseResolverTest.java (rev 0) +++ maven-helper-plugin/trunk/src/test/java/org/nuiton/license/JarLicenseResolverTest.java 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,62 @@ +package org.nuiton.license; + +import org.junit.Test; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Map; + +/** @author chemit */ +public class JarLicenseResolverTest extends BaseLicenseTestCase { + + @Test(expected = IllegalArgumentException.class) + public void testResolvFailed1() throws Exception { + new JarLicenseResolver().resolv(null); + } + + @Test(expected = IllegalArgumentException.class) + public void testResolvFailed2() throws Exception { + new JarLicenseResolver().resolv(""); + } + + @Test(expected = IllegalArgumentException.class) + public void testResolvFailed3() throws Exception { + new JarLicenseResolver().resolv(" "); + } + + @Test + public void testResolv() throws Exception { + JarLicenseResolver resolver = new JarLicenseResolver(); + + { + String name = "dummy_" + System.currentTimeMillis(); + License license = resolver.resolv(name); + assertNull(license); + } + + for (String name : new String[]{ + "gpl_v1", + "gpl_v2", + "gpl_v3", + "lgpl_v2_1", + "lgpl_v3"}) { + License license = resolver.resolv(name); + assertLicenseFound(name, license); + } + + } + + @Test + public void testGetLicenseNames() throws Exception { + JarLicenseResolver resolver = new JarLicenseResolver(); + Map<String, String> licenseNames = resolver.getLicenseNames(); + + assertEquals(Arrays.asList("gpl_v1", + "gpl_v2", + "gpl_v3", + "lgpl_v2_1", + "lgpl_v3"), new ArrayList<String>(licenseNames.keySet())); + } + + +} Added: maven-helper-plugin/trunk/src/test/java/org/nuiton/license/LicenseFactoryTest.java =================================================================== --- maven-helper-plugin/trunk/src/test/java/org/nuiton/license/LicenseFactoryTest.java (rev 0) +++ maven-helper-plugin/trunk/src/test/java/org/nuiton/license/LicenseFactoryTest.java 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,80 @@ +package org.nuiton.license; + +import org.junit.Test; + +import java.io.File; +import java.util.Map; + +/** @author chemit */ +public class LicenseFactoryTest extends BaseLicenseTestCase { + + @Test + public void testNewInstance() throws Exception { + + LicenseFactory factory = LicenseFactory.newInstance(); + assertNotNull(factory); + assertEquals(1, factory.resolvers.size()); + assertNotNull(factory.resolvers.get(0)); + assertEquals(JarLicenseResolver.class, factory.resolvers.get(0).getClass()); + + factory = LicenseFactory.newInstance(""); + assertNotNull(factory); + assertEquals(1, factory.resolvers.size()); + assertNotNull(factory.resolvers.get(0)); + assertEquals(JarLicenseResolver.class, factory.resolvers.get(0).getClass()); + + factory = LicenseFactory.newInstance("yo"); + assertNotNull(factory); + + assertEquals(2, factory.resolvers.size()); + assertNotNull(factory.resolvers.get(0)); + assertEquals(JarLicenseResolver.class, factory.resolvers.get(0).getClass()); + assertNotNull(factory.resolvers.get(1)); + assertEquals(LicenseResolver.class, factory.resolvers.get(1).getClass()); + assertEquals("yo", factory.resolvers.get(1).getBaseURL()); + + factory.addResolver(new LicenseResolver("yo2")); + assertEquals(3, factory.resolvers.size()); + assertNotNull(factory.resolvers.get(0)); + assertEquals(JarLicenseResolver.class, factory.resolvers.get(0).getClass()); + assertNotNull(factory.resolvers.get(1)); + assertEquals(LicenseResolver.class, factory.resolvers.get(1).getClass()); + assertEquals("yo", factory.resolvers.get(1).getBaseURL()); + assertEquals(LicenseResolver.class, factory.resolvers.get(2).getClass()); + assertEquals("yo2", factory.resolvers.get(2).getBaseURL()); + + } + + @Test + public void testGetLicenseNames() throws Exception { + LicenseFactory factory = LicenseFactory.newInstance(); + + int expectedJarResolverLicenses = 5; + Map<String, String> licenseNames = factory.getLicenseNames(); + //todo make dynamic that test + assertEquals(expectedJarResolverLicenses, licenseNames.size()); + + // create a new dummy license repository with a license + File repo = createLicenseRepository(true); + + LicenseResolver resolver = new LicenseResolver(); + resolver.setBaseURL(repo.toURI().toURL().toString()); + + factory.addResolver(resolver); + + licenseNames = factory.getLicenseNames(); + assertEquals(expectedJarResolverLicenses + 1, licenseNames.size()); + + // add a new license to repo + long timestamp = System.currentTimeMillis(); + String licenseName = "dummy2_" + timestamp; + addLicenseToRepository(repo, licenseName); + + factory = LicenseFactory.newInstance(repo.toURI().toURL().toString()); + + licenseNames = factory.getLicenseNames(); + assertEquals(expectedJarResolverLicenses + 2, licenseNames.size()); + + } + +} Added: maven-helper-plugin/trunk/src/test/java/org/nuiton/license/LicenseGeneratorFactoryTest.java =================================================================== --- maven-helper-plugin/trunk/src/test/java/org/nuiton/license/LicenseGeneratorFactoryTest.java (rev 0) +++ maven-helper-plugin/trunk/src/test/java/org/nuiton/license/LicenseGeneratorFactoryTest.java 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,34 @@ +package org.nuiton.license; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +/** @author chemit */ +public class LicenseGeneratorFactoryTest { + + @Before + public void setUp() { + // Add your code here + } + + @After + public void tearDown() { + // Add your code here + } + + @Test + public void testGetAvailableGenerator() { + // Add your code here + } + + @Test + public void testGetGeneratorMatchers() { + // Add your code here + } + + @Test + public void testAddGenerator() { + // Add your code here + } +} Added: maven-helper-plugin/trunk/src/test/java/org/nuiton/license/LicenseResolverTest.java =================================================================== --- maven-helper-plugin/trunk/src/test/java/org/nuiton/license/LicenseResolverTest.java (rev 0) +++ maven-helper-plugin/trunk/src/test/java/org/nuiton/license/LicenseResolverTest.java 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,113 @@ +package org.nuiton.license; + +import org.junit.Test; + +import java.io.File; +import java.util.Map; + +/** @author chemit */ +public class LicenseResolverTest extends BaseLicenseTestCase { + + @Test(expected = IllegalArgumentException.class) + public void testResolvIllegalArgumentException1() throws Exception { + + LicenseResolver resolver = new LicenseResolver(); + // no baseURL + // no licenseName + // no licenses.txt + resolver.resolv(null); + } + + @Test(expected = IllegalArgumentException.class) + public void testResolvIllegalArgumentException2() throws Exception { + + LicenseResolver resolver = new LicenseResolver(); + + // no baseURL + // no licenseName + // no licenses.txt + resolver.resolv(""); + } + + @Test(expected = IllegalArgumentException.class) + public void testResolvIllegalArgumentException3() throws Exception { + + LicenseResolver resolver = new LicenseResolver(); + + // no baseURL + // no licenseName + // no licenses.txt + resolver.resolv(" "); + } + + @Test(expected = IllegalArgumentException.class) + public void testResolvIllegalArgumentException4() throws Exception { + + LicenseResolver resolver = new LicenseResolver(); + + // no baseURL + // no licenses.txt + resolver.resolv("dummy"); + } + + @Test(expected = IllegalArgumentException.class) + public void testResolvIllegalArgumentException5() throws Exception { + + LicenseResolver resolver = new LicenseResolver(); + + + resolver.setBaseURL("dummy"); + // no licenses.txt + resolver.resolv("dummy"); + } + + @Test + public void testResolv() throws Exception { + + LicenseResolver resolver = new LicenseResolver(); + + long timestamp = System.currentTimeMillis(); + String licenseName = "dummy_" + timestamp; + + File repo = createLicenseRepository(false); + + resolver.setBaseURL(repo.toURI().toURL().toString()); + + License license; + + try { + // no licenses.properties + resolver.resolv(licenseName); + fail(); + } catch (IllegalArgumentException e) { + assertTrue(true); + } + + addLicenseToRepository(repo, licenseName); + + //FileUtil.writeString(new File(repo, "licenses.properties"), licenseName + "=My dummy license\n", encoding); + //license = resolver.resolv(licenseName); + //assertNull(license); + + Map<String, String> licenseNames = resolver.getLicenseNames(); + assertNotNull(licenseNames); + assertEquals(1, licenseNames.size()); + assertTrue(licenseNames.containsKey(licenseName)); + + // create dummy licenses + //File file = new File(repo, licenseName); + //file.mkdirs(); + //FileUtil.writeString(new File(file, "license.txt"), "license", encoding); + //FileUtil.writeString(new File(file, "header.txt"), "header", encoding); + + license = resolver.resolv(licenseName); + assertNotNull(license); + assertEquals(licenseName, license.getName()); + assertNotNull(license.getLicenseContent(encoding)); + assertNotNull(license.getHeaderContent(encoding)); + assertEquals("license:" + licenseName, license.getLicenseContent(encoding)); + assertEquals("header:" + licenseName, license.getHeaderContent(encoding)); + + } + +} \ No newline at end of file Added: maven-helper-plugin/trunk/src/test/java/org/nuiton/license/plugin/LicensePluginTest.java =================================================================== --- maven-helper-plugin/trunk/src/test/java/org/nuiton/license/plugin/LicensePluginTest.java (rev 0) +++ maven-helper-plugin/trunk/src/test/java/org/nuiton/license/plugin/LicensePluginTest.java 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,70 @@ +package org.nuiton.license.plugin; + +import org.nuiton.util.PluginConfig; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.plugin.MojoFailureException; +import static org.junit.Assert.*; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; + +import java.io.File; +import java.io.IOException; +import org.junit.AfterClass; +import org.nuiton.util.BasePluginTestCase; + +/** @author chemit */ +public class LicensePluginTest extends BasePluginTestCase { + + @BeforeClass + public static void initClass() throws Exception { + initConfigs(LicensePluginTest.class, "testOne"); + } + + @AfterClass + public static void afterClass() throws Exception { + configItr = null; + testDir = null; + } + + @Before + @Override + public void setUp() throws Exception { + super.setUp(); + LicensePlugin plugin = (LicensePlugin) mojo; + plugin.setOutputDirectory(new File(getBaseDir(), plugin.getOutputDirectory().toString())); + if (!plugin.getOutputDirectory().exists()) { + if (!plugin.getOutputDirectory().mkdirs()) { + throw new IOException("could not create directory : " + plugin.getOutputDirectory()); + } + } + plugin.setLicenseFile(new File(pomFile.getParentFile(), plugin.getLicenseFile().toString())); + } + + @Test + @PluginConfig(pomName = "testOne.xml", goalName = "add-license") + public void testOne() throws MojoExecutionException, MojoFailureException { + assertNotNull(mojo); + + LicensePlugin p = (LicensePlugin) mojo; + + long t0 = p.getLicenseFile().lastModified(); + + // always assume pom is older than any file + // since we can not ensure order of copy test resources + p.getProject().getFile().setLastModified(0); + + p.execute(); + + long t1 = p.getLicenseFile().lastModified(); + + assertEquals(t0, t1); + + p.setForce(true); + + p.execute(); + t1 = p.getLicenseFile().lastModified(); + + assertTrue(t1 > t0); + } +} Added: maven-helper-plugin/trunk/src/test/java/org/nuiton/util/BasePluginTestCase.java =================================================================== --- maven-helper-plugin/trunk/src/test/java/org/nuiton/util/BasePluginTestCase.java (rev 0) +++ maven-helper-plugin/trunk/src/test/java/org/nuiton/util/BasePluginTestCase.java 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,115 @@ +package org.nuiton.util; + +import org.apache.maven.plugin.Mojo; +import org.apache.maven.plugin.testing.AbstractMojoTestCase; +import org.codehaus.plexus.PlexusContainer; +import org.junit.Before; + +import java.io.File; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import org.apache.maven.project.MavenProject; +import org.codehaus.plexus.PlexusTestCase; +import org.nuiton.AbstractPlugin; + +/** @author chemit */ +public abstract class BasePluginTestCase { + + protected static File basedir; + protected static File testDir; + protected static Iterator<PluginConfig> configItr; + protected static MyAbstractMojoTestCase delegate; + protected String goalName; + protected File pomFile; + protected AbstractPlugin mojo; + + protected static File getBaseDir() { + if (basedir == null) { + + String path = PlexusTestCase.getBasedir(); + basedir = new File(path); + } + return basedir; + } + + protected static File getTestDir() { + return testDir; + } + + protected static void initConfigs(Class<? extends BasePluginTestCase> klass, String... testNames) throws Exception { + List<PluginConfig> configs = new ArrayList<PluginConfig>(); + String rep = klass.getName(); + rep = rep.replaceAll("\\.", File.separator); + + File f = new File(getBaseDir(), "target" + File.separator + "test-classes"); + //File f = new File(getBaseDir(), "src" + File.separator + "test" + File.separator + "resources"); + testDir = new File(f, rep); + System.out.println("test dir : " + testDir); + + for (String testName : testNames) { + Method m = klass.getMethod(testName); + if (m == null) { + throw new IllegalAccessException("could not find method " + testName + " on class " + klass.getName()); + } + + PluginConfig annotation = m.getAnnotation(PluginConfig.class); + if (annotation == null) { + throw new IllegalAccessException("could not find annotation " + PluginConfig.class.getName() + " on method " + testName); + } + configs.add(annotation); + } + + delegate = new MyAbstractMojoTestCase(); + delegate.setUp(); + configItr = configs.iterator(); + } + + @Before + public void setUp() throws Exception { + initPomFile(configItr.next()); + } + + protected void initPomFile(PluginConfig pluginConfig) throws Exception { + this.goalName = pluginConfig.goalName(); + this.pomFile = new File(getTestDir(), pluginConfig.pomName()); + this.mojo = (AbstractPlugin) delegate.lookupMojo(goalName, pomFile); + + MavenProject project = mojo.getProject(); + if (project == null) { +// MavenProjectBuilder projectBuilder = (MavenProjectBuilder) delegate.getContainer().lookup(MavenProjectBuilder.ROLE); +// ProjectBuilderConfiguration projectBuilderConfiguration = null; +// project = projectBuilder.build(pomFile, projectBuilderConfiguration); + + project = new MavenProject(); + + this.mojo.setProject(project); + } + + this.mojo.getProject().setFile(pomFile); + } + + public static class MyAbstractMojoTestCase extends AbstractMojoTestCase { + + @Override + public Mojo lookupMojo(String goal, File pom) throws Exception { + return super.lookupMojo(goal, pom); + } + + @Override + public void setUp() throws Exception { + super.setUp(); + } + + @Override + public void tearDown() throws Exception { + super.tearDown(); + } + + @Override + public PlexusContainer getContainer() { + return super.getContainer(); + } + } +} \ No newline at end of file Added: maven-helper-plugin/trunk/src/test/java/org/nuiton/util/JavaDummy.java =================================================================== --- maven-helper-plugin/trunk/src/test/java/org/nuiton/util/JavaDummy.java (rev 0) +++ maven-helper-plugin/trunk/src/test/java/org/nuiton/util/JavaDummy.java 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,26 @@ +/** + * *##% Lutin plugin utilities library + * Copyright (C) 2008 CodeLutin + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* + */ +package org.nuiton.util; + +/** @author chemit */ +public class JavaDummy { + /** + * A dummy file to test {@link org.nuiton.util.FileUpdaterHelper.JavaFileUpdater} in {@link JavaFileUpdaterTest} + */ +} Added: maven-helper-plugin/trunk/src/test/java/org/nuiton/util/JavaFileUpdaterTest.java =================================================================== --- maven-helper-plugin/trunk/src/test/java/org/nuiton/util/JavaFileUpdaterTest.java (rev 0) +++ maven-helper-plugin/trunk/src/test/java/org/nuiton/util/JavaFileUpdaterTest.java 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,157 @@ +/** + * *##% Lutin plugin utilities library + * Copyright (C) 2008 CodeLutin + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. *##% + */ +/* + * Copyright (C) 2002-2008 Code Lutin, Benjamin Poussin + * + * 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 2 + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +package org.nuiton.util; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import org.nuiton.util.FileUpdaterHelper.JavaFileUpdater; +import java.io.File; +import org.junit.BeforeClass; +import org.junit.Test; +import static org.junit.Assert.*; + +/** + * Test of a {@link JavaFileUpdater} on the test sourcepath and test-classpath + * + * @author chemit + */ +public class JavaFileUpdaterTest { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private final Log log = LogFactory.getLog(FileUpdaterHelper.class); + + + static final char SEP = File.separatorChar; + + static MirroredFileUpdater fileUpdater; + + static File sourceFile; + static File mirrorFile; + + @BeforeClass + public static void initClass() throws Exception { + String basedir = System.getProperty("basedir"); + if (basedir == null) { + log.warn("basedir not found, test is not executed from maven..."); + basedir = new File(new File("").getAbsolutePath()).getAbsolutePath(); + } + + log.info("basedir = " + basedir); + + File src = new File(basedir, "src" + SEP + "test" + SEP + "java"); + File dir = new File(basedir, "target" + SEP + "test-classes"); + fileUpdater = (MirroredFileUpdater) FileUpdaterHelper.newJavaFileUpdater(src, dir); + log.info(fileUpdater); + + // test source dir exists + File sourceDirectory = fileUpdater.getSourceDirectory(); + assertTrue("sourcedir is null", sourceDirectory != null); + assertTrue("sourcedir does not exists " + sourceDirectory, sourceDirectory.exists()); + + // test destination dir exists + File destinationDirectory = fileUpdater.getDestinationDirectory(); + assertTrue("destinationDirectory is null", destinationDirectory != null); + assertTrue("destinationDirectory does not exists " + destinationDirectory, destinationDirectory.exists()); + + sourceFile = new File(fileUpdater.getSourceDirectory(), "org" + SEP + "nuiton" + SEP + "util" + SEP + JavaDummy.class.getSimpleName() + ".java"); + + } + +@Test + public void testSourceFileIsUptoDate() throws Exception { + + assertTrue("fileUpdater was not init", fileUpdater != null); + assertTrue("sourceFile was not init ", sourceFile != null); + assertTrue("could not find source of this test " + sourceFile, sourceFile.exists()); + + // java file is up to date since it was compiled to launch this test + assertTrue(sourceFile + " should be uptodate", fileUpdater.isFileUpToDate(sourceFile)); + + mirrorFile = fileUpdater.getMirrorFile(sourceFile); + } + +@Test + public void testSourceFileDoesNotHaveMirrorFile() throws Exception { + + assertTrue("fileUpdater was not init", fileUpdater != null); + assertTrue("sourceFile was not init ", sourceFile != null); + assertTrue("could not find source of this test " + sourceFile, sourceFile.exists()); + assertTrue("mirrorFile was not init ", mirrorFile != null); + assertTrue("could not find mirrorFile " + mirrorFile, mirrorFile.exists()); + + // now rename mirror Class, so source file is no more up to date + File mirrorClassRenamed = new File(fileUpdater.getMirrorFile(sourceFile).getAbsolutePath() + "2"); + mirrorFile.renameTo(mirrorClassRenamed); + + // java file is no more up to date + assertFalse(sourceFile + " should not be uptodate", fileUpdater.isFileUpToDate(sourceFile)); + + // renmae mirror Class to his original name + mirrorClassRenamed.renameTo(mirrorFile); + + // java file is now up to date (rename method does not affect lasmodified property on a file) + assertTrue(sourceFile + " should be uptodate", fileUpdater.isFileUpToDate(sourceFile)); + } + +@Test + public void testSourceFileIsNewerThanMirrorFile() throws Exception { + + assertTrue("fileUpdater was not init", fileUpdater != null); + assertTrue("sourceFile was not init ", sourceFile != null); + assertTrue("could not find source of this test " + sourceFile, sourceFile.exists()); + assertTrue("mirrorFile was not init ", mirrorFile != null); + assertTrue("could not find mirrorFile " + mirrorFile, mirrorFile.exists()); + + long sourceTime = sourceFile.lastModified(); + long mirrorTime = mirrorFile.lastModified(); + + // make source file newer than mirror file + sourceFile.setLastModified(mirrorTime + 10); + + // java file is no more up to date + assertFalse(sourceFile + " should not be uptodate", fileUpdater.isFileUpToDate(sourceFile)); + + // put back old time to source file + sourceFile.setLastModified(sourceTime); + + // java file is now up to date (rename method does not affect lasmodified property on a file) + assertTrue(sourceFile + " should be uptodate", fileUpdater.isFileUpToDate(sourceFile)); + } + +} Added: maven-helper-plugin/trunk/src/test/java/org/nuiton/util/JaxxDummy.java =================================================================== --- maven-helper-plugin/trunk/src/test/java/org/nuiton/util/JaxxDummy.java (rev 0) +++ maven-helper-plugin/trunk/src/test/java/org/nuiton/util/JaxxDummy.java 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,26 @@ +/** + * *##% Lutin plugin utilities library + * Copyright (C) 2008 CodeLutin + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. ##%* + */ +package org.nuiton.util; + +/** @author chemit */ +public class JaxxDummy { + /** + * A dummy file to test {@link org.nuiton.util.FileUpdaterHelper.JaxxFileUpdater} in {@link JaxxFileUpdaterTest} + */ +} Added: maven-helper-plugin/trunk/src/test/java/org/nuiton/util/JaxxFileUpdaterTest.java =================================================================== --- maven-helper-plugin/trunk/src/test/java/org/nuiton/util/JaxxFileUpdaterTest.java (rev 0) +++ maven-helper-plugin/trunk/src/test/java/org/nuiton/util/JaxxFileUpdaterTest.java 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,160 @@ +/** + * *##% Lutin plugin utilities library + * Copyright (C) 2008 CodeLutin + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser 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 Lesser Public License for more details. + * + * You should have received a copy of the GNU General Lesser Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/lgpl-3.0.html>. *##% + */ +/* + * Copyright (C) 2002-2008 Code Lutin, Benjamin Poussin + * + * 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 2 + * 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, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ +package org.nuiton.util; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import java.io.File; +import org.junit.BeforeClass; +import org.junit.Test; +import static org.junit.Assert.*; + +/** + * Test of a {@link org.nuiton.util.FileUpdaterHelper.JaxxFileUpdater} on the test sourcepath + * + * @author chemit + */ +public class JaxxFileUpdaterTest { + + /** to use log facility, just put in your code: log.info(\"...\"); */ + static private final Log log = LogFactory.getLog(FileUpdaterHelper.class); + static final char SEP = File.separatorChar; + static MirroredFileUpdater fileUpdater; + static File sourceFile; + static File mirrorFile; + + @BeforeClass + public static void initClass() throws Exception { + + String basedir = System.getProperty("basedir"); + if (basedir == null) { + log.warn("basedir not found, test is not executed from maven..."); + basedir = new File(new File("").getAbsolutePath()).getAbsolutePath(); + } + + log.info("basedir = " + basedir); + + File src = new File(basedir, "src" + SEP + "test" + SEP + "resources"); + File dir = new File(basedir, "src" + SEP + "test" + SEP + "java"); + fileUpdater = (MirroredFileUpdater) FileUpdaterHelper.newJaxxFileUpdater(src, dir); + log.info(fileUpdater); + + // test source dir exists + File sourceDirectory = fileUpdater.getSourceDirectory(); + assertTrue("sourcedir is null", sourceDirectory != null); + assertTrue("sourcedir does not exists " + sourceDirectory, sourceDirectory.exists()); + + // test destination dir exists + File destinationDirectory = fileUpdater.getDestinationDirectory(); + assertTrue("destinationDirectory is null", destinationDirectory != null); + assertTrue("destinationDirectory does not exists " + destinationDirectory, destinationDirectory.exists()); + + sourceFile = new File(fileUpdater.getSourceDirectory(), "org" + SEP + "nuiton" + SEP + "util" + SEP + JaxxDummy.class.getSimpleName() + ".jaxx"); + + } + + @Test + public void testSourceFileIsUptoDate() throws Exception { + + assertTrue("fileUpdater was not init", fileUpdater != null); + + assertTrue("sourceFile was not init ", sourceFile != null); + assertTrue("could not find source of this test " + sourceFile, sourceFile.exists()); + + mirrorFile = fileUpdater.getMirrorFile(sourceFile); + + // we do not know if jaxx file is newer than the dummy java source ? + + sourceFile.setLastModified(mirrorFile.lastModified() - 10); + + // java file is up to date since it was compiled to launch this test + assertTrue(sourceFile + " should be uptodate", fileUpdater.isFileUpToDate(sourceFile)); + } + + @Test + public void testSourceFileDoesNotHaveMirrorFile() throws Exception { + + assertTrue("fileUpdater was not init", fileUpdater != null); + + assertTrue("sourceFile was not init ", sourceFile != null); + assertTrue("could not find source of this test " + sourceFile, sourceFile.exists()); + + assertTrue("mirrorFile was not init ", mirrorFile != null); + assertTrue("could not find mirrorFile " + mirrorFile, mirrorFile.exists()); + + // now rename mirror Class, so source file is no more up to date + File mirrorClassRenamed = new File(fileUpdater.getMirrorFile(sourceFile).getAbsolutePath() + "2"); + mirrorFile.renameTo(mirrorClassRenamed); + + // java file is no more up to date + assertFalse(sourceFile + " should not be uptodate", fileUpdater.isFileUpToDate(sourceFile)); + + // renmae mirror Class to his original name + mirrorClassRenamed.renameTo(mirrorFile); + + // java file is now up to date (rename method does not affect lasmodified property on a file) + assertTrue(sourceFile + " should be uptodate", fileUpdater.isFileUpToDate(sourceFile)); + } + + @Test + public void testSourceFileIsNewerThanMirrorFile() throws Exception { + + assertTrue("fileUpdater was not init", fileUpdater != null); + + assertTrue("sourceFile was not init ", sourceFile != null); + assertTrue("could not find source of this test " + sourceFile, sourceFile.exists()); + + assertTrue("mirrorFile was not init ", mirrorFile != null); + assertTrue("could not find mirrorFile " + mirrorFile, mirrorFile.exists()); + + long sourceTime = sourceFile.lastModified(); + long mirrorTime = mirrorFile.lastModified(); + + // make source file newer than mirror file + sourceFile.setLastModified(mirrorTime + 10); + + // java file is no more up to date + assertFalse(sourceFile + " should not be uptodate", fileUpdater.isFileUpToDate(sourceFile)); + + // put back old time to source file + sourceFile.setLastModified(sourceTime); + + // java file is now up to date (rename method does not affect lasmodified property on a file) + assertTrue(sourceFile + " should be uptodate", fileUpdater.isFileUpToDate(sourceFile)); + } +} \ No newline at end of file Added: maven-helper-plugin/trunk/src/test/java/org/nuiton/util/PluginConfig.java =================================================================== --- maven-helper-plugin/trunk/src/test/java/org/nuiton/util/PluginConfig.java (rev 0) +++ maven-helper-plugin/trunk/src/test/java/org/nuiton/util/PluginConfig.java 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,20 @@ +package org.nuiton.util; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; +import java.lang.annotation.ElementType; +import java.lang.annotation.Inherited; + +/** @author chemit */ +@Retention(RetentionPolicy.RUNTIME) + +@Target(ElementType.METHOD) +@Inherited +public @interface PluginConfig { + + String goalName(); + + String pomName(); + +} \ No newline at end of file Added: maven-helper-plugin/trunk/src/test/resources/log4j.properties =================================================================== --- maven-helper-plugin/trunk/src/test/resources/log4j.properties (rev 0) +++ maven-helper-plugin/trunk/src/test/resources/log4j.properties 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,10 @@ +# Global logging configuration +log4j.rootLogger=ERROR, stdout +# Console output... +log4j.appender.stdout=org.apache.log4j.ConsoleAppender +log4j.appender.stdout.layout=org.apache.log4j.PatternLayout +log4j.appender.stdout.layout.ConversionPattern=%5p [%t] (%F:%L) %M - %m%n + +# package level +log4j.logger.org.nuiton=DEBUG + Added: maven-helper-plugin/trunk/src/test/resources/org/nuiton/license/plugin/LicensePluginTest/licenseOne.txt =================================================================== --- maven-helper-plugin/trunk/src/test/resources/org/nuiton/license/plugin/LicensePluginTest/licenseOne.txt (rev 0) +++ maven-helper-plugin/trunk/src/test/resources/org/nuiton/license/plugin/LicensePluginTest/licenseOne.txt 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1 @@ +dummy license \ No newline at end of file Added: maven-helper-plugin/trunk/src/test/resources/org/nuiton/license/plugin/LicensePluginTest/testOne.xml =================================================================== --- maven-helper-plugin/trunk/src/test/resources/org/nuiton/license/plugin/LicensePluginTest/testOne.xml (rev 0) +++ maven-helper-plugin/trunk/src/test/resources/org/nuiton/license/plugin/LicensePluginTest/testOne.xml 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <groupId>org.nuiton</groupId> + <artifactId>maven-helper-plugin-testOne</artifactId> + <version>0</version> + + <build> + + <plugins> + <plugin> + <groupId>org.nuiton</groupId> + <artifactId>maven-helper-plugin</artifactId> + <configuration> + <encoding>UTF-8</encoding> + <licenseName>lgpl_v3</licenseName> + <licenseFile>licenseOne.txt</licenseFile> + <outputDirectory>target/tests/license-plugin-test</outputDirectory> + <verbose>true</verbose> + </configuration> + <executions> + <execution> + <goals> + <goal>add-license</goal> + </goals> + </execution> + </executions> + </plugin> + </plugins> + </build> +</project> \ No newline at end of file Added: maven-helper-plugin/trunk/src/test/resources/org/nuiton/util/JaxxDummy.jaxx =================================================================== --- maven-helper-plugin/trunk/src/test/resources/org/nuiton/util/JaxxDummy.jaxx (rev 0) +++ maven-helper-plugin/trunk/src/test/resources/org/nuiton/util/JaxxDummy.jaxx 2009-05-17 09:02:35 UTC (rev 469) @@ -0,0 +1,3 @@ +<Object> + Dummy file to test org.nuiton.util.FileUpdaterHelper.JaxxFileUpdater +</Object> \ No newline at end of file