Try to use an absolute path by using
<header>${basedir}/NOTICE</header>
If this doesn't work, try to set a property to and in the parent module's basedir and use it:
<header>${main.basedir}/NOTICE</header>
A third option is setting a property at runtime:
mvn clean install -Dmain.basedir=path/to/main/basedir
Edit:
Ok, a whole other option is to execute the maven-dependency-plugin before your license plugin. But you have to make sure the parent attaches the NOTICE (with maven-assembly-plugin plugin)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.6</version>
<executions>
<execution>
<id>unpack-parent</id>
<phase>verify</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>parent</groupId>
<artifactId>parent</artifactId>
<version>parent</version>
<type>pom</type>
<overWrite>false</overWrite>
<outputDirectory>${project.build.directory}/license</outputDirectory>
<includes>NOTICE</includes>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
The header
changes then in:
<header>${project.build.directory}/license/NOTICE</header>
Edit2:
I came across the find-maven-plugin. I think this could work:
<plugin>
<groupId>com.github.goldin</groupId>
<artifactId>find-maven-plugin</artifactId>
<version>0.2.5</version>
<executions>
<execution>
<id>find-notice-file</id>
<goals>
<goal>find</goal>
</goals>
<phase>validate</phase>
<configuration>
<propertyName>notice.file</propertyName>
<file>NOTICE</file>
</configuration>
</execution>
</executions>
</plugin>