package org.bundlemaker.core.osgi.manifest;
import java.util.List;
import org.bundlemaker.core.analysis.IModuleArtifact;
public class CustomManifestCreator extends DefaultManifestCreator {
/**
* Packages und Sub-Packages, die <b>nicht</b> per Import-Package oder Require-Bunde im Manifest importiert werden
*
* @see #skipReferencedPackage(String, List)
**/
private final static String[] BOOTCLASSPATH_PACKAGES_INCLUDE = new String[] { //
"sun.", "com.sun." //
};
private final static String[] BOOTCLASSPATH_PACKAGES_EXCLUDE = new String[] { //
"com.sun.jdmk", //
"com.sun.jdmk.comm", //
"com.sun.jdmk.defaults", //
"com.sun.jdmk.trace", //
};
/**
* {@inheritDoc}
*/
@Override
protected boolean useImportPackage(String packageName, List<IModuleArtifact> exportingModules) {
return true;
}
@Override
protected boolean skipReferencedPackage(String packageName, List<IModuleArtifact> exportingModules) {
for (String includedBootPackage : BOOTCLASSPATH_PACKAGES_INCLUDE) {
if ((packageName + ".").startsWith(includedBootPackage)) {
System.out.printf("Potential package from boot classpath '%s' used in '%s'%n", packageName, getResourceModule()
.getModuleIdentifier());
for (String excludedBootPackage : BOOTCLASSPATH_PACKAGES_EXCLUDE) {
if (packageName.equals(excludedBootPackage)) {
System.out.printf(" Excluded package from boot classpath '%s' used in '%s'%n", packageName,
getResourceModule().getModuleIdentifier());
return false;
}
}
System.out.printf(" Skipping package from boot classpath '%s' used in '%s'%n", packageName,
getResourceModule().getModuleIdentifier());
return true;
}
}
return false;
}
}