You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@felix.apache.org by "Carsten Ziegeler (JIRA)" <ji...@apache.org> on 2016/05/18 05:44:12 UTC
[jira] [Closed] (FELIX-4999) maven-scr-plugin messes project
resources when outputDirectory configuration present on windows
[ https://issues.apache.org/jira/browse/FELIX-4999?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Carsten Ziegeler closed FELIX-4999.
-----------------------------------
> maven-scr-plugin messes project resources when outputDirectory configuration present on windows
> -----------------------------------------------------------------------------------------------
>
> Key: FELIX-4999
> URL: https://issues.apache.org/jira/browse/FELIX-4999
> Project: Felix
> Issue Type: Bug
> Components: SCR Tooling
> Affects Versions: maven-scr-plugin 1.21.0
> Environment: Windows
> Reporter: Philipp Kunz
> Assignee: Carsten Ziegeler
> Labels: easyfix, patch-available
> Fix For: maven-scr-plugin 1.22.0
>
> Attachments: FELIX-4999.patch
>
>
> As I look at the following code, I easily can conclude problems on Windows.
> {code:title=org.apache.felix.scrplugin.mojo.SCRDescriptorMojo#updateProjectResources()}
> private boolean updateProjectResources() {
> final String classesDir = this.project.getBuild().getOutputDirectory().replace(File.separatorChar, '/');
> final String ourRsrcPath = this.outputDirectory.getAbsolutePath().replace(File.separatorChar, '/');
> if ( !classesDir.equals(ourRsrcPath) ) {
> // now add the descriptor directory to the maven resources
> boolean found = false;
> @SuppressWarnings("unchecked")
> final Iterator<Resource> rsrcIterator = this.project.getResources().iterator();
> while (!found && rsrcIterator.hasNext()) {
> final Resource rsrc = rsrcIterator.next();
> found = rsrc.getDirectory().equals(ourRsrcPath);
> }
> if (!found) {
> final Resource resource = new Resource();
> resource.setDirectory(this.outputDirectory.getAbsolutePath());
> this.project.addResource(resource);
> }
> return true;
> }
> return false;
> }
> {code}
> The problematic snippet is *{{.replace(File.separatorChar, '/')}}*. On any other environment that Windows this might work but it does not work with backslash file separators.
> At first *{{classesDir}}* is compared to *{{ourRsrcPath}}* which is correct as both values have their slashes replaced. The second comparison on line [545|http://svn.apache.org/viewvc/felix/trunk/scrplugin/maven-scr-plugin/src/main/java/org/apache/felix/scrplugin/mojo/SCRDescriptorMojo.java?view=markup&revision=1616419], however, is invalid because *{{rsrc.getDirectory()}}* contains native file separators when compared to *{{ourRsrcPath}}* with replaced file separators.
> As a consequence, the outputDirecory becomes (is added as a) maven project resource and everything inside it if previously existing is copied into the target directory. In my case I specified the project root directory as outputDirectory so that Eclipse PDE finds the OSGI-INF folder in the place expected and added the root folder with an inclusion pattern of OSGI-INF/** to the project resources. The issue caused the whole project to get copied into the target/classes folder resulting in something like target/classes/target/classes, which maven-bundle-plugin is then complaining with an error because:
> {code}
> [ERROR] ... : Classes found in the wrong directory: {target/classes/target/clases/...=...}
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)