[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [m2e-users] please test m2e 1.1 M6 candidate build

I just confirmed this is caused by WTP.

If you create a simple, generic Eclipse Project, no folders are created. Now do Configure > Convert to Maven (use jar packaging), a pom will be created. The project is turned into a java project and references the src/main/java and src/test/java folders in its classpath but they're missing at this point. Now if you right-click on the project, Properties > Project Facets > Convert to Faceted form > Check Utility project, then the missing classpath folders will be created.

The WTP facets are automatically added to projects in m2e-wtp (any jar project dependency of a JavaEE project requires the Utility facet -WTP requirement, not mine).

So, not m2e's fault. You can blame m2e-wtp if you want but it's really caused by WTP creating these folders when adding facets.

Fred Bricon


On Fri, Mar 23, 2012 at 10:01 AM, <thorsten.heit@xxxxxx> wrote:
Hi Igor,

> m2e deliberately creates "forward" references to all source/resource
> folders found in pom.xml in .classpath. These are marked as optional, so
> jdt builder silently ignores folders that do not actually exist on
> filesystem. This behaviour is consistent with maven command line build,
> which, too, will check these folders for sources/resources, but will
> silently ignore them if they do not exist.
>
> m2e does not create the folders on filesystem and I don't know who does it.


I have seen this behaviour a couple of times, and I can confirm and repeat the recreation of folders such as src/test that don't exist on a project of mine. The problem seems to be that in my case the Eclipse project descriptor files such as .project and .classpath are checked in in our CVS system:

Assume that I have a slightly older version 2.0.1 of the project in my workspace. The files are checked out from CVS by using the tag that was created by "mvn release:prepare release:perform".

The .project contains two buildCommand and two nature entries:

<buildSpec>
    <buildCommand>
        <name>org.eclipse.jdt.core.javabuilder</name>
        <arguments>
        </arguments>
    </buildCommand>
    <buildCommand>
        <name>org.eclipse.m2e.core.maven2Builder</name>
        <arguments>
        </arguments>
    </buildCommand>
</buildSpec>
<natures>
    <nature>org.eclipse.jdt.core.javanature</nature>
    <nature>org.eclipse.m2e.core.maven2Nature</nature>
</natures>


The .classpath file is quite simple:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" output="target/classes" path="src/main/java"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
    <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER"/>
    <classpathentry kind="output" path="target/classes"/>
</classpath>

Both files were created with m2e 1.0 as far as I can remember. So far, so good. Clicking on "Maven -> Update Project..." doesn't change anything; there's only src/main/java as the only source folder.


Now, since m2e 1.1.x the checked-in head revision of the .classpath file (created with m2e 1.1.x and clicking on "Maven -> Update Project...") looks different:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
    <classpathentry kind="src" output="target/classes" path="src/main/java">
        <attributes>
            <attribute name="optional" value="true"/>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="src" output="target/test-classes" path="src/test/java">
        <attributes>
            <attribute name="optional" value="true"/>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
        </attributes>
    </classpathentry>
    <classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
        <attributes>
            <attribute name="maven.pomderived" value="true"/>
            <attribute name="org.eclipse.jst.component.nondependency" value=""/>
        </attributes>
    </classpathentry>
    <classpathentry kind="output" path="target/classes"/>
</classpath>

Switching from the tagged version to the HEAD revision lets Eclipse/m2e/whatever magically create the non-existing folders src/test and src/test/java, perhaps because they're mentioned in the .classpath file.

But: This happens only when I switch from the sticky revision that uses a simpler version of the .classpath file to a newer one that uses the above classpath entries, but not when I let m2e update the project, even when I'm using the head revision.


Regards

Thorsten
_______________________________________________
m2e-users mailing list
m2e-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/m2e-users




--
"Have you tried turning it off and on again" - The IT Crowd