Le 2024-07-12 à 15 h 26, Guillaume Nodet a écrit :

I've been working on migrating the build-helper-maven-plugin to the Maven 4.x API. (…snip…). This plugin in particular is used a lot (to add generated source/resources and attach artifacts) and there's no other way to do it. This is essentially a core feature of Maven, and thus, I think it should be provided by a Maven plugin. (…snip…) It just feels weird that Maven does not provide the required plugins directly...

Alternatively, should we open the "multi-sources" discussion? We can leave apart all the aspects related to JPMS for now. Reminder: it is about changing the POM model for replacing:

   <build>
      <sourceDirectory>src/main/java</sourceDirectory>
   </build>

By something like below (the addition of "generated/main/java" is what build-helper-maven-plugin is used for):

   <build>
      <sources>
        <source>src/main/java</source>
        <source>generated/main/java</source>
      <sources>
   </build>

Additional attributes (release version, module name) may be added later, but I would like to avoid this debate for now. But if we add a "type" attribute now, the above proposal can actually replace all the following (from the current POM model):

   <build>
      <sourceDirectory>src/main/java</sourceDirectory>
      <scriptSourceDirectory>src/main/scripts</scriptSourceDirectory>
      <testSourceDirectory>src/test/java</testSourceDirectory>
      <resources>
        <resource>
          <directory>src/main/resources</directory>
        </resource>
      </resources>
      <testResources>
        <testResource>
          <directory>src/test/resources</directory>
        </testResource>
      </testResources>
   </build>

By a more uniform pattern like below. Keep in mind that the core of this proposal is that all <source> elements are repeatable, not only the <resource> or <testResource> ones:

   <sources>
      <source  type="main">src/main/java</source>
      <source  type="script">src/main/scripts</source>
      <source  type="test">src/test/java</source>
      <source  type="resource">src/main/resources</source>
      <source  type="test-resource">src/test/resources</source>
   <sources>

    Martin

Reply via email to