public void updateConfiguration(IProject project, MavenProject mavenProject, EarPluginConfiguration plugin,
boolean useBuildDirectory, IProgressMonitor monitor) throws CoreException {
IMavenProjectRegistry projectManager = MavenPlugin.getMavenProjectRegistry();
IMavenProjectFacade mavenFacade = projectManager.getProject(project);
IMavenMarkerManager markerManager = MavenPluginActivator.getDefault().getMavenMarkerManager();
IFile pomResource = project.getFile(IMavenConstants.POM_FILE_NAME);
markerManager.deleteMarkers(pomResource, MavenWtpConstants.WTP_MARKER_GENERATE_APPLICATIONXML_ERROR);
//Create a maven request + session
IMaven maven = MavenPlugin.getMaven();
MavenExecutionRequest request = projectManager.createExecutionRequest(pomResource, mavenFacade.getResolverConfiguration(), monitor);
MavenSession session = maven.createSession(request, mavenProject);
MavenExecutionPlan executionPlan = maven.calculateExecutionPlan(session, mavenProject, Collections.singletonList("ear:generate-application-xml"), true, monitor); //$NON-NLS-1$
MojoExecution genConfigMojo = getExecution(executionPlan, "maven-ear-plugin", "generate-application-xml"); //$NON-NLS-1$ //$NON-NLS-2$
if(genConfigMojo == null) {
//TODO Better error management
return;
}
//Let's force the generated config files location
Xpp3Dom configuration = genConfigMojo.getConfiguration();
if(configuration == null) {
configuration = new Xpp3Dom("configuration"); //$NON-NLS-1$
genConfigMojo.setConfiguration(configuration);
}
File tempDirectory;
try {
tempDirectory = getTempDirectory();
} catch(IOException ex) {
IStatus status = new Status(IStatus.ERROR, MavenWtpPlugin.ID, ex.getLocalizedMessage(), ex);
throw new CoreException(status);
}
// Some old maven-ear-plugin have a dependency on an old plexus-util version that prevents
// using workdirectory == generatedDescriptorLocation, so we keep them separated
File generatedDescriptorLocation = new File(tempDirectory, "generatedDescriptorLocation"); //$NON-NLS-1$
File workDirectory = new File(tempDirectory, "workDirectory"); //$NON-NLS-1$
Xpp3Dom workDirectoryDom = configuration.getChild("workDirectory"); //$NON-NLS-1$
if(workDirectoryDom == null) {
workDirectoryDom = new Xpp3Dom("workDirectory"); //$NON-NLS-1$
configuration.addChild(workDirectoryDom);
}
workDirectoryDom.setValue(workDirectory.getAbsolutePath());
Xpp3Dom genDescriptorLocationDom = configuration.getChild("generatedDescriptorLocation"); //$NON-NLS-1$
if(genDescriptorLocationDom == null) {
genDescriptorLocationDom = new Xpp3Dom("generatedDescriptorLocation"); //$NON-NLS-1$
configuration.addChild(genDescriptorLocationDom);
}
genDescriptorLocationDom.setValue(generatedDescriptorLocation.getAbsolutePath());
// Fix for http://jira.codehaus.org/browse/MEAR-116?focusedCommentId=232316&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#action_232316
// affecting maven-ear-plugin version < 2.4.3
if(!VALID_EAR_PLUGIN_RANGE.containsVersion(new DefaultArtifactVersion(genConfigMojo.getVersion()))) {
overrideModules(configuration, plugin.getAllEarModules());
}
//Execute our modified mojo
maven.execute(session, genConfigMojo, monitor);
if (session.getResult().hasExceptions()){
markerManager.addMarkers(mavenFacade.getPom(), MavenWtpConstants.WTP_MARKER_GENERATE_APPLICATIONXML_ERROR, session.getResult());
}
//Copy generated files to their final location
File[] files = generatedDescriptorLocation.listFiles();