diff --git a/pom.xml b/pom.xml
index 59896e1..d90b069 100644
--- a/pom.xml
+++ b/pom.xml
@@ -216,6 +216,15 @@
     <pluginManagement>
       <plugins>
         <plugin>
+          <groupId>org.apache.rat</groupId>
+          <artifactId>apache-rat-plugin</artifactId>
+          <configuration>
+            <excludes>
+              <exclude>src/it/jdk16-annotation/src/main/resources/META-INF/services/javax.annotation.processing.Processor</exclude>
+            </excludes>
+          </configuration>
+        </plugin>
+        <plugin>
           <groupId>org.apache.maven.plugins</groupId>
           <artifactId>maven-plugin-plugin</artifactId>
           <version>${mavenPluginPluginVersion}</version>
diff --git a/src/it/MCOMPILER-170/invoker.properties b/src/it/MCOMPILER-170/invoker.properties
index ecfec7b..9f346f9 100644
--- a/src/it/MCOMPILER-170/invoker.properties
+++ b/src/it/MCOMPILER-170/invoker.properties
@@ -1,2 +1,19 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
 invoker.goals = clean compile -T4
-invoker.maven.version = 3.0+
\ No newline at end of file
+invoker.maven.version = 3.0+
diff --git a/src/it/MCOMPILER-170/mcompiler-170-1/pom.xml b/src/it/MCOMPILER-170/mcompiler-170-1/pom.xml
index 2188996..74371f9 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-1/pom.xml
+++ b/src/it/MCOMPILER-170/mcompiler-170-1/pom.xml
@@ -1,4 +1,24 @@
 <?xml version="1.0"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
 <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <modelVersion>4.0.0</modelVersion>
diff --git a/src/it/MCOMPILER-170/mcompiler-170-1/src/main/java/org/apache/maven/plugins/compiler/it/App.java b/src/it/MCOMPILER-170/mcompiler-170-1/src/main/java/org/apache/maven/plugins/compiler/it/App.java
index e870d44..bcbf5dd 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-1/src/main/java/org/apache/maven/plugins/compiler/it/App.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-1/src/main/java/org/apache/maven/plugins/compiler/it/App.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 /**
  * Hello world!
  */
diff --git a/src/it/MCOMPILER-170/mcompiler-170-1/src/main/java/org/apache/maven/plugins/compiler/it/App2.java b/src/it/MCOMPILER-170/mcompiler-170-1/src/main/java/org/apache/maven/plugins/compiler/it/App2.java
index 92d0c5e..6a22d39 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-1/src/main/java/org/apache/maven/plugins/compiler/it/App2.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-1/src/main/java/org/apache/maven/plugins/compiler/it/App2.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 /**
  * Hello world!
  *
diff --git a/src/it/MCOMPILER-170/mcompiler-170-1/src/main/java/org/apache/maven/plugins/compiler/it/App3.java b/src/it/MCOMPILER-170/mcompiler-170-1/src/main/java/org/apache/maven/plugins/compiler/it/App3.java
index 2979797..d970eec 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-1/src/main/java/org/apache/maven/plugins/compiler/it/App3.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-1/src/main/java/org/apache/maven/plugins/compiler/it/App3.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 /**
  * Hello world!
  *
diff --git a/src/it/MCOMPILER-170/mcompiler-170-1/src/main/java/org/apache/maven/plugins/compiler/it/App4.java b/src/it/MCOMPILER-170/mcompiler-170-1/src/main/java/org/apache/maven/plugins/compiler/it/App4.java
index 3ae390b..1cce4d8 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-1/src/main/java/org/apache/maven/plugins/compiler/it/App4.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-1/src/main/java/org/apache/maven/plugins/compiler/it/App4.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 /**
  * Hello world!
  *
diff --git a/src/it/MCOMPILER-170/mcompiler-170-1/src/main/java/org/apache/maven/plugins/compiler/it/App5.java b/src/it/MCOMPILER-170/mcompiler-170-1/src/main/java/org/apache/maven/plugins/compiler/it/App5.java
index 7aabfca..beab680 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-1/src/main/java/org/apache/maven/plugins/compiler/it/App5.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-1/src/main/java/org/apache/maven/plugins/compiler/it/App5.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 /**
  * Hello world!
  *
diff --git a/src/it/MCOMPILER-170/mcompiler-170-1/src/main/java/org/apache/maven/plugins/compiler/it/App6.java b/src/it/MCOMPILER-170/mcompiler-170-1/src/main/java/org/apache/maven/plugins/compiler/it/App6.java
index 03e5a15..c748ea2 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-1/src/main/java/org/apache/maven/plugins/compiler/it/App6.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-1/src/main/java/org/apache/maven/plugins/compiler/it/App6.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 /**
  * Hello world!
  *
diff --git a/src/it/MCOMPILER-170/mcompiler-170-1/src/main/java/org/apache/maven/plugins/compiler/it/App7.java b/src/it/MCOMPILER-170/mcompiler-170-1/src/main/java/org/apache/maven/plugins/compiler/it/App7.java
index 08326f2..0b09cdf 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-1/src/main/java/org/apache/maven/plugins/compiler/it/App7.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-1/src/main/java/org/apache/maven/plugins/compiler/it/App7.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 /**
  * Hello world!
  *
diff --git a/src/it/MCOMPILER-170/mcompiler-170-1/src/test/java/org/apache/maven/plugins/compiler/it/AppTest.java b/src/it/MCOMPILER-170/mcompiler-170-1/src/test/java/org/apache/maven/plugins/compiler/it/AppTest.java
index 5d29a70..464f9af 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-1/src/test/java/org/apache/maven/plugins/compiler/it/AppTest.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-1/src/test/java/org/apache/maven/plugins/compiler/it/AppTest.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 import junit.framework.Test;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
diff --git a/src/it/MCOMPILER-170/mcompiler-170-2/pom.xml b/src/it/MCOMPILER-170/mcompiler-170-2/pom.xml
index fa1b5b6..a215912 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-2/pom.xml
+++ b/src/it/MCOMPILER-170/mcompiler-170-2/pom.xml
@@ -1,4 +1,24 @@
 <?xml version="1.0"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
 <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <modelVersion>4.0.0</modelVersion>
diff --git a/src/it/MCOMPILER-170/mcompiler-170-2/src/main/java/org/apache/maven/plugins/compiler/it/App.java b/src/it/MCOMPILER-170/mcompiler-170-2/src/main/java/org/apache/maven/plugins/compiler/it/App.java
index e870d44..bcbf5dd 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-2/src/main/java/org/apache/maven/plugins/compiler/it/App.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-2/src/main/java/org/apache/maven/plugins/compiler/it/App.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 /**
  * Hello world!
  */
diff --git a/src/it/MCOMPILER-170/mcompiler-170-2/src/main/java/org/apache/maven/plugins/compiler/it/App2.java b/src/it/MCOMPILER-170/mcompiler-170-2/src/main/java/org/apache/maven/plugins/compiler/it/App2.java
index 92d0c5e..6a22d39 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-2/src/main/java/org/apache/maven/plugins/compiler/it/App2.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-2/src/main/java/org/apache/maven/plugins/compiler/it/App2.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 /**
  * Hello world!
  *
diff --git a/src/it/MCOMPILER-170/mcompiler-170-2/src/main/java/org/apache/maven/plugins/compiler/it/App3.java b/src/it/MCOMPILER-170/mcompiler-170-2/src/main/java/org/apache/maven/plugins/compiler/it/App3.java
index 2979797..d970eec 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-2/src/main/java/org/apache/maven/plugins/compiler/it/App3.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-2/src/main/java/org/apache/maven/plugins/compiler/it/App3.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 /**
  * Hello world!
  *
diff --git a/src/it/MCOMPILER-170/mcompiler-170-2/src/main/java/org/apache/maven/plugins/compiler/it/App4.java b/src/it/MCOMPILER-170/mcompiler-170-2/src/main/java/org/apache/maven/plugins/compiler/it/App4.java
index 3ae390b..1cce4d8 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-2/src/main/java/org/apache/maven/plugins/compiler/it/App4.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-2/src/main/java/org/apache/maven/plugins/compiler/it/App4.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 /**
  * Hello world!
  *
diff --git a/src/it/MCOMPILER-170/mcompiler-170-2/src/main/java/org/apache/maven/plugins/compiler/it/App5.java b/src/it/MCOMPILER-170/mcompiler-170-2/src/main/java/org/apache/maven/plugins/compiler/it/App5.java
index 7aabfca..beab680 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-2/src/main/java/org/apache/maven/plugins/compiler/it/App5.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-2/src/main/java/org/apache/maven/plugins/compiler/it/App5.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 /**
  * Hello world!
  *
diff --git a/src/it/MCOMPILER-170/mcompiler-170-2/src/main/java/org/apache/maven/plugins/compiler/it/App6.java b/src/it/MCOMPILER-170/mcompiler-170-2/src/main/java/org/apache/maven/plugins/compiler/it/App6.java
index 03e5a15..c748ea2 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-2/src/main/java/org/apache/maven/plugins/compiler/it/App6.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-2/src/main/java/org/apache/maven/plugins/compiler/it/App6.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 /**
  * Hello world!
  *
diff --git a/src/it/MCOMPILER-170/mcompiler-170-2/src/main/java/org/apache/maven/plugins/compiler/it/App7.java b/src/it/MCOMPILER-170/mcompiler-170-2/src/main/java/org/apache/maven/plugins/compiler/it/App7.java
index 08326f2..0b09cdf 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-2/src/main/java/org/apache/maven/plugins/compiler/it/App7.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-2/src/main/java/org/apache/maven/plugins/compiler/it/App7.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 /**
  * Hello world!
  *
diff --git a/src/it/MCOMPILER-170/mcompiler-170-2/src/test/java/org/apache/maven/plugins/compiler/it/AppTest.java b/src/it/MCOMPILER-170/mcompiler-170-2/src/test/java/org/apache/maven/plugins/compiler/it/AppTest.java
index 5d29a70..464f9af 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-2/src/test/java/org/apache/maven/plugins/compiler/it/AppTest.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-2/src/test/java/org/apache/maven/plugins/compiler/it/AppTest.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 import junit.framework.Test;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
diff --git a/src/it/MCOMPILER-170/mcompiler-170-3/pom.xml b/src/it/MCOMPILER-170/mcompiler-170-3/pom.xml
index 1a95434..c963b01 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-3/pom.xml
+++ b/src/it/MCOMPILER-170/mcompiler-170-3/pom.xml
@@ -1,4 +1,24 @@
 <?xml version="1.0"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
 <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <modelVersion>4.0.0</modelVersion>
diff --git a/src/it/MCOMPILER-170/mcompiler-170-3/src/main/java/org/apache/maven/plugins/compiler/it/App.java b/src/it/MCOMPILER-170/mcompiler-170-3/src/main/java/org/apache/maven/plugins/compiler/it/App.java
index e870d44..bcbf5dd 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-3/src/main/java/org/apache/maven/plugins/compiler/it/App.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-3/src/main/java/org/apache/maven/plugins/compiler/it/App.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 /**
  * Hello world!
  */
diff --git a/src/it/MCOMPILER-170/mcompiler-170-3/src/main/java/org/apache/maven/plugins/compiler/it/App2.java b/src/it/MCOMPILER-170/mcompiler-170-3/src/main/java/org/apache/maven/plugins/compiler/it/App2.java
index 92d0c5e..6a22d39 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-3/src/main/java/org/apache/maven/plugins/compiler/it/App2.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-3/src/main/java/org/apache/maven/plugins/compiler/it/App2.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 /**
  * Hello world!
  *
diff --git a/src/it/MCOMPILER-170/mcompiler-170-3/src/main/java/org/apache/maven/plugins/compiler/it/App3.java b/src/it/MCOMPILER-170/mcompiler-170-3/src/main/java/org/apache/maven/plugins/compiler/it/App3.java
index 2979797..d970eec 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-3/src/main/java/org/apache/maven/plugins/compiler/it/App3.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-3/src/main/java/org/apache/maven/plugins/compiler/it/App3.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 /**
  * Hello world!
  *
diff --git a/src/it/MCOMPILER-170/mcompiler-170-3/src/main/java/org/apache/maven/plugins/compiler/it/App4.java b/src/it/MCOMPILER-170/mcompiler-170-3/src/main/java/org/apache/maven/plugins/compiler/it/App4.java
index 3ae390b..1cce4d8 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-3/src/main/java/org/apache/maven/plugins/compiler/it/App4.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-3/src/main/java/org/apache/maven/plugins/compiler/it/App4.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 /**
  * Hello world!
  *
diff --git a/src/it/MCOMPILER-170/mcompiler-170-3/src/main/java/org/apache/maven/plugins/compiler/it/App5.java b/src/it/MCOMPILER-170/mcompiler-170-3/src/main/java/org/apache/maven/plugins/compiler/it/App5.java
index 7aabfca..beab680 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-3/src/main/java/org/apache/maven/plugins/compiler/it/App5.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-3/src/main/java/org/apache/maven/plugins/compiler/it/App5.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 /**
  * Hello world!
  *
diff --git a/src/it/MCOMPILER-170/mcompiler-170-3/src/main/java/org/apache/maven/plugins/compiler/it/App6.java b/src/it/MCOMPILER-170/mcompiler-170-3/src/main/java/org/apache/maven/plugins/compiler/it/App6.java
index 03e5a15..c748ea2 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-3/src/main/java/org/apache/maven/plugins/compiler/it/App6.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-3/src/main/java/org/apache/maven/plugins/compiler/it/App6.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 /**
  * Hello world!
  *
diff --git a/src/it/MCOMPILER-170/mcompiler-170-3/src/main/java/org/apache/maven/plugins/compiler/it/App7.java b/src/it/MCOMPILER-170/mcompiler-170-3/src/main/java/org/apache/maven/plugins/compiler/it/App7.java
index 08326f2..0b09cdf 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-3/src/main/java/org/apache/maven/plugins/compiler/it/App7.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-3/src/main/java/org/apache/maven/plugins/compiler/it/App7.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 /**
  * Hello world!
  *
diff --git a/src/it/MCOMPILER-170/mcompiler-170-3/src/test/java/org/apache/maven/plugins/compiler/it/AppTest.java b/src/it/MCOMPILER-170/mcompiler-170-3/src/test/java/org/apache/maven/plugins/compiler/it/AppTest.java
index 5d29a70..464f9af 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-3/src/test/java/org/apache/maven/plugins/compiler/it/AppTest.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-3/src/test/java/org/apache/maven/plugins/compiler/it/AppTest.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 import junit.framework.Test;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
diff --git a/src/it/MCOMPILER-170/mcompiler-170-4/pom.xml b/src/it/MCOMPILER-170/mcompiler-170-4/pom.xml
index 2e67ee7..f56a4c9 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-4/pom.xml
+++ b/src/it/MCOMPILER-170/mcompiler-170-4/pom.xml
@@ -1,4 +1,24 @@
 <?xml version="1.0"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
 <project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <modelVersion>4.0.0</modelVersion>
diff --git a/src/it/MCOMPILER-170/mcompiler-170-4/src/main/java/org/apache/maven/plugins/compiler/it/App.java b/src/it/MCOMPILER-170/mcompiler-170-4/src/main/java/org/apache/maven/plugins/compiler/it/App.java
index e870d44..bcbf5dd 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-4/src/main/java/org/apache/maven/plugins/compiler/it/App.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-4/src/main/java/org/apache/maven/plugins/compiler/it/App.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 /**
  * Hello world!
  */
diff --git a/src/it/MCOMPILER-170/mcompiler-170-4/src/main/java/org/apache/maven/plugins/compiler/it/App2.java b/src/it/MCOMPILER-170/mcompiler-170-4/src/main/java/org/apache/maven/plugins/compiler/it/App2.java
index 92d0c5e..6a22d39 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-4/src/main/java/org/apache/maven/plugins/compiler/it/App2.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-4/src/main/java/org/apache/maven/plugins/compiler/it/App2.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 /**
  * Hello world!
  *
diff --git a/src/it/MCOMPILER-170/mcompiler-170-4/src/main/java/org/apache/maven/plugins/compiler/it/App3.java b/src/it/MCOMPILER-170/mcompiler-170-4/src/main/java/org/apache/maven/plugins/compiler/it/App3.java
index 2979797..d970eec 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-4/src/main/java/org/apache/maven/plugins/compiler/it/App3.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-4/src/main/java/org/apache/maven/plugins/compiler/it/App3.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 /**
  * Hello world!
  *
diff --git a/src/it/MCOMPILER-170/mcompiler-170-4/src/main/java/org/apache/maven/plugins/compiler/it/App4.java b/src/it/MCOMPILER-170/mcompiler-170-4/src/main/java/org/apache/maven/plugins/compiler/it/App4.java
index 3ae390b..1cce4d8 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-4/src/main/java/org/apache/maven/plugins/compiler/it/App4.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-4/src/main/java/org/apache/maven/plugins/compiler/it/App4.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 /**
  * Hello world!
  *
diff --git a/src/it/MCOMPILER-170/mcompiler-170-4/src/main/java/org/apache/maven/plugins/compiler/it/App5.java b/src/it/MCOMPILER-170/mcompiler-170-4/src/main/java/org/apache/maven/plugins/compiler/it/App5.java
index 7aabfca..beab680 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-4/src/main/java/org/apache/maven/plugins/compiler/it/App5.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-4/src/main/java/org/apache/maven/plugins/compiler/it/App5.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 /**
  * Hello world!
  *
diff --git a/src/it/MCOMPILER-170/mcompiler-170-4/src/main/java/org/apache/maven/plugins/compiler/it/App6.java b/src/it/MCOMPILER-170/mcompiler-170-4/src/main/java/org/apache/maven/plugins/compiler/it/App6.java
index 03e5a15..c748ea2 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-4/src/main/java/org/apache/maven/plugins/compiler/it/App6.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-4/src/main/java/org/apache/maven/plugins/compiler/it/App6.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 /**
  * Hello world!
  *
diff --git a/src/it/MCOMPILER-170/mcompiler-170-4/src/main/java/org/apache/maven/plugins/compiler/it/App7.java b/src/it/MCOMPILER-170/mcompiler-170-4/src/main/java/org/apache/maven/plugins/compiler/it/App7.java
index 08326f2..0b09cdf 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-4/src/main/java/org/apache/maven/plugins/compiler/it/App7.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-4/src/main/java/org/apache/maven/plugins/compiler/it/App7.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 /**
  * Hello world!
  *
diff --git a/src/it/MCOMPILER-170/mcompiler-170-4/src/test/java/org/apache/maven/plugins/compiler/it/AppTest.java b/src/it/MCOMPILER-170/mcompiler-170-4/src/test/java/org/apache/maven/plugins/compiler/it/AppTest.java
index 5d29a70..464f9af 100644
--- a/src/it/MCOMPILER-170/mcompiler-170-4/src/test/java/org/apache/maven/plugins/compiler/it/AppTest.java
+++ b/src/it/MCOMPILER-170/mcompiler-170-4/src/test/java/org/apache/maven/plugins/compiler/it/AppTest.java
@@ -1,5 +1,25 @@
 package org.apache.maven.plugins.compiler.it;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 import junit.framework.Test;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
diff --git a/src/it/MCOMPILER-170/pom.xml b/src/it/MCOMPILER-170/pom.xml
index 2f63cb1..b36228c 100644
--- a/src/it/MCOMPILER-170/pom.xml
+++ b/src/it/MCOMPILER-170/pom.xml
@@ -1,4 +1,24 @@
 <?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
 <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>
   <groupId>org.apache.maven.plugins.compiler.it</groupId>
@@ -26,4 +46,4 @@
     <module>mcompiler-170-3</module>
     <module>mcompiler-170-4</module>
   </modules>
-</project>
\ No newline at end of file
+</project>
diff --git a/src/it/MCOMPILER-190/invoker.properties b/src/it/MCOMPILER-190/invoker.properties
index 51a34ea..98a8e95 100644
--- a/src/it/MCOMPILER-190/invoker.properties
+++ b/src/it/MCOMPILER-190/invoker.properties
@@ -1,2 +1,19 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
 invoker.goals = clean compile
-invoker.buildResult = failure
\ No newline at end of file
+invoker.buildResult = failure
diff --git a/src/it/MCOMPILER-190/pom.xml b/src/it/MCOMPILER-190/pom.xml
index 9057b73..10fd80d 100644
--- a/src/it/MCOMPILER-190/pom.xml
+++ b/src/it/MCOMPILER-190/pom.xml
@@ -1,4 +1,24 @@
 <?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
 <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/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
diff --git a/src/it/MCOMPILER-190/src/main/java/org/example/pce/sample/Dummy.java b/src/it/MCOMPILER-190/src/main/java/org/example/pce/sample/Dummy.java
index 8ae469e..96a49ff 100644
--- a/src/it/MCOMPILER-190/src/main/java/org/example/pce/sample/Dummy.java
+++ b/src/it/MCOMPILER-190/src/main/java/org/example/pce/sample/Dummy.java
@@ -1,5 +1,25 @@
 package org.example.pce.sample;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 public class Dummy {
 	public static void main(final String[] args) {
 		String dummy = new Integer(1);
diff --git a/src/it/MCOMPILER-192/invoker.properties b/src/it/MCOMPILER-192/invoker.properties
index 51a34ea..98a8e95 100644
--- a/src/it/MCOMPILER-192/invoker.properties
+++ b/src/it/MCOMPILER-192/invoker.properties
@@ -1,2 +1,19 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
 invoker.goals = clean compile
-invoker.buildResult = failure
\ No newline at end of file
+invoker.buildResult = failure
diff --git a/src/it/MCOMPILER-197/invoker.properties b/src/it/MCOMPILER-197/invoker.properties
index addf007..85857ca 100644
--- a/src/it/MCOMPILER-197/invoker.properties
+++ b/src/it/MCOMPILER-197/invoker.properties
@@ -1 +1,18 @@
-invoker.java.version = 1.6+
\ No newline at end of file
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+invoker.java.version = 1.6+
diff --git a/src/it/MCOMPILER-197/pom.xml b/src/it/MCOMPILER-197/pom.xml
index da7d17d..f9621fe 100644
--- a/src/it/MCOMPILER-197/pom.xml
+++ b/src/it/MCOMPILER-197/pom.xml
@@ -1,4 +1,24 @@
 <?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
 <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/xsd/maven-4.0.0.xsd">
diff --git a/src/it/MCOMPILER-197/src/main/resources/META-INF/persistence.xml b/src/it/MCOMPILER-197/src/main/resources/META-INF/persistence.xml
index a821b7c..4e3d97c 100644
--- a/src/it/MCOMPILER-197/src/main/resources/META-INF/persistence.xml
+++ b/src/it/MCOMPILER-197/src/main/resources/META-INF/persistence.xml
@@ -1,4 +1,24 @@
 <?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
 <persistence version="2.0"
              xmlns="http://java.sun.com/xml/ns/persistence"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
diff --git a/src/it/MCOMPILER-224/annotation-processor/pom.xml b/src/it/MCOMPILER-224/annotation-processor/pom.xml
index 795b8c8..5832225 100644
--- a/src/it/MCOMPILER-224/annotation-processor/pom.xml
+++ b/src/it/MCOMPILER-224/annotation-processor/pom.xml
@@ -1,4 +1,24 @@
 <?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
 <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/xsd/maven-4.0.0.xsd">
diff --git a/src/it/MCOMPILER-224/annotation-processor/src/main/java/org/issue/MCompiler224.java b/src/it/MCOMPILER-224/annotation-processor/src/main/java/org/issue/MCompiler224.java
index 842f6e4..c47ffa0 100644
--- a/src/it/MCOMPILER-224/annotation-processor/src/main/java/org/issue/MCompiler224.java
+++ b/src/it/MCOMPILER-224/annotation-processor/src/main/java/org/issue/MCompiler224.java
@@ -1,5 +1,25 @@
 package org.issue;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 public @interface MCompiler224
 {
 
diff --git a/src/it/MCOMPILER-224/annotation-processor/src/main/java/org/issue/MCompiler224AnnotationProcessor.java b/src/it/MCOMPILER-224/annotation-processor/src/main/java/org/issue/MCompiler224AnnotationProcessor.java
index 6bfeabb..2e92f08 100644
--- a/src/it/MCOMPILER-224/annotation-processor/src/main/java/org/issue/MCompiler224AnnotationProcessor.java
+++ b/src/it/MCOMPILER-224/annotation-processor/src/main/java/org/issue/MCompiler224AnnotationProcessor.java
@@ -1,5 +1,25 @@
 package org.issue;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 import java.util.Set;
 
 import javax.annotation.processing.AbstractProcessor;
diff --git a/src/it/MCOMPILER-224/annotation-user/pom.xml b/src/it/MCOMPILER-224/annotation-user/pom.xml
index 152e179..bde68e5 100644
--- a/src/it/MCOMPILER-224/annotation-user/pom.xml
+++ b/src/it/MCOMPILER-224/annotation-user/pom.xml
@@ -1,4 +1,24 @@
 <?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
 <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/xsd/maven-4.0.0.xsd">
diff --git a/src/it/MCOMPILER-224/annotation-user/src/main/java/org/issue/user/User.java b/src/it/MCOMPILER-224/annotation-user/src/main/java/org/issue/user/User.java
index 465673a..38b2ebd 100644
--- a/src/it/MCOMPILER-224/annotation-user/src/main/java/org/issue/user/User.java
+++ b/src/it/MCOMPILER-224/annotation-user/src/main/java/org/issue/user/User.java
@@ -1,5 +1,25 @@
 package org.issue.user;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 import org.issue.MCompiler224;
 
 @MCompiler224
diff --git a/src/it/MCOMPILER-224/invoker.properties b/src/it/MCOMPILER-224/invoker.properties
index 8025ee6..08311cd 100644
--- a/src/it/MCOMPILER-224/invoker.properties
+++ b/src/it/MCOMPILER-224/invoker.properties
@@ -1,3 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
 #invoker.java.version = 1.6+
 # message with JDK6 is prepended by unexpected prefix, so quick workaround is to ignore JDK6...
-invoker.java.version = 1.7+
\ No newline at end of file
+invoker.java.version = 1.7+
diff --git a/src/it/MCOMPILER-224/pom.xml b/src/it/MCOMPILER-224/pom.xml
index 2b8bb6d..9b2e756 100644
--- a/src/it/MCOMPILER-224/pom.xml
+++ b/src/it/MCOMPILER-224/pom.xml
@@ -1,4 +1,24 @@
 <?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
 <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/xsd/maven-4.0.0.xsd">
diff --git a/src/it/default-incremental-disable/invoker.properties b/src/it/default-incremental-disable/invoker.properties
index e358e3e..5f1421e 100644
--- a/src/it/default-incremental-disable/invoker.properties
+++ b/src/it/default-incremental-disable/invoker.properties
@@ -1,2 +1,19 @@
-invoker.goals = clean test-compile
-invoker.goals.2 = test-compile
\ No newline at end of file
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+invoker.goals = clean test-compile
+invoker.goals.2 = test-compile
diff --git a/src/it/default-incremental-disable/src/main/java/MyClass.java b/src/it/default-incremental-disable/src/main/java/MyClass.java
index 0b3fbd2..4945381 100644
--- a/src/it/default-incremental-disable/src/main/java/MyClass.java
+++ b/src/it/default-incremental-disable/src/main/java/MyClass.java
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 public class MyClass
 {
 
diff --git a/src/it/default-incremental-disable/src/test/java/MyTest.java b/src/it/default-incremental-disable/src/test/java/MyTest.java
index e821ec2..46ba41d 100644
--- a/src/it/default-incremental-disable/src/test/java/MyTest.java
+++ b/src/it/default-incremental-disable/src/test/java/MyTest.java
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 import junit.framework.TestCase;
 
 public class MyTest
diff --git a/src/it/default-incremental-disable/verify.groovy b/src/it/default-incremental-disable/verify.groovy
index 798c991..2f72f1c 100644
--- a/src/it/default-incremental-disable/verify.groovy
+++ b/src/it/default-incremental-disable/verify.groovy
@@ -1,6 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 assert new File( basedir, "target/classes/MyClass.class" ).exists();
 assert new File( basedir, "target/test-classes/MyTest.class" ).exists();
 
 content = new File( basedir, 'build.log' ).text;
 
-assert content.contains("Nothing to compile - all classes are up to date");
\ No newline at end of file
+assert content.contains("Nothing to compile - all classes are up to date");
diff --git a/src/it/default/src/main/java/MyClass.java b/src/it/default/src/main/java/MyClass.java
index 0b3fbd2..4945381 100644
--- a/src/it/default/src/main/java/MyClass.java
+++ b/src/it/default/src/main/java/MyClass.java
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 public class MyClass
 {
 
diff --git a/src/it/default/src/test/java/MyTest.java b/src/it/default/src/test/java/MyTest.java
index e821ec2..46ba41d 100644
--- a/src/it/default/src/test/java/MyTest.java
+++ b/src/it/default/src/test/java/MyTest.java
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 import junit.framework.TestCase;
 
 public class MyTest
diff --git a/src/it/default/verify.bsh b/src/it/default/verify.bsh
index e926346..12bb543 100644
--- a/src/it/default/verify.bsh
+++ b/src/it/default/verify.bsh
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 import java.io.*;
 import java.util.*;
 import java.util.regex.*;
diff --git a/src/it/error-prone-compiler/invoker.properties b/src/it/error-prone-compiler/invoker.properties
index a4d7132..564861a 100644
--- a/src/it/error-prone-compiler/invoker.properties
+++ b/src/it/error-prone-compiler/invoker.properties
@@ -1,3 +1,20 @@
-invoker.java.version = 1.7+
-invoker.goals = clean compile
-invoker.buildResult = failure
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+invoker.java.version = 1.7+
+invoker.goals = clean compile
+invoker.buildResult = failure
diff --git a/src/it/error-prone-compiler/src/main/java/MyClass.java b/src/it/error-prone-compiler/src/main/java/MyClass.java
index 9b8ac7f..607605a 100644
--- a/src/it/error-prone-compiler/src/main/java/MyClass.java
+++ b/src/it/error-prone-compiler/src/main/java/MyClass.java
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 public class MyClass
 {
 
diff --git a/src/it/error-prone-compiler/src/test/java/MyTest.java b/src/it/error-prone-compiler/src/test/java/MyTest.java
index 7392b0f..24df915 100644
--- a/src/it/error-prone-compiler/src/test/java/MyTest.java
+++ b/src/it/error-prone-compiler/src/test/java/MyTest.java
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 import junit.framework.TestCase;
 
 import java.util.*;
diff --git a/src/it/groovy-project-with-new-plexus-compiler/src/main/groovy/GroovyHello.groovy b/src/it/groovy-project-with-new-plexus-compiler/src/main/groovy/GroovyHello.groovy
index a1d791d..5bbb4d8 100755
--- a/src/it/groovy-project-with-new-plexus-compiler/src/main/groovy/GroovyHello.groovy
+++ b/src/it/groovy-project-with-new-plexus-compiler/src/main/groovy/GroovyHello.groovy
@@ -1,5 +1,24 @@
-class GroovyHello implements Helloable {
-	void sayHello() {
-		println("Hello World from Groovy!")
-	}
-}
\ No newline at end of file
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class GroovyHello implements Helloable {
+	void sayHello() {
+		println("Hello World from Groovy!")
+	}
+}
diff --git a/src/it/groovy-project-with-new-plexus-compiler/src/main/groovy/GroovyMain.groovy b/src/it/groovy-project-with-new-plexus-compiler/src/main/groovy/GroovyMain.groovy
index 779517d..5c23be6 100755
--- a/src/it/groovy-project-with-new-plexus-compiler/src/main/groovy/GroovyMain.groovy
+++ b/src/it/groovy-project-with-new-plexus-compiler/src/main/groovy/GroovyMain.groovy
@@ -1,5 +1,24 @@
-class GroovyMain {
-	static void main(String... args) {
-		new GroovyHello().sayHello()
-	}
-}
\ No newline at end of file
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+class GroovyMain {
+	static void main(String... args) {
+		new GroovyHello().sayHello()
+	}
+}
diff --git a/src/it/groovy-project-with-new-plexus-compiler/src/main/groovy/Helloable.groovy b/src/it/groovy-project-with-new-plexus-compiler/src/main/groovy/Helloable.groovy
index 9b60bf8..7a83a23 100755
--- a/src/it/groovy-project-with-new-plexus-compiler/src/main/groovy/Helloable.groovy
+++ b/src/it/groovy-project-with-new-plexus-compiler/src/main/groovy/Helloable.groovy
@@ -1,3 +1,22 @@
-interface Helloable {
-	void sayHello()
-}
\ No newline at end of file
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+interface Helloable {
+	void sayHello()
+}
diff --git a/src/it/groovy-project-with-new-plexus-compiler/src/test/groovy/GroovyTest.groovy b/src/it/groovy-project-with-new-plexus-compiler/src/test/groovy/GroovyTest.groovy
index 5bdbfb9..cf4e538 100755
--- a/src/it/groovy-project-with-new-plexus-compiler/src/test/groovy/GroovyTest.groovy
+++ b/src/it/groovy-project-with-new-plexus-compiler/src/test/groovy/GroovyTest.groovy
@@ -1,11 +1,30 @@
-import org.junit.Test
-import org.junit.Assert
-
-class GroovyTest {
-
-	@Test
-	void testMethod() {
-		GroovyMain.main null
-		Assert.assertTrue true
-	}
-}
\ No newline at end of file
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import org.junit.Test
+import org.junit.Assert
+
+class GroovyTest {
+
+	@Test
+	void testMethod() {
+		GroovyMain.main null
+		Assert.assertTrue true
+	}
+}
diff --git a/src/it/includes-excludes/src/main/java/org/apache/maven/it0055/Person.java b/src/it/includes-excludes/src/main/java/org/apache/maven/it0055/Person.java
index 9107bee..d1ecf61 100644
--- a/src/it/includes-excludes/src/main/java/org/apache/maven/it0055/Person.java
+++ b/src/it/includes-excludes/src/main/java/org/apache/maven/it0055/Person.java
@@ -1,5 +1,25 @@
 package org.apache.maven.it0055;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 public class Person
 {
     private String name;
diff --git a/src/it/includes-excludes/src/main/java/org/apache/maven/it0055/PersonTwo.java b/src/it/includes-excludes/src/main/java/org/apache/maven/it0055/PersonTwo.java
index c93882f..7f1914b 100644
--- a/src/it/includes-excludes/src/main/java/org/apache/maven/it0055/PersonTwo.java
+++ b/src/it/includes-excludes/src/main/java/org/apache/maven/it0055/PersonTwo.java
@@ -1,5 +1,25 @@
 package org.apache.maven.it0055;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 public class PersonTwo
 {
     private String name;
diff --git a/src/it/includes-excludes/src/test/java/org/apache/maven/it0055/PersonTest.java b/src/it/includes-excludes/src/test/java/org/apache/maven/it0055/PersonTest.java
index acf784e..c8c40ed 100644
--- a/src/it/includes-excludes/src/test/java/org/apache/maven/it0055/PersonTest.java
+++ b/src/it/includes-excludes/src/test/java/org/apache/maven/it0055/PersonTest.java
@@ -1,5 +1,25 @@
 package org.apache.maven.it0055;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 import junit.framework.TestCase;
 
 public class PersonTest
diff --git a/src/it/includes-excludes/src/test/java/org/apache/maven/it0055/PersonTwoTest.java b/src/it/includes-excludes/src/test/java/org/apache/maven/it0055/PersonTwoTest.java
index 47b9a0f..6a51799 100644
--- a/src/it/includes-excludes/src/test/java/org/apache/maven/it0055/PersonTwoTest.java
+++ b/src/it/includes-excludes/src/test/java/org/apache/maven/it0055/PersonTwoTest.java
@@ -1,5 +1,25 @@
 package org.apache.maven.it0055;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 import junit.framework.TestCase;
 
 public class PersonTwoTest
diff --git a/src/it/includes-excludes/verify.bsh b/src/it/includes-excludes/verify.bsh
index c839baf..91d79f7 100644
--- a/src/it/includes-excludes/verify.bsh
+++ b/src/it/includes-excludes/verify.bsh
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 import java.io.*;
 import java.util.*;
 import java.util.regex.*;
diff --git a/src/it/jdk16-annotation/invoker.properties b/src/it/jdk16-annotation/invoker.properties
index 7d04b1f..2998963 100644
--- a/src/it/jdk16-annotation/invoker.properties
+++ b/src/it/jdk16-annotation/invoker.properties
@@ -1,3 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
 # build project if Jdk is 1.6+, only then annotations get processed.
 invoker.java.version = 1.6+
 
diff --git a/src/it/jdk16-annotation/pom.xml b/src/it/jdk16-annotation/pom.xml
index 43d8db4..8ca5d6e 100644
--- a/src/it/jdk16-annotation/pom.xml
+++ b/src/it/jdk16-annotation/pom.xml
@@ -1,3 +1,23 @@
+<?xml version='1.0'?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
 <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>
diff --git a/src/it/jdk16-annotation/src/main/java/com/mycompany/jdk16annotation/App.java b/src/it/jdk16-annotation/src/main/java/com/mycompany/jdk16annotation/App.java
index e6dfff0..814edb9 100644
--- a/src/it/jdk16-annotation/src/main/java/com/mycompany/jdk16annotation/App.java
+++ b/src/it/jdk16-annotation/src/main/java/com/mycompany/jdk16annotation/App.java
@@ -1,5 +1,25 @@
 package com.mycompany.jdk16annotation;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 /**
  * Hello world!
  *
diff --git a/src/it/jdk16-annotation/src/main/java/com/mycompany/jdk16annotation/ServiceProvider.java b/src/it/jdk16-annotation/src/main/java/com/mycompany/jdk16annotation/ServiceProvider.java
index ae8e984..b87cc68 100644
--- a/src/it/jdk16-annotation/src/main/java/com/mycompany/jdk16annotation/ServiceProvider.java
+++ b/src/it/jdk16-annotation/src/main/java/com/mycompany/jdk16annotation/ServiceProvider.java
@@ -1,5 +1,25 @@
 package com.mycompany.jdk16annotation;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
diff --git a/src/it/jdk16-annotation/src/main/java/com/mycompany/jdk16annotation/ServiceProviderProcessor.java b/src/it/jdk16-annotation/src/main/java/com/mycompany/jdk16annotation/ServiceProviderProcessor.java
index e9db53a..8f39d10 100644
--- a/src/it/jdk16-annotation/src/main/java/com/mycompany/jdk16annotation/ServiceProviderProcessor.java
+++ b/src/it/jdk16-annotation/src/main/java/com/mycompany/jdk16annotation/ServiceProviderProcessor.java
@@ -1,5 +1,25 @@
 package com.mycompany.jdk16annotation;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 import java.io.IOException;
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
diff --git a/src/it/jdk16-annotation/src/test/java/com/mycompany/jdk16annotation/AppTest.java b/src/it/jdk16-annotation/src/test/java/com/mycompany/jdk16annotation/AppTest.java
index 26bdcf6..9faeebe 100644
--- a/src/it/jdk16-annotation/src/test/java/com/mycompany/jdk16annotation/AppTest.java
+++ b/src/it/jdk16-annotation/src/test/java/com/mycompany/jdk16annotation/AppTest.java
@@ -1,5 +1,25 @@
 package com.mycompany.jdk16annotation;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 import junit.framework.Test;
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
diff --git a/src/it/jdk16-annotation/verify.bsh b/src/it/jdk16-annotation/verify.bsh
index a8cefda..d5ef308 100644
--- a/src/it/jdk16-annotation/verify.bsh
+++ b/src/it/jdk16-annotation/verify.bsh
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 import java.io.*;
 import java.util.*;
 import java.util.regex.*;
diff --git a/src/it/mcompiler-106/invoker.properties b/src/it/mcompiler-106/invoker.properties
index 9651b16..4024c9b 100644
--- a/src/it/mcompiler-106/invoker.properties
+++ b/src/it/mcompiler-106/invoker.properties
@@ -1 +1,18 @@
-invoker.goals = clean compile
\ No newline at end of file
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+invoker.goals = clean compile
diff --git a/src/it/mcompiler-106/pom.xml b/src/it/mcompiler-106/pom.xml
index 95d3021..022eca2 100644
--- a/src/it/mcompiler-106/pom.xml
+++ b/src/it/mcompiler-106/pom.xml
@@ -1,3 +1,23 @@
+<?xml version='1.0'?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
 <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>
diff --git a/src/it/mcompiler-106/src/main/java/MyClass.java b/src/it/mcompiler-106/src/main/java/MyClass.java
index b867910..4945381 100644
--- a/src/it/mcompiler-106/src/main/java/MyClass.java
+++ b/src/it/mcompiler-106/src/main/java/MyClass.java
@@ -1,4 +1,23 @@
-public class MyClass
-{
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+public class MyClass
+{
+
+}
diff --git a/src/it/mcompiler-120/invoker.properties b/src/it/mcompiler-120/invoker.properties
index d84336a..86f9130 100644
--- a/src/it/mcompiler-120/invoker.properties
+++ b/src/it/mcompiler-120/invoker.properties
@@ -1,3 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
 invoker.goals = clean compile
 invoker.buildResult = failure
-invoker.java.version = 1.6+
\ No newline at end of file
+invoker.java.version = 1.6+
diff --git a/src/it/mcompiler-120/pom.xml b/src/it/mcompiler-120/pom.xml
index 551cdd1..97d9635 100644
--- a/src/it/mcompiler-120/pom.xml
+++ b/src/it/mcompiler-120/pom.xml
@@ -1,3 +1,23 @@
+<?xml version='1.0'?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
 <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>
diff --git a/src/it/mcompiler-120/src/main/java/org/maven/test/Main.java b/src/it/mcompiler-120/src/main/java/org/maven/test/Main.java
index ef2987b..695e93d 100644
--- a/src/it/mcompiler-120/src/main/java/org/maven/test/Main.java
+++ b/src/it/mcompiler-120/src/main/java/org/maven/test/Main.java
@@ -1,4 +1,24 @@
 package org.maven.test;
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 import java.util.ArrayList;
 import java.util.List;
 
diff --git a/src/it/mcompiler-135/invoker.properties b/src/it/mcompiler-135/invoker.properties
index aed46e6..4accce0 100644
--- a/src/it/mcompiler-135/invoker.properties
+++ b/src/it/mcompiler-135/invoker.properties
@@ -1,2 +1,19 @@
-invoker.goals = clean compile
-invoker.java.version = 1.6+
\ No newline at end of file
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+invoker.goals = clean compile
+invoker.java.version = 1.6+
diff --git a/src/it/mcompiler-135/pom.xml b/src/it/mcompiler-135/pom.xml
index 10fe50d..4e4dd52 100644
--- a/src/it/mcompiler-135/pom.xml
+++ b/src/it/mcompiler-135/pom.xml
@@ -1,3 +1,23 @@
+<?xml version='1.0'?>
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
 <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>
diff --git a/src/it/mcompiler-135/src/main/java/MyClass.java b/src/it/mcompiler-135/src/main/java/MyClass.java
index b867910..4945381 100644
--- a/src/it/mcompiler-135/src/main/java/MyClass.java
+++ b/src/it/mcompiler-135/src/main/java/MyClass.java
@@ -1,4 +1,23 @@
-public class MyClass
-{
-
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+public class MyClass
+{
+
+}
diff --git a/src/it/mcompiler-179/invoker.properties b/src/it/mcompiler-179/invoker.properties
index d84336a..86f9130 100644
--- a/src/it/mcompiler-179/invoker.properties
+++ b/src/it/mcompiler-179/invoker.properties
@@ -1,3 +1,20 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
 invoker.goals = clean compile
 invoker.buildResult = failure
-invoker.java.version = 1.6+
\ No newline at end of file
+invoker.java.version = 1.6+
diff --git a/src/it/mcompiler-179/pom.xml b/src/it/mcompiler-179/pom.xml
index 65c3346..fe39cd9 100644
--- a/src/it/mcompiler-179/pom.xml
+++ b/src/it/mcompiler-179/pom.xml
@@ -1,4 +1,24 @@
 <?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
 <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/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
@@ -31,4 +51,4 @@
       </plugins>
     </pluginManagement>
   </build>
-</project>
\ No newline at end of file
+</project>
diff --git a/src/it/mcompiler-179/src/main/java/org/maven/test/MyClass.java b/src/it/mcompiler-179/src/main/java/org/maven/test/MyClass.java
index 68500a5..bfa8aaf 100644
--- a/src/it/mcompiler-179/src/main/java/org/maven/test/MyClass.java
+++ b/src/it/mcompiler-179/src/main/java/org/maven/test/MyClass.java
@@ -1,5 +1,25 @@
 package org.maven.test;
 
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
 import java.util.ArrayList;
 import java.util.List;
 
diff --git a/src/it/mcompiler-182/invoker.properties b/src/it/mcompiler-182/invoker.properties
index 5fd091a..24e428d 100644
--- a/src/it/mcompiler-182/invoker.properties
+++ b/src/it/mcompiler-182/invoker.properties
@@ -1,4 +1,21 @@
-invoker.goals = clean compile
-invoker.goals.2 = org.codehaus.gmaven:gmaven-plugin:execute
-invoker.goals.3 = compile
-invoker.buildResult.3 = failure
\ No newline at end of file
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+invoker.goals = clean compile
+invoker.goals.2 = org.codehaus.gmaven:gmaven-plugin:execute
+invoker.goals.3 = compile
+invoker.buildResult.3 = failure
diff --git a/src/it/mcompiler-182/pom.xml b/src/it/mcompiler-182/pom.xml
index b763ba6..d8026ad 100644
--- a/src/it/mcompiler-182/pom.xml
+++ b/src/it/mcompiler-182/pom.xml
@@ -1,48 +1,68 @@
-<?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/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <groupId>org.apache.maven.plugins.compiler.it</groupId>
-  <artifactId>mcompiler-182</artifactId>
-  <version>1.0-SNAPSHOT</version>
-
-  <description>
-    This IT tests what happens if the class name (and filename) of BeanA gets changed.
-    In this case 'mvn compile' (without a clean) should fail as BeanA2
-    still uses the old BeanA.
-  </description>
-
-  <build>
-    <pluginManagement>
-      <plugins>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-compiler-plugin</artifactId>
-          <version>@project.version@</version>
-        </plugin>      
-      </plugins>
-    </pluginManagement> 
-    <plugins>
-      <plugin>
-        <!-- Called as second invoker goal to simulate file adjustment -->
-        <groupId>org.codehaus.gmaven</groupId>
-        <artifactId>gmaven-plugin</artifactId>
-        <version>1.4</version>
-        <configuration>
-          <source>
-            def beanAFile = new File( project.basedir, 'src/main/java/BeanA.java' )
-            
-            new File( project.basedir, 'src/main/java/BEANa.java' ).withWriter { file ->
-              beanAFile.eachLine { line ->
-                file.writeLine( line.replace( 'BeanA', 'BEANa' ) )
-              }
-            }
-            
-            beanAFile.delete()
-          </source>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<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/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.plugins.compiler.it</groupId>
+  <artifactId>mcompiler-182</artifactId>
+  <version>1.0-SNAPSHOT</version>
+
+  <description>
+    This IT tests what happens if the class name (and filename) of BeanA gets changed.
+    In this case 'mvn compile' (without a clean) should fail as BeanA2
+    still uses the old BeanA.
+  </description>
+
+  <build>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>@project.version@</version>
+        </plugin>      
+      </plugins>
+    </pluginManagement> 
+    <plugins>
+      <plugin>
+        <!-- Called as second invoker goal to simulate file adjustment -->
+        <groupId>org.codehaus.gmaven</groupId>
+        <artifactId>gmaven-plugin</artifactId>
+        <version>1.4</version>
+        <configuration>
+          <source>
+            def beanAFile = new File( project.basedir, 'src/main/java/BeanA.java' )
+            
+            new File( project.basedir, 'src/main/java/BEANa.java' ).withWriter { file ->
+              beanAFile.eachLine { line ->
+                file.writeLine( line.replace( 'BeanA', 'BEANa' ) )
+              }
+            }
+            
+            beanAFile.delete()
+          </source>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/src/it/mcompiler-182/src/main/java/BeanA.java b/src/it/mcompiler-182/src/main/java/BeanA.java
index 63e20f4..4d31495 100644
--- a/src/it/mcompiler-182/src/main/java/BeanA.java
+++ b/src/it/mcompiler-182/src/main/java/BeanA.java
@@ -1,15 +1,34 @@
-/**
- * dumb test bean
- */
-public class BeanA {
-
-    private int i,y;
-
-    public int getI() {
-        return i;
-    }
-
-    public void setI(int i) {
-        this.i = i;
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * dumb test bean
+ */
+public class BeanA {
+
+    private int i,y;
+
+    public int getI() {
+        return i;
+    }
+
+    public void setI(int i) {
+        this.i = i;
+    }
+}
diff --git a/src/it/mcompiler-182/src/main/java/BeanA2.java b/src/it/mcompiler-182/src/main/java/BeanA2.java
index 2d3e9f4..e572562 100644
--- a/src/it/mcompiler-182/src/main/java/BeanA2.java
+++ b/src/it/mcompiler-182/src/main/java/BeanA2.java
@@ -1,16 +1,35 @@
-/**
- * dumb test bean
- */
-public class BeanA2 {
-
-    private int i;
-    private BeanA beanA;
-
-    public int getI() {
-        return beanA.getI();
-    }
-
-    public void setI(int i) {
-        beanA.setI(i);
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * dumb test bean
+ */
+public class BeanA2 {
+
+    private int i;
+    private BeanA beanA;
+
+    public int getI() {
+        return beanA.getI();
+    }
+
+    public void setI(int i) {
+        beanA.setI(i);
+    }
+}
diff --git a/src/it/mcompiler-21_class-remove/invoker.properties b/src/it/mcompiler-21_class-remove/invoker.properties
index 0264e73..24e428d 100644
--- a/src/it/mcompiler-21_class-remove/invoker.properties
+++ b/src/it/mcompiler-21_class-remove/invoker.properties
@@ -1,4 +1,21 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
 invoker.goals = clean compile
 invoker.goals.2 = org.codehaus.gmaven:gmaven-plugin:execute
 invoker.goals.3 = compile
-invoker.buildResult.3 = failure
\ No newline at end of file
+invoker.buildResult.3 = failure
diff --git a/src/it/mcompiler-21_class-remove/pom.xml b/src/it/mcompiler-21_class-remove/pom.xml
index 78bfb0a..83bf6d1 100644
--- a/src/it/mcompiler-21_class-remove/pom.xml
+++ b/src/it/mcompiler-21_class-remove/pom.xml
@@ -1,4 +1,24 @@
 <?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
 <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/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
diff --git a/src/it/mcompiler-21_class-remove/src/main/java/BeanA.java b/src/it/mcompiler-21_class-remove/src/main/java/BeanA.java
index 6e07516..4d31495 100644
--- a/src/it/mcompiler-21_class-remove/src/main/java/BeanA.java
+++ b/src/it/mcompiler-21_class-remove/src/main/java/BeanA.java
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 /**
  * dumb test bean
  */
diff --git a/src/it/mcompiler-21_class-remove/src/main/java/BeanA2.java b/src/it/mcompiler-21_class-remove/src/main/java/BeanA2.java
index da8a65e..e572562 100644
--- a/src/it/mcompiler-21_class-remove/src/main/java/BeanA2.java
+++ b/src/it/mcompiler-21_class-remove/src/main/java/BeanA2.java
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 /**
  * dumb test bean
  */
diff --git a/src/it/mcompiler-21_methodname-change/invoker.properties b/src/it/mcompiler-21_methodname-change/invoker.properties
index 5fd091a..24e428d 100644
--- a/src/it/mcompiler-21_methodname-change/invoker.properties
+++ b/src/it/mcompiler-21_methodname-change/invoker.properties
@@ -1,4 +1,21 @@
-invoker.goals = clean compile
-invoker.goals.2 = org.codehaus.gmaven:gmaven-plugin:execute
-invoker.goals.3 = compile
-invoker.buildResult.3 = failure
\ No newline at end of file
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+invoker.goals = clean compile
+invoker.goals.2 = org.codehaus.gmaven:gmaven-plugin:execute
+invoker.goals.3 = compile
+invoker.buildResult.3 = failure
diff --git a/src/it/mcompiler-21_methodname-change/pom.xml b/src/it/mcompiler-21_methodname-change/pom.xml
index 016c45f..b36b41e 100644
--- a/src/it/mcompiler-21_methodname-change/pom.xml
+++ b/src/it/mcompiler-21_methodname-change/pom.xml
@@ -1,49 +1,69 @@
-<?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/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <groupId>org.apache.maven.plugins.compiler.it</groupId>
-  <artifactId>mcompiler-21_methodname-change</artifactId>
-  <version>1.0-SNAPSHOT</version>
-
-  <description>
-    This IT tests what happens if the method name in a single class BeanA gets changed.
-    In this case 'mvn compile' (without a clean) should fail as  BeanA2
-    still uses the old method of BeanA.
-  </description>
-
-  <build>
-    <pluginManagement>
-      <plugins>
-        <plugin>
-          <groupId>org.apache.maven.plugins</groupId>
-          <artifactId>maven-compiler-plugin</artifactId>
-          <version>@project.version@</version>
-        </plugin>      
-      </plugins>
-    </pluginManagement> 
-    <plugins>
-      <plugin>
-        <!-- Called as second invoker goal to simulate file adjustment -->
-        <groupId>org.codehaus.gmaven</groupId>
-        <artifactId>gmaven-plugin</artifactId>
-        <version>1.4</version>
-        <configuration>
-          <source>
-            def beanAFile = new File( project.basedir, 'src/main/java/BeanA.java' )
-            
-            processFileInplace( beanAFile ) { text -> 
-              text.replaceAll( /getI/, 'getI_doesntexistanymore')
-            }
-            
-            def processFileInplace(file, Closure processText) {
-              def text = file.text
-              file.write(processText(text))
-            }
-          </source>
-        </configuration>
-      </plugin>
-    </plugins>
-  </build>
-</project>
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+-->
+
+<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/xsd/maven-4.0.0.xsd">
+  <modelVersion>4.0.0</modelVersion>
+
+  <groupId>org.apache.maven.plugins.compiler.it</groupId>
+  <artifactId>mcompiler-21_methodname-change</artifactId>
+  <version>1.0-SNAPSHOT</version>
+
+  <description>
+    This IT tests what happens if the method name in a single class BeanA gets changed.
+    In this case 'mvn compile' (without a clean) should fail as  BeanA2
+    still uses the old method of BeanA.
+  </description>
+
+  <build>
+    <pluginManagement>
+      <plugins>
+        <plugin>
+          <groupId>org.apache.maven.plugins</groupId>
+          <artifactId>maven-compiler-plugin</artifactId>
+          <version>@project.version@</version>
+        </plugin>      
+      </plugins>
+    </pluginManagement> 
+    <plugins>
+      <plugin>
+        <!-- Called as second invoker goal to simulate file adjustment -->
+        <groupId>org.codehaus.gmaven</groupId>
+        <artifactId>gmaven-plugin</artifactId>
+        <version>1.4</version>
+        <configuration>
+          <source>
+            def beanAFile = new File( project.basedir, 'src/main/java/BeanA.java' )
+            
+            processFileInplace( beanAFile ) { text -> 
+              text.replaceAll( /getI/, 'getI_doesntexistanymore')
+            }
+            
+            def processFileInplace(file, Closure processText) {
+              def text = file.text
+              file.write(processText(text))
+            }
+          </source>
+        </configuration>
+      </plugin>
+    </plugins>
+  </build>
+</project>
diff --git a/src/it/mcompiler-21_methodname-change/src/main/java/BeanA.java b/src/it/mcompiler-21_methodname-change/src/main/java/BeanA.java
index 63e20f4..4d31495 100644
--- a/src/it/mcompiler-21_methodname-change/src/main/java/BeanA.java
+++ b/src/it/mcompiler-21_methodname-change/src/main/java/BeanA.java
@@ -1,15 +1,34 @@
-/**
- * dumb test bean
- */
-public class BeanA {
-
-    private int i,y;
-
-    public int getI() {
-        return i;
-    }
-
-    public void setI(int i) {
-        this.i = i;
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * dumb test bean
+ */
+public class BeanA {
+
+    private int i,y;
+
+    public int getI() {
+        return i;
+    }
+
+    public void setI(int i) {
+        this.i = i;
+    }
+}
diff --git a/src/it/mcompiler-21_methodname-change/src/main/java/BeanA2.java b/src/it/mcompiler-21_methodname-change/src/main/java/BeanA2.java
index 2d3e9f4..e572562 100644
--- a/src/it/mcompiler-21_methodname-change/src/main/java/BeanA2.java
+++ b/src/it/mcompiler-21_methodname-change/src/main/java/BeanA2.java
@@ -1,16 +1,35 @@
-/**
- * dumb test bean
- */
-public class BeanA2 {
-
-    private int i;
-    private BeanA beanA;
-
-    public int getI() {
-        return beanA.getI();
-    }
-
-    public void setI(int i) {
-        beanA.setI(i);
-    }
-}
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/**
+ * dumb test bean
+ */
+public class BeanA2 {
+
+    private int i;
+    private BeanA beanA;
+
+    public int getI() {
+        return beanA.getI();
+    }
+
+    public void setI(int i) {
+        beanA.setI(i);
+    }
+}
diff --git a/src/it/non-english-warnings/invoker.properties b/src/it/non-english-warnings/invoker.properties
index f75c481..541cb1a 100644
--- a/src/it/non-english-warnings/invoker.properties
+++ b/src/it/non-english-warnings/invoker.properties
@@ -1,2 +1,19 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+# 
+#   http://www.apache.org/licenses/LICENSE-2.0
+# 
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
 # NOTE: javac has been localized for Japanese, i.e. javac won't output English messages in this locale...
 invoker.mavenOpts = -Duser.language=ja
diff --git a/src/it/non-english-warnings/src/main/java/MyClass.java b/src/it/non-english-warnings/src/main/java/MyClass.java
index 19043b7..22efe45 100644
--- a/src/it/non-english-warnings/src/main/java/MyClass.java
+++ b/src/it/non-english-warnings/src/main/java/MyClass.java
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 public class MyClass
 {
 
diff --git a/src/it/non-english-warnings/src/test/java/MyTest.java b/src/it/non-english-warnings/src/test/java/MyTest.java
index ac7578e..1de5f62 100644
--- a/src/it/non-english-warnings/src/test/java/MyTest.java
+++ b/src/it/non-english-warnings/src/test/java/MyTest.java
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 public class MyTest
 {
 
diff --git a/src/it/non-english-warnings/verify.bsh b/src/it/non-english-warnings/verify.bsh
index 1844aba..8b1bc6e 100644
--- a/src/it/non-english-warnings/verify.bsh
+++ b/src/it/non-english-warnings/verify.bsh
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 import java.io.*;
 import java.util.*;
 import java.util.regex.*;
diff --git a/src/it/test1/src/main/java/MyClass.java b/src/it/test1/src/main/java/MyClass.java
index 0b3fbd2..4945381 100644
--- a/src/it/test1/src/main/java/MyClass.java
+++ b/src/it/test1/src/main/java/MyClass.java
@@ -1,3 +1,22 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
 public class MyClass
 {
 
