[
https://issues.apache.org/jira/browse/FELIX-4999?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14681284#comment-14681284
]
Carsten Ziegeler commented on FELIX-4999:
-----------------------------------------
I've committed a patch which should fix the "." problem. Could you please give
this a try?
In fact, the scr plugin should work with an output directory which is not
configured in the resources. However, having additional content in that output
directory not generated by the plugin, seems uncommon. The plugin tries to be
smart, but I guess there will always be a case where it fails. In general,
especially when working with Eclipse, the best solution we're using is to let
the scr plugin generate it's stuff into target/classes. This basically makes
target/classes an expanded version of the resulting bundle jar which allows for
easy bundle updates into your container (without building the jar) etc.
But I think for this issue we should focus on getting the dir path handling
right
> 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
> 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)