src/main/java/com/simpligility/maven/plugins/android/phase01generatesources/GenerateSourcesMojo.java
private void checkForConflictingLayouts() throws MojoExecutionException
    {
        final ConflictingLayoutDetector detector = new ConflictingLayoutDetector();

        // Add layout files for this project
        final FileRetriever retriever = new FileRetriever( "layout*/*.xml" );
        detector.addLayoutFiles( getAndroidManifestPackageName(), retriever.getFileNames( resourceDirectory ) );

        // Add layout files for all dependencies.
        for ( final Artifact dependency : getTransitiveDependencyArtifacts( AAR, APKLIB ) )
        {
            final String packageName = extractPackageNameFromAndroidArtifact( dependency );
            final String[] layoutFiles = retriever.getFileNames( getUnpackedLibResourceFolder( dependency ) );
            detector.addLayoutFiles( packageName, layoutFiles );
        }

        final Collection<ConflictingLayout> conflictingLayouts = detector.getConflictingLayouts();
        getLog().debug( "checkConflictingLayouts - conflicts : " + conflictingLayouts );
        if ( !conflictingLayouts.isEmpty() )
        {
            final List<String> sb = new ArrayList<String>();
            sb.add( "" );
            sb.add( "" );
            sb.add( "Duplicate layout files have been detected across more than one Android package." );
            sb.add( "" );
            sb.add( "Such a scenario generally means that the build will fail with a compilation error due to" );
            sb.add( "missing resource files. You should consider renaming some of the layout files listed below" );
            sb.add( "to avoid the conflict." );
            sb.add( "" );
            sb.add( "However, if you believe you know better, then you can downgrade the failure to a warning" );
            sb.add( "by setting the failOnConflictingLayouts plugin property to false." );
            sb.add( "But you really don't want to do that." );
            sb.add( "" );
            sb.add( "Conflicting Layouts:" );
            for ( final ConflictingLayout layout : conflictingLayouts )
            {
                sb.add( "    " + layout.getLayoutFileName() + "  packages=" + layout.getPackageNames().toString() );
            }
            sb.add( "" );

            if ( failOnConflictingLayouts )
            {
                final StringBuilder builder = new StringBuilder();
                for ( final String line : sb )
                {
                    builder.append( line );
                    builder.append( "\n" );
                }
                throw new MojoExecutionException( builder.toString() );
            }

            for ( final String line : sb )
            {
                getLog().warn( line );
            }
        }
    }
private void checkForConflictingLayouts() throws MojoExecutionException
    {
        final ConflictingLayoutDetector detector = new ConflictingLayoutDetector();

        // Add layout files for this project
        final FileRetriever retriever = new FileRetriever( "layout*/*.xml" );
        detector.addLayoutFiles( getAndroidManifestPackageName(), retriever.getFileNames( resourceDirectory ) );

        // Add layout files for all dependencies.
        for ( final Artifact dependency : getTransitiveDependencyArtifacts( AAR, APKLIB ) )
        {
            final String packageName = extractPackageNameFromAndroidArtifact( dependency );
            final String[] layoutFiles = retriever.getFileNames( getUnpackedLibResourceFolder( dependency ) );
            detector.addLayoutFiles( packageName, layoutFiles );
        }

        final Collection<ConflictingLayout> conflictingLayouts = detector.getConflictingLayouts();
        getLog().debug( "checkConflictingLayouts - conflicts : " + conflictingLayouts );
        if ( !conflictingLayouts.isEmpty() )
        {
            final List<String> sb = new ArrayList<String>();
            sb.add( "" );
            sb.add( "" );
            sb.add( "Duplicate layout files have been detected across more than one Android package." );
            sb.add( "" );
            sb.add( "Such a scenario generally means that the build will fail with a compilation error due to" );
            sb.add( "missing resource files. You should consider renaming some of the layout files listed below" );
            sb.add( "to avoid the conflict." );
            sb.add( "" );
            sb.add( "However, if you believe you know better, then you can downgrade the failure to a warning" );
            sb.add( "by setting the failOnConflictingLayouts plugin property to false." );
            sb.add( "But you really don't want to do that." );
            sb.add( "" );
            sb.add( "Conflicting Layouts:" );
            for ( final ConflictingLayout layout : conflictingLayouts )
            {
                sb.add( "    " + layout.getLayoutFileName() + "  packages=" + layout.getPackageNames().toString() );
            }
            sb.add( "" );

            if ( failOnConflictingLayouts )
            {
                final StringBuilder builder = new StringBuilder();
                for ( final String line : sb )
                {
                    builder.append( line );
                    builder.append( "\n" );
                }
                throw new MojoExecutionException( builder.toString() );
            }

            for ( final String line : sb )
            {
                getLog().warn( line );
            }
        }
    }
Looks for dependencies that have a layout file with the same name as either one of the project layout files
or one of the other dependencies. If such a duplicate occurs then it will fail the build or generate a warning
depending upon the value of the <strong>failOnConflictingLayouts</strong> build parameter.

@throws MojoExecutionException