in nb-repository-plugin/src/main/java/org/apache/netbeans/nbm/repository/PopulateRepositoryMojo.java [669:814]
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);
List<RemoteRepository> repos = repositorySystem.newResolutionRepositories(session.getRepositorySession(), Collections.singletonList(new RemoteRepository.Builder(dependencyRepositoryId, "default", dependencyRepositoryUrl).build()));
ArtifactRequest artifactRequest = new ArtifactRequest();
artifactRequest.setRequestContext("nb-repository-plugin");
artifactRequest.setRepositories(repos);
artifactRequest.setTrace(RequestTrace.newChild(null, "nb-repository-plugin"));
ArtifactResult artifactResult;
try {
artifactRequest.setArtifact(new DefaultArtifact(groupIdPrefix + GROUP_API, artifactId, "", "pom", forcedVersion));
artifactResult = repositorySystem.resolveArtifact(session.getRepositorySession(), artifactRequest);
dep.setGroupId(groupIdPrefix + GROUP_API);
} catch (ArtifactResolutionException x) {
try {
artifactRequest.setArtifact(new DefaultArtifact(groupIdPrefix + GROUP_IMPL, artifactId, "", "pom", forcedVersion));
artifactResult = repositorySystem.resolveArtifact(session.getRepositorySession(), artifactRequest);
dep.setGroupId(groupIdPrefix + GROUP_IMPL);
if (wrapper.getModuleManifest().hasPublicPackages()) {
dep.setScope("runtime");
}
} catch (ArtifactResolutionException x2) {
try {
artifactRequest.setArtifact(new DefaultArtifact(groupIdPrefix + GROUP_EXTERNAL, artifactId, "", "pom", forcedVersion));
artifactResult = repositorySystem.resolveArtifact(session.getRepositorySession(), artifactRequest);
dep.setGroupId(groupIdPrefix + GROUP_EXTERNAL);
if (wrapper.getModuleManifest().hasPublicPackages()) {
dep.setScope("runtime");
}
} catch (ArtifactResolutionException x3) {
getLog().warn(x3);
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 = Files.createTempFile("maven", ".pom").toFile();
fil.deleteOnExit();
writer = new FileWriter(fil);
xpp.write(writer, mavenModel);
} catch (IOException ex) {
throw new UncheckedIOException(ex);
} finally {
if (writer != null) {
try {
writer.close();
} catch (IOException io) {
throw new UncheckedIOException(io);
}
}
}
return fil;
}