Hi, I have managed to solve my use-case but it is a bit tricky and it calls internal API. Here is the solution:
@SuppressWarnings("restriction") public static IMavenExecutionContext createExecutionContext(final IMavenProjectFacade facade, final IProgressMonitor monitor) throws CoreException { return MavenPluginActivator.getDefault().getMavenProjectManagerImpl() .createExecutionContext(facade.getPom(), facade.getResolverConfiguration()); } public static <V> V executeInContext(final IMavenProjectFacade facade, final Consumer<MavenExecutionRequest> executionRequestModifier, final ICallable<V> callable, final IProgressMonitor monitor) throws CoreException { IMavenExecutionContext executionContext = createExecutionContext(facade, monitor); MavenExecutionRequest executionRequest = executionContext.getExecutionRequest(); return executionContext.execute((context, monitor1) -> { if (executionRequestModifier != null) { executionRequestModifier.accept(executionRequest); } return MavenPlugin.getMaven().createExecutionContext() .execute(facade.getMavenProject(monitor), callable, monitor); }, monitor); } You can execute an M2E ICallable by calling the function *executeInContext*. You can modify the state of the executionRequest in the *executionRequestModifier* parameter (functional interface). I made the solution by analyzing the source code of M2E a lot (I mean days). I noticed that it can be tricked in the following way: - I create an executionContext by calling internal API of M2E but I do not call execute on it - I get the executionRequest from the newly created context - I call execute on the context and inside the execute, I modify the executionRequest (that I got before calling execute) - I create an embedded execution context and call execute on it. The embedded context will use the executionRequest of the parent (that is modified). I have a couple of issues with this solution: - It uses internal API to create pre-configured execution context that has a non-readonly executionRequest. I do not know how long this will work - The trick with the embedded executionContext works. However, I got that solution by knowing what is inside the source code. I do not know if this trick will work in the next versions of M2E I would be really happy if there was a standard and tested API that gives us this functionality. At the moment it is impossible to execute any mojo goal from a plugin with any overridden attribute (e.g.: user properties). Regards, *Balázs **Zsoldos* On Sun, Aug 14, 2016 at 2:44 AM, Balázs Zsoldos <balazs.zsol...@everit.biz> wrote: > Hi, > > I would like to have the following steps in my Eclipse plugin: > > > - Get the dependency tree of a project (done) > - Flatten the dependency tree to a list that can be used to find out > build order (done) > - Iterate through the flattened dependency list and call every "mvn > package" on each project that is in the Eclipse workspace without tests > (done) > - Use the result JAR file of calling "mvn package" for the next > project (how?) > > > When I call *execute(MavenProject, MojoExecution, IProgressMonitor)* > function, how can I override the artifact resolution in the way that I use > a JAR file that was the result of a previous build (mvn package). > > I checked every function of IMavenExecutionContext interface (and the > interfaces it uses) but I could not find a way. Is there a possibility to > override the *RepositorySystemSession *or the *WorkspaceReader* that > belongs to the execution context? > > Thanks and regards, > *Balázs **Zsoldos* > >
_______________________________________________ m2e-users mailing list m2e-users@eclipse.org To change your delivery options, retrieve your password, or unsubscribe from this list, visit https://dev.eclipse.org/mailman/listinfo/m2e-users