public void execute()

in nbm-maven-plugin/src/main/java/org/apache/netbeans/nbm/CreateClusterMojo.java [78:213]


    public void execute()
            throws MojoExecutionException, MojoFailureException
    {
        Project antProject = registerNbmAntTasks();

        if ( !clusterBuildDir.exists() )
        {
            clusterBuildDir.mkdirs();
        }

        if ( reactorProjects != null && reactorProjects.size() > 0 )
        {
            for ( MavenProject proj : reactorProjects )
            {

                File nbmDir = new File( nbmBuildDir, "clusters" );
                if ( nbmDir.exists() )
                {
                    Copy copyTask = (Copy) antProject.createTask( "copy" );
                    copyTask.setTodir( clusterBuildDir );
                    copyTask.setOverwrite( true );
                    FileSet set = new FileSet();
                    set.setDir( nbmDir );
                    set.createInclude().setName( "**" );
                    copyTask.addFileset( set );

                    try
                    {
                        copyTask.execute();
                    }
                    catch ( BuildException ex )
                    {
                        getLog().error( "Cannot merge modules into cluster" );
                        throw new MojoExecutionException(
                                "Cannot merge modules into cluster", ex );
                    }
                }
                else
                {
                    if ( "nbm".equals( proj.getPackaging() ) )
                    {
                        String error
                                = "The NetBeans binary directory structure for "
                                + proj.getId()
                                + " is not created yet."
                                + "\n Please execute 'mvn install nbm:cluster' "
                                + "to build all relevant projects in the reactor.";
                        throw new MojoFailureException( error );
                    }
                    if ( "bundle".equals( proj.getPackaging() ) )
                    {
                        Artifact art = proj.getArtifact();
                        final ExamineManifest mnf = new ExamineManifest( getLog() );

                        File jar = new File( proj.getBuild().getDirectory(), proj.getBuild().getFinalName() + ".jar" );
                        if ( !jar.exists() )
                        {
                            getLog().error( "Skipping " + proj.getId()
                                    + ". Cannot find the main artifact in output directory." );
                            continue;
                        }
                        mnf.setJarFile( jar );
                        mnf.checkFile();

                        File clusterDir = new File( clusterBuildDir, cluster );
                        getLog().debug( "Copying " + art.getId() + " to cluster " + cluster );
                        File modules = new File( clusterDir, "modules" );
                        modules.mkdirs();
                        File config = new File( clusterDir, "config" );
                        File confModules = new File( config, "Modules" );
                        confModules.mkdirs();
                        File updateTracting = new File( clusterDir, "update_tracking" );
                        updateTracting.mkdirs();

                        final String cnb = mnf.getModule();
                        final String cnbDashed = cnb.replace( ".", "-" );
                        //do we need the file in some canotical name pattern for moduleArt?
                        final File moduleArt = new File( modules, cnbDashed + ".jar" );
                        final String specVer = mnf.getSpecVersion();
                        try
                        {
                            FileUtils.copyFile( jar, moduleArt );
                            final File moduleConf = new File( confModules, cnbDashed + ".xml" );
                            FileUtils.copyStreamToFile( new InputStreamFacade()
                            {
                                public InputStream getInputStream() throws IOException
                                {
                                    return new StringInputStream( CreateClusterAppMojo.createBundleConfigFile( cnb, mnf.
                                            isBundleAutoload() ), "UTF-8" );
                                }
                            }, moduleConf );
                            FileUtils.copyStreamToFile( new InputStreamFacade()
                            {
                                public InputStream getInputStream() throws IOException
                                {
                                    return new StringInputStream( CreateClusterAppMojo.createBundleUpdateTracking( cnb,
                                            moduleArt, moduleConf, specVer ), "UTF-8" );
                                }
                            }, new File( updateTracting, cnbDashed + ".xml" ) );
                        }
                        catch ( IOException exc )
                        {
                            getLog().error( exc );
                        }

                    }
                }
            }
            //in 6.1 the rebuilt modules will be cached if the timestamp is not touched.
            File[] files = clusterBuildDir.listFiles();
            for ( int i = 0; i < files.length; i++ )
            {
                if ( files[i].isDirectory() )
                {
                    File stamp = new File( files[i], ".lastModified" );
                    if ( !stamp.exists() )
                    {
                        try
                        {
                            stamp.createNewFile();
                        }
                        catch ( IOException ex )
                        {
                            ex.printStackTrace();
                        }
                    }
                    stamp.setLastModified( new Date().getTime() );
                }
            }
            getLog().info( "Created NetBeans module cluster(s) at " + clusterBuildDir );
        }
        else
        {
            throw new MojoExecutionException( "This goal only makes sense on reactor projects." );
        }
    }