20

I have been using m2eclipse for 2 years or so and have now switched to m2e.

Unfortunately, this has broken some functionality for me.

In many projects, I have generated Java code, usually generated through a main class in a library project. Here's a typical setup:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>exec-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>generateDTOs</id>
            <phase>generate-sources</phase>
            <goals>
                <goal>java</goal>
            </goals>
            <configuration>
                <classpathScope>test</classpathScope>
                <mainClass>com.somecompany.SomeCodeGenerator</mainClass>
                <arguments>
                    <argument>${project.build.directory}/generated-sources/foo</argument>
                    <argument>${project.basedir}/path/to/a/config/file</argument>
                    <argument>more arguments</argument>
                </arguments>
            </configuration>
        </execution>
    </executions>
</plugin>
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <executions>
        <execution>
            <id>addDtoSourceFolder</id>
            <goals>
                <goal>add-source</goal>
            </goals>
            <phase>process-sources</phase>
            <configuration>
                <sources>
                    <source>${project.build.directory}/generated-sources/foo</source>
                </sources>
            </configuration>
        </execution>
    </executions>
</plugin>

Previously, I would just have to import that project with eclipse as a maven project, the code would automatically be executed and the source folder added to the eclipse project.

Now, m2e has installed a "connector" for the buildhelper plugin, so the source folder is created, but I have to manually trigger code generation by executing Run As > Maven > generate-sources. This is really annoying, I would like the maven build to respond to pom.xml changes, Project > Clean ..., SVN Updates, Eclipse startup etc. as it previously did.

What can I do to make m2e work like m2eclipse?

Betlista
  • 10,327
  • 13
  • 69
  • 110
Sean Patrick Floyd
  • 292,901
  • 67
  • 465
  • 588
  • 1
    I suspect your problem has something to do with the changes made in [M2E in the area of project lifecycle mapping](http://wiki.eclipse.org/M2E_plugin_execution_not_covered) although I'm not sure if specifying the plugin goal as execute would help in your case. – Vineet Reynolds Jul 14 '11 at 10:37
  • @Vineet thanks, this link looks like a good starting point. – Sean Patrick Floyd Jul 14 '11 at 10:40

2 Answers2

21

You have to tell M2E that it's okay to run your code generator as part of the Eclipse build:

<project>
  <build>
     [...]
     <pluginManagement>
      <plugins>
        <!--This plugin's configuration is used to store Eclipse m2e settings only. It has no influence 
          on the Maven build itself. -->
        <plugin>
          <groupId>org.eclipse.m2e</groupId>
          <artifactId>lifecycle-mapping</artifactId>
          <version>1.0.0</version>
          <configuration>
            <lifecycleMappingMetadata>
              <pluginExecutions>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <versionRange>[,)</versionRange>
                    <goals>
                      <goal>java</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action>
                    <execute/>
                  </action>
                </pluginExecution>
              </pluginExecutions>
            </lifecycleMappingMetadata>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>
</project>

Notes:

  1. It's important to put this configuration in the pluginManagement section, not directly under plugins.
  2. This will cause M2E to perform all java executions specified in your POM as part of every Eclipse build. This means they will run often and be a big nuisance if they are slow. I'm not sure how you would get M2E to run some of them and skip others. You'd probably have to place the unwanted executions in profiles.
Jonathan Fuerth
  • 2,080
  • 2
  • 18
  • 21
  • 2
    I'm accepting this because it's the correct answer. But it's still awful. Basically, because of m2e, I will have to write a custom plugin + custom connector for every code generation scenario unless I want my eclipse to be blocked by superfluous builds all the time. – Sean Patrick Floyd Oct 20 '11 at 06:22
  • Agreed. I'm currently struggling through the multitude of problems thrown in my path by m2e, and I don't like it either. I'd rather be writing code than fighting the build. – Jonathan Fuerth Oct 20 '11 at 22:20
  • 2
    You can use `false` to avoid running the plugin on every save. – Stian Soiland-Reyes Apr 16 '12 at 12:29
  • I dont understand this solution, I dont use pluginmanagement, so what do i have to enter in the run/debug configuration? – Gobliins Oct 26 '15 at 09:30
  • I think that version range has a typo, it will produce an unparsable version range at least in modern Eclipses. `[1,)` works a lot better. – Gimby Oct 07 '16 at 14:05
  • Hm the `Plugin execution not covered by lifecycle configuration` has gone away with this, but my class is still not executed at all with eclipse – wutzebaer Oct 19 '16 at 08:02
1

In Eclipse you can define which life-cycle step will be run during an import which is by default empty. You can simply change this to process-resources or do a simply Maven -> Update Project Configuration. In the configuration (Windows -> Preferences -> Maven) you can change the default behaviour to simplify your live.

khmarbaise
  • 92,914
  • 28
  • 189
  • 235