in nb-repository-plugin/src/main/java/org/apache/netbeans/nbm/repository/PopulateRepositoryMojo.java [779:965]
private File createMavenProject( ModuleWrapper wrapper, List<ModuleWrapper> wrapperList,
List<ExternalsWrapper> externalsList )
throws MojoExecutionException
{
Model mavenModel = new Model();
mavenModel.setGroupId( wrapper.getGroup() );
mavenModel.setArtifactId( wrapper.getArtifact() );
mavenModel.setVersion( wrapper.getVersion() );
mavenModel.setPackaging( "jar" );
mavenModel.setModelVersion( "4.0.0" );
if ( artefactParent != null )
{
mavenModel.setParent( artefactParent );
}
ExamineManifest man = wrapper.getModuleManifest();
List<Dependency> deps = new ArrayList<>();
if ( !man.getDependencyTokens().isEmpty() )
{
for ( String elem : man.getDependencyTokens() )
{
// create pseudo wrapper
ModuleWrapper wr = new ModuleWrapper( elem );
int index = wrapperList.indexOf( wr );
if ( index > -1 )
{
wr = wrapperList.get( index );
Dependency dep;
if ( wr instanceof ModuleWrapperMaven )
{
dep = ( ( ModuleWrapperMaven ) wr ).getDep();
}
else
{
dep = new Dependency();
dep.setArtifactId( wr.getArtifact() );
dep.setGroupId( wr.getGroup() );
dep.setVersion( wr.getVersion() );
}
dep.setType( "jar" );
//we don't want the API modules to depend on non-api ones..
// otherwise the transitive dependency mechanism pollutes your classpath..
if ( wrapper.getModuleManifest().hasPublicPackages()
&& !wr.getModuleManifest().hasPublicPackages() )
{
dep.setScope( "runtime" );
}
deps.add( dep );
}
else if ( dependencyRepositoryUrl != null )
{
Dependency dep = new Dependency();
dep.setType( "jar" );
String artifactId = elem.replace( '.', '-' );
dep.setArtifactId( artifactId );
if ( forcedVersion == null )
{
throw new MojoExecutionException( "Cannot use dependencyRepositoryUrl without forcedVersion" );
}
dep.setVersion( forcedVersion );
ArtifactRepositoryPolicy policy = new ArtifactRepositoryPolicy();
List<ArtifactRepository> repos = Collections.singletonList(
repositoryFactory.createArtifactRepository(
dependencyRepositoryId, dependencyRepositoryUrl, artifactRepositoryLayout, policy, policy ) );
try
{
artifactResolver.resolve(
artifactFactory.createBuildArtifact( groupIdPrefix + GROUP_API, artifactId, forcedVersion, "pom" ),
repos,
session.getLocalRepository() );
dep.setGroupId( groupIdPrefix + GROUP_API );
}
catch ( AbstractArtifactResolutionException x )
{
try
{
artifactResolver.resolve( artifactFactory.createBuildArtifact( groupIdPrefix + GROUP_IMPL, artifactId, forcedVersion, "pom" ), repos, session.getLocalRepository() );
dep.setGroupId( groupIdPrefix + GROUP_IMPL );
if ( wrapper.getModuleManifest().hasPublicPackages() )
{
dep.setScope( "runtime" );
}
}
catch ( AbstractArtifactResolutionException x2 )
{
try
{
artifactResolver.resolve( artifactFactory.createBuildArtifact( groupIdPrefix + GROUP_EXTERNAL, artifactId, forcedVersion, "pom" ), repos, session.getLocalRepository() );
dep.setGroupId( groupIdPrefix + GROUP_EXTERNAL );
if ( wrapper.getModuleManifest().hasPublicPackages() )
{
dep.setScope( "runtime" );
}
}
catch ( AbstractArtifactResolutionException x3 )
{
getLog().warn( x3.getOriginalMessage() );
throw new MojoExecutionException( "No module found for dependency '" + elem + "'", x );
}
}
}
deps.add( dep );
}
else
{
getLog().warn( "No module found for dependency '" + elem + "'" );
}
}
}
//need some generic way to handle Classpath: items.
//how to figure the right version?
String cp = wrapper.getModuleManifest().getClasspath();
if ( !cp.isEmpty() )
{
StringTokenizer tok = new StringTokenizer( cp );
while ( tok.hasMoreTokens() )
{
String path = tok.nextToken();
File f = new File( wrapper.getFile().getParentFile(), path );
if ( f.exists() )
{
Dependency dep = findExternal( f );
if ( dep != null )
{
deps.add( dep );
// XXX MNBMODULE-170: repack NBM with *.external
}
else
{
ExternalsWrapper ex = new ExternalsWrapper();
ex.setFile( f );
String artId = f.getName();
if ( artId.endsWith( ".jar" ) )
{
artId = artId.substring( 0, artId.length() - ".jar".length() );
}
ex.setVersion( wrapper.getVersion() );
ex.setArtifact( artId );
ex.setGroupid( groupIdPrefix + GROUP_EXTERNAL );
externalsList.add( ex );
dep = new Dependency();
dep.setArtifactId( artId );
dep.setGroupId( groupIdPrefix + GROUP_EXTERNAL );
dep.setVersion( wrapper.getVersion() );
dep.setType( "jar" );
deps.add( dep );
}
}
}
}
wrapper.deps = deps;
mavenModel.setDependencies( deps );
FileWriter writer = null;
File fil = null;
try
{
MavenXpp3Writer xpp = new MavenXpp3Writer();
fil = File.createTempFile( "maven", ".pom" );
fil.deleteOnExit();
writer = new FileWriter( fil );
xpp.write( writer, mavenModel );
}
catch ( IOException ex )
{
ex.printStackTrace();
}
finally
{
if ( writer != null )
{
try
{
writer.close();
}
catch ( IOException io )
{
io.printStackTrace();
}
}
}
return fil;
}