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." );
}
}