use of org.apache.felix.ipojo.manipulator.util.Classpath in project felix by apache.
the class PojoizationPlugin method analyzeJar.
public boolean analyzeJar(Analyzer analyzer) throws Exception {
long start = System.currentTimeMillis();
// Wraps the Bnd Reporter
BndReporter reporter = new BndReporter(this.m_reporter);
// Build ResourceStore
BndJarResourceStore store = new BndJarResourceStore(analyzer, this.m_reporter);
store.setIncludeEmbedComponents(m_includeEmbedBundles);
CompositeMetadataProvider provider = buildMetadataProvider(analyzer, reporter, store);
// Quick exit
CacheableMetadataProvider cache = new CacheableMetadataProvider(provider);
if (cache.getMetadatas().isEmpty() && !hasEmbedComponents(analyzer)) {
return false;
}
// Compute the classpath to build the classloader.
List<Jar> jars = analyzer.getClasspath();
Jar jar = analyzer.getJar();
Set<String> paths = new LinkedHashSet<String>();
if (jar != null && jar.getSource() != null) {
paths.add(jar.getSource().getAbsolutePath());
}
for (Jar j : jars) {
if (j.getSource() != null) {
paths.add(j.getSource().getAbsolutePath());
}
}
Classpath cp = new Classpath(paths);
manipulateComponents(reporter, store, cache, cp.createClassLoader());
int nbComponents = findElements(cache.getMetadatas(), "component").size();
int nbHandlers = findElements(cache.getMetadatas(), "handler").size();
this.m_reporter.trace("iPOJO manipulation performed performed in %s ms (%d components, %d handlers).", (System.currentTimeMillis() - start), nbComponents, nbHandlers);
// Return true if a new run should be performed after the analyze
return false;
}
use of org.apache.felix.ipojo.manipulator.util.Classpath in project felix by apache.
the class ManipulatorMojo method execute.
/**
* Execute method : this method launches the pojoization.
*
* @throws MojoExecutionException : an exception occurs during the manipulation.
* @see org.apache.maven.plugin.AbstractMojo#execute()
*/
public void execute() throws MojoExecutionException {
// ignore project types not supported, useful when the plugin is configured in the parent pom
if (!this.m_supportedProjectTypes.contains(m_project.getArtifact().getType())) {
this.getLog().debug("Ignoring project " + m_project.getArtifact() + " : type " + m_project.getArtifact().getType() + " is not supported by iPOJO plugin, supported types are " + this.m_supportedProjectTypes);
return;
}
initializeSaxDriver();
getLog().info("Start bundle manipulation");
// Get metadata
// Check if metadata are contained in the configuration
// Metadata File or directory containing the metadata files.
File metadata = null;
// Use if contained in the configuration
InputStream is = null;
// Create the ClassPath and classloader.
Set<Artifact> artifacts = m_project.getArtifacts();
Set<String> urls = new LinkedHashSet<String>();
File classes = new File(m_project.getBasedir(), "target/classes");
if (classes.isDirectory()) {
urls.add(classes.getAbsolutePath());
}
for (Artifact artifact : artifacts) {
File file = artifact.getFile();
if (file != null && file.isFile()) {
urls.add(file.getAbsolutePath());
}
}
getLog().debug("Compute classpath: " + urls);
Classpath classpath = new Classpath(urls);
if (isXML()) {
is = new ByteArrayInputStream(m_metadata.getBytes());
} else {
// first check if ./src/main/ipojo exists, if so look into it.
if (m_metadata == null) {
File m = new File(m_project.getBasedir(), "src/main/ipojo");
if (m.isDirectory()) {
metadata = m;
getLog().info("Metadata directory : " + metadata.getAbsolutePath());
} else {
// Else check target/classes/metadata.xml
File meta = new File(m_outputDirectory + File.separator + "metadata.xml");
if (!meta.exists()) {
// If it still does not exist, try ./metadata.xml
meta = new File(m_project.getBasedir() + File.separator + "metadata.xml");
}
if (meta.exists()) {
metadata = meta;
getLog().info("Metadata file : " + metadata.getAbsolutePath());
}
// No metadata.
}
} else {
// metadata path set.
File m = new File(m_project.getBasedir(), m_metadata);
if (!m.exists()) {
throw new MojoExecutionException("The metadata file does not exist : " + m.getAbsolutePath());
}
metadata = m;
if (m.isDirectory()) {
getLog().info("Metadata directory : " + metadata.getAbsolutePath());
} else {
getLog().info("Metadata file : " + metadata.getAbsolutePath());
}
}
if (metadata == null) {
// Verify if annotations are ignored
if (m_ignoreAnnotations) {
getLog().info("No metadata file found - ignoring annotations");
return;
} else {
getLog().info("No metadata file found - trying to use only annotations");
}
}
}
// Get input bundle, we use the already create artifact.
File in = null;
if (m_inputClassifier == null) {
in = m_project.getArtifact().getFile();
getLog().info("Input Bundle File : " + in.getAbsolutePath());
if (!in.exists()) {
throw new MojoExecutionException("The specified bundle file does not exist : " + in.getAbsolutePath());
}
} else {
// Look from attached artifacts.
@SuppressWarnings("unchecked") List<Artifact> attached = m_project.getAttachedArtifacts();
for (int i = 0; in == null && attached != null && i < attached.size(); i++) {
Artifact artifact = attached.get(i);
if (artifact.hasClassifier() && m_inputClassifier.equals(artifact.getClassifier())) {
in = artifact.getFile();
}
}
if (in == null) {
throw new MojoExecutionException("Cannot find the file to manipulate, " + "no attached artifact with classifier " + m_inputClassifier);
}
getLog().info("Input Bundle File : " + in.getAbsolutePath());
if (!in.exists()) {
throw new MojoExecutionException("The specified bundle file does not exist : " + in.getAbsolutePath());
}
}
File out = new File(m_buildDirectory + File.separator + "_out.jar");
Reporter reporter = new MavenReporter(getLog());
Pojoization pojo = new Pojoization(reporter);
if (m_ignoreAnnotations) {
pojo.disableAnnotationProcessing();
}
if (!m_ignoreEmbeddedXSD) {
pojo.setUseLocalXSD();
}
// Executes the pojoization.
if (is == null) {
if (metadata == null) {
// No metadata.
// Only annotations
pojo.pojoization(in, out, (File) null, classpath.createClassLoader());
} else {
// Metadata set
pojo.pojoization(in, out, metadata, classpath.createClassLoader());
}
} else {
// In-Pom metadata.
pojo.pojoization(in, out, is, classpath.createClassLoader());
}
for (int i = 0; i < reporter.getWarnings().size(); i++) {
getLog().warn((String) reporter.getWarnings().get(i));
}
if (reporter.getErrors().size() > 0) {
throw new MojoExecutionException((String) reporter.getErrors().get(0));
}
if (m_classifier != null) {
// The user want to attach the resulting jar
// Do not delete in File
m_helper.attachArtifact(m_project, "jar", m_classifier, out);
} else {
// Usual behavior
if (in.delete()) {
if (!out.renameTo(in)) {
getLog().warn("Cannot rename the manipulated jar file");
}
} else {
getLog().warn("Cannot delete the input jar file");
}
}
getLog().info("Bundle manipulation - SUCCESS");
}
Aggregations