maven-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jigar Joshi (JIRA)" <>
Subject [jira] [Updated] (MNG-5523) support actual incremental build
Date Mon, 27 Feb 2017 22:01:45 GMT


Jigar Joshi updated MNG-5523:

I have tested same scenario as mentioned here

and I failed to get compilation failure (i.e. compilation was successful with {{mvn install}}
and {{mvn -pl=projectb -am -amd install}} attached projects.

$ mvn --version
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-14T09:29:23-08:00)
Maven home: /Users/jigar.joshi/tools/apache-maven-3.2.5
Java version: 1.8.0_101, vendor: Oracle Corporation
Java home: /Library/Java/JavaVirtualMachines/jdk1.8.0_101.jdk/Contents/Home/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "mac os x", version: "10.12", arch: "x86_64", family: "mac"

> support actual incremental build
> --------------------------------
>                 Key: MNG-5523
>                 URL:
>             Project: Maven
>          Issue Type: Improvement
>          Components: Bootstrap & Build, Performance
>            Reporter: Jigar Joshi
>         Attachments:
> h2. Background: 
> We have project structure of around 200 project in the maven tree, every single build
takes around 13 minute of time (clean, compile, test install, deploy)
> With current version of maven {{3.1}}, you can skip clean phase and it will do incremental
build, which is not bullet proof incremental build actually
> h2. Problem example
> {code}
> ----------root (module)
> 	    \
> 	    |
> 	    |---foo (jar project)
> 	    |
> 	    |---bar (jar project, it consumes foo as dependency)
> {code}
> before
> {code}
> public class Foo{
> 	public static void sayHello(){
> 		System.out.println("hello from foo");
> 	}
> }
> public class Bar{
> 	public static void main(String arg[]){
> 		Foo.sayHello();
> 	}
> }
> {code}
> I do {{mvn clean install}} from root module, it would go successful, I launch the {{main()}}
method of {{Bar}} now, it will be succesful
> now I modify {{sayHello()}} to
> {code}
> 	public static void sayHello(String name){
> 		System.out.println("hello from foo to " + name);
> 	}
> {code}
> and I execute {{mvn install}} (incremental build) from root module, it will still compile
and execute successfully because it takes previously built artifact for {{Foo}} at compile
phase, now if I attempt to run it in IDE or in a packaged build it will fail with 
> {code}
> Exception in thread "main" java.lang.NoSuchMethodError:
> {code}
> h2. Proposal:
>  - somewhere in pre execution phase, it needs to calculate the modified source and artifacts
and it should be able to detect all the consumers in dependency tree (compile, runtime, test
all scopes) and flag all the artifacts to treat as modified and it should re do build for
>  - all the maven plugins should support incremental build as well
>  - plugin needs to be marked to execute incrementally by adding a {{boolean}} parameter
to {{AbstractMOJO}} to declare that plugin execution needs to be calculated in effective incremental
>  - all plugins which are marked as {{incremental}} needs to take the same approach as
mentioned in first point
>  - also in parallel build when it fans out in multiple threads it should have knowledge
of what plugins to execute effectively
> It would be totally useful to have this feature corrected
> Some other people who wants this as well
>  -
>  -
> *Also See*
>  -
>  -
> Thanks!
> Jigar

This message was sent by Atlassian JIRA

View raw message