You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Rembert Magri (JIRA)" <ji...@apache.org> on 2009/10/28 16:11:59 UTC

[jira] Updated: (FELIX-1819) Problem with dependencies resolution

     [ https://issues.apache.org/jira/browse/FELIX-1819?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Rembert Magri updated FELIX-1819:
---------------------------------

    Summary: Problem with dependencies resolution  (was: Problem trying )

> Problem with dependencies resolution
> ------------------------------------
>
>                 Key: FELIX-1819
>                 URL: https://issues.apache.org/jira/browse/FELIX-1819
>             Project: Felix
>          Issue Type: Bug
>          Components: Maven SCR Plugin
>    Affects Versions: maven-scr-plugin-1.2.0
>            Reporter: Rembert Magri
>             Fix For: maven-scr-plugin-1.4.1
>
>         Attachments: JavaClassDescriptorManager.java
>
>
> When adding dependencies with "provided" scope, the plugin cannot find the bundle correctly. I fixed the problem by changing the getManifest and getFile methods as follows:
> protected Manifest getManifest(Artifact artifact) throws IOException {
>     	if (!this.isJavaArtifact(artifact)) {
>     		throw new IllegalArgumentException("Trying to load Manifest from a non-Java type");
>     	}
>     	
>     	if ("bundle".equals(artifact.getType())) {
>     		return getManifestFromBundle(artifact);
>     	}
>     	
>     	return getManifestFromJarFile(artifact);
>         
>     }
> 	private Manifest getManifestFromBundle(Artifact artifact)
> 			throws FileNotFoundException, IOException {
> 		//artifact.getFile() returns {project}/target/classes, and I want {project}/META-INF/MANIFEST.MF
> 		File file = getFileFromBundle(artifact, "META-INF/MANIFEST.MF");
> 		FileInputStream manifestInputStream = null;
> 		try {
> 			manifestInputStream = new FileInputStream(file);
> 			return new Manifest(manifestInputStream);
> 		} finally {
> 			if (manifestInputStream != null) {
> 				try {
> 					manifestInputStream.close();
> 		        } catch (IOException ignore) {
> 		        }
> 			}
> 		}
> 	}
> 	private Manifest getManifestFromJarFile(Artifact artifact)
> 			throws IOException {
> 		JarFile file = null;
> 		try {
> 		    file = new JarFile(artifact.getFile());
> 		    return file.getManifest();
> 		} finally {
> 		    if (file != null) {
> 		        try {
> 		            file.close();
> 		        } catch (IOException ignore) {
> 		        }
> 		    }
> 		}
> 	}
>     protected File getFile(Artifact artifact, String path) throws IOException {
>     	if ("bundle".equals(artifact.getType())) {
>     		return getFileFromBundle(artifact, path);
>     	}
>     	
>         return getFileFromJar(artifact, path);
>     }
> 	private File getFileFromBundle(Artifact artifact, String path) throws FileNotFoundException {
> 		//artifact.getFile() returns {project}/target/classes, and I want {project}/path
> 		File file = artifact.getFile();
> 		File targetFile = new File(file.getParentFile().getParentFile(),path);
> 		if (targetFile.canRead()) {
> 			return targetFile;
> 		}
> 		log.warn("Won't be able to read: " + targetFile);
> 		return null;
> 	}
> 	private File getFileFromJar(Artifact artifact, String path)
> 			throws IOException, FileNotFoundException {
> 		final int pos = path.lastIndexOf('.');
>         final String suffix = path.substring(pos + 1);
>         JarFile file = null;
>         File tmpFile = null;
>         try {
>             file = new JarFile(artifact.getFile());
>             final JarEntry entry = file.getJarEntry(path);
>             if ( entry != null ) {
>                 tmpFile = File.createTempFile("scrjcdm" + artifact.getArtifactId(), suffix);
>                 tmpFile.deleteOnExit();
>                 final FileOutputStream fos = new FileOutputStream(tmpFile);
>                 IOUtil.copy(file.getInputStream(entry), fos);
>                 IOUtil.close(fos);
>                 return tmpFile;
>             }
>             return null;
>         } finally {
>             if (file != null) {
>                 try {
>                     file.close();
>                 } catch (IOException ignore) {
>                 }
>             }
>         }
> 	}

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.