in nbm-maven-plugin/src/main/java/org/apache/netbeans/nbm/NetBeansManifestUpdateMojo.java [302:552]
public void execute()
throws MojoExecutionException, MojoFailureException {
//need to do this to chekc for javahelp on CP.
super.registerNbmAntTasks();
NetBeansModule module;
if (descriptor != null && descriptor.exists()) {
module = readModuleDescriptor(descriptor);
getLog().warn("descriptor parameter is deprecated, use equivalent mojo parameters instead.");
} else {
module = createDefaultDescriptor(project, false);
}
String mtype = moduleType;
//same moduleType related code in CreateNetBeansFileStructure.java
if ("normal".equals(mtype) && module.getModuleType() != null) {
mtype = module.getModuleType();
getLog().warn("moduleType in module descriptor is deprecated, use the plugin's parameter moduleType");
}
if (!"normal".equals(mtype) && !"autoload".equals(mtype) && !"eager".equals(mtype) && !"disabled".
equals(mtype)) {
getLog().error("Only 'normal,autoload,eager,disabled' are allowed values in the moduleType parameter");
}
boolean autoload = "autoload".equals(mtype);
boolean eager = "eager".equals(mtype);
String moduleName = codeNameBase;
if (module.getCodeNameBase() != null) {
moduleName = module.getCodeNameBase();
getLog().warn("codeNameBase in module descriptor is deprecated, use the plugin's parameter codeNameBase");
}
moduleName = moduleName.replaceAll("-", ".");
//<!-- if a NetBeans specific manifest is defined, examine this one, otherwise the already included one.
// ignoring the case when some of the NetBeans attributes are already defined in the jar and more is included.
File specialManifest = sourceManifestFile;
File nbmManifest = (module.getManifest() != null ? new File(
project.getBasedir(), module.getManifest()) : null);
if (nbmManifest != null && nbmManifest.exists()) {
//deprecated, but if actually defined, will use it.
specialManifest = nbmManifest;
}
ExamineManifest examinator = new ExamineManifest(getLog());
if (specialManifest != null && specialManifest.exists()) {
examinator.setManifestFile(specialManifest);
examinator.checkFile();
} else {
// examinator.setJarFile( jarFile );
}
getLog().info("NBM Plugin generates manifest");
Manifest manifest = null;
if (specialManifest != null && specialManifest.exists()) {
try (Reader reader = new InputStreamReader(new FileInputStream(specialManifest))) {
manifest = new Manifest(reader);
} catch (IOException exc) {
manifest = new Manifest();
getLog().warn("Error reading manifest at " + specialManifest, exc);
} catch (ManifestException ex) {
getLog().warn("Error reading manifest at " + specialManifest, ex);
manifest = new Manifest();
}
} else {
manifest = new Manifest();
}
Date date = getOutputTimestampOrNow(project);
String specVersion = AdaptNbVersion.adaptVersion(project.getVersion(),
AdaptNbVersion.TYPE_SPECIFICATION, date);
String implVersion = AdaptNbVersion.adaptVersion(project.getVersion(),
AdaptNbVersion.TYPE_IMPLEMENTATION, date);
Manifest.Section mainSection = manifest.getMainSection();
conditionallyAddAttribute(mainSection,
"OpenIDE-Module-Specification-Version", specVersion);
conditionallyAddAttribute(mainSection,
"OpenIDE-Module-Implementation-Version", implVersion);
if (autoload || eager) { //MNBMODULE-194
conditionallyAddAttribute(mainSection, "AutoUpdate-Show-In-Client", "false");
}
final String timestamp = createTimestamp(date);
conditionallyAddAttribute(mainSection, "OpenIDE-Module-Build-Version",
timestamp);
String projectCNB = conditionallyAddAttribute(mainSection, "OpenIDE-Module", moduleName);
String packagesValue;
if (publicPackages != null && publicPackages.size() > 0) {
StringBuilder sb = new StringBuilder();
for (String pub : publicPackages) {
if (pub == null) { //#MNBMODULE-237
continue;
}
if (pub.endsWith(".**")) {
// well, just sort of wrong value but accept
sb.append(pub);
} else if (pub.endsWith(".*")) {
//multipackage value
sb.append(pub).append("*");
} else {
sb.append(pub).append(".*");
}
sb.append(", ");
}
if (sb.length() > 1) { //if only item is null, we have empty builder
sb.setLength(sb.length() - 2); //cut the last 2 ", " characters
packagesValue = sb.toString();
} else {
// no packages available
packagesValue = "-";
}
} else {
// no packages available
packagesValue = "-";
}
conditionallyAddAttribute(mainSection, "OpenIDE-Module-Public-Packages", packagesValue);
//See https://bits.netbeans.org/dev/javadoc/org-openide-modules/apichanges.html#split-of-openide-jar
conditionallyAddAttribute(mainSection, "OpenIDE-Module-Requires",
"org.openide.modules.ModuleFormat1");
// conditionallyAddAttribute(mainSection, "OpenIDE-Module-IDE-Dependencies", "IDE/1 > 3.40");
// localization items
if (!examinator.isLocalized()) {
conditionallyAddAttribute(mainSection,
"OpenIDE-Module-Display-Category", project.getGroupId());
conditionallyAddAttribute(mainSection, "OpenIDE-Module-Name",
project.getName());
conditionallyAddAttribute(mainSection,
"OpenIDE-Module-Short-Description", shorten(project.getDescription()));
conditionallyAddAttribute(mainSection,
"OpenIDE-Module-Long-Description", project.getDescription());
}
getLog().debug("module =" + module);
final String scope = includeRuntimeModuleLibraries ? Artifact.SCOPE_COMPILE_PLUS_RUNTIME : Artifact.SCOPE_COMPILE;
ProjectBuildingRequest prjbr = new DefaultProjectBuildingRequest(session.getProjectBuildingRequest());
prjbr.setProject(project);
DependencyNode treeroot = createDependencyTree(prjbr, dependencyGraphBuilder, scope);
Map<Artifact, ExamineManifest> examinerCache = new HashMap<Artifact, ExamineManifest>();
@SuppressWarnings("unchecked")
List<Artifact> libArtifacts = getLibraryArtifacts(treeroot, module, project.getRuntimeArtifacts(),
examinerCache, getLog(), useOSGiDependencies);
List<ModuleWrapper> moduleArtifacts = getModuleDependencyArtifacts(treeroot, module, moduleDependencies,
project, examinerCache,
libArtifacts, getLog(), useOSGiDependencies);
StringBuilder classPath = new StringBuilder();
StringBuilder mavenClassPath = new StringBuilder();
String dependencies = "";
String depSeparator = " ";
for (Artifact a : libArtifacts) {
if (classPath.length() > 0) {
classPath.append(' ');
}
classPath.append(artifactToClassPathEntry(a, codeNameBase));
if (mavenClassPath.length() > 0) {
mavenClassPath.append(' ');
}
mavenClassPath.append(a.getGroupId()).
append(':').
append(a.getArtifactId()).
append(':').
append(a.getBaseVersion());
if (a.getClassifier() != null) {
mavenClassPath.append(":").append(a.getClassifier());
}
}
for (ModuleWrapper wr : moduleArtifacts) {
if (wr.transitive) {
continue;
}
Dependency dep = wr.dependency;
Artifact artifact = wr.artifact;
ExamineManifest depExaminator = examinerCache.get(artifact);
String type = dep.getType();
String depToken = dep.getExplicitValue();
if (depToken == null) {
if ("loose".equals(type)) {
depToken = depExaminator.getModuleWithRelease();
} else if ("spec".equals(type)) {
depToken
= depExaminator.getModuleWithRelease()
+ " > "
+ (depExaminator.isNetBeansModule() ? depExaminator.getSpecVersion()
: AdaptNbVersion.adaptVersion(depExaminator.getSpecVersion(),
AdaptNbVersion.TYPE_SPECIFICATION, date));
} else if ("impl".equals(type)) {
depToken
= depExaminator.getModuleWithRelease()
+ " = "
+ (depExaminator.isNetBeansModule() ? depExaminator.getImplVersion()
: AdaptNbVersion.adaptVersion(depExaminator.getImplVersion(),
AdaptNbVersion.TYPE_IMPLEMENTATION, date));
} else {
throw new MojoExecutionException(
"Wrong type of NetBeans dependency: " + type + " Allowed values are: loose, spec, impl.");
}
}
if (depToken == null) {
//TODO report
getLog().error(
"Cannot properly resolve the NetBeans dependency for " + dep.getId());
} else {
dependencies = dependencies + depSeparator + depToken;
depSeparator = ", ";
}
}
if (!verifyRuntime.equalsIgnoreCase(SKIP)) {
try {
checkModuleClassPath(treeroot, libArtifacts, examinerCache, moduleArtifacts, projectCNB);
} catch (IOException ex) {
throw new MojoExecutionException("Error while checking runtime dependencies", ex);
}
}
if (nbmJavahelpSource.exists()) {
String moduleJarName = stripVersionFromCodebaseName(moduleName).replace(".", "-");
classPath.append(" docs/").append(moduleJarName).append(".jar");
}
if (classPath.length() > 0) {
conditionallyAddAttribute(mainSection, "X-Class-Path", classPath.toString().trim());
}
if (mavenClassPath.length() > 0) {
conditionallyAddAttribute(mainSection, "Maven-Class-Path", mavenClassPath.toString());
}
if (dependencies.length() > 0) {
conditionallyAddAttribute(mainSection, "OpenIDE-Module-Module-Dependencies", dependencies);
}
// if ( librList.size() > 0 )
// {
// String list = "";
// for ( int i = 0; i < librList.size(); i++ )
// {
// list = list + " " + librList.get( i );
// }
// getLog().warn(
// "Some libraries could not be found in the dependency chain: " + list );
// }
try {
if (!targetManifestFile.exists()) {
targetManifestFile.getParentFile().mkdirs();
targetManifestFile.createNewFile();
}
} catch (IOException ex) {
throw new MojoExecutionException(ex.getMessage(), ex);
}
try (PrintWriter writer = new PrintWriter(targetManifestFile, "UTF-8");) //TODO really UTF-8??
{
manifest.write(writer);
} catch (IOException ex) {
throw new MojoExecutionException(ex.getMessage(), ex);
}
}