[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
[m2e-users] resources in Java folders
|
Hi,
With m2e 1.4.0.20130601 I observe that the .classpath file generated by
"Maven > Update project" leads to inconsistent behaviour between Maven and
Eclipse.
Namely, when Eclipse builds the project, it copies all files except *.java
and *.class
from src/main/java/ to target/classes/, whereas Maven does not. This leads
to different
runtime behaviour (regarding whether resource files will be found or not),
and the
developer wastes time tracking this down.
How to reproduce
================
1) In Eclipse, create a new plain "Java Project".
In its Java Build Path, set the source directory to src/main/java
instead of src.
2) To the project's .project file, add the following code snippets:
<buildCommand>
<name>org.eclipse.m2e.core.maven2Builder</name>
<arguments>
</arguments>
</buildCommand>
and
<nature>org.eclipse.m2e.core.maven2Nature</nature>
3) Add a pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>zzztest</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name></name>
<properties>
</properties>
<dependencies>
</dependencies>
<build>
</build>
</project>
4) In Eclipse, on the project, do "Refresh" (F5).
5) In Eclipse, on the project, do "Maven > Update project".
6) Create some files in the directory src/main/java/:
$ echo 'public class main {}' > main.java
$ touch main.xml
$ touch main.properties
$ touch other.class
In Eclipse, on the project, do "Refresh" (F5).
7) Execute the compilation through maven:
$ mvn clean package; ls -1 target/classes/
main.class
8) Execute the compilation through Eclipse:
In Eclipse, select the project, then do "Project > Clean..." (with
"Build automatically" turned on).
$ ls -1 target/classes/
main.class
main.properties
main.xml
META-INF
As you can see, Eclipse copies resource files to target/classes, while
Maven does not.
The problem
===========
The problem is the .classpath that "Maven > Update project" generated.
It contains the line
<classpathentry kind="src" output="target/classes" path="src/main/java">
Instead, it should contain the line
<classpathentry including="**/*.java" kind="src" path="src/main/java"/>
With this line, the list of resources is consistent:
$ ls -1 target/classes/
main.class
META-INF
Best regards,
----------------------------------------------------------------------------
Bruno Haible Email: <bruno.haible@xxxxxxxxxx>
IBM Deutschland
Wilhelm-Fay-Straße 30-34
65936 Frankfurt am Main
Germany
----------------------------------------------------------------------------
IBM Deutschland Research & Development GmbH
Geschäftsführung: Dirk Wittkopp
Sitz der Gesellschaft: Böblingen
Registergericht: Amtsgericht Stuttgart, HRB 243294