Appunti per operare programmaticamente su un progetto Maven, sfruttando le classi contenute in Spring Roo.
Ottenuto Spring Roo installare le librerie che servono dalla directory /dist/.
mvn install:install-file -Dfile=spring-roo-metadata-1.0.0.M1.jar \ -DgroupId=org.springframework.roo -DartifactId=spring-roo-metadata \ -Dversion=1.0.0.M1 -Dpackaging=jar -DgeneratePom=true mvn install:install-file -Dfile=spring-roo-support-1.0.0.M1.jar \ -DgroupId=org.springframework.roo -DartifactId=spring-roo-support \ -Dversion=1.0.0.M1 -Dpackaging=jar -DgeneratePom=true mvn install:install-file -Dfile=spring-roo-process-manager-1.0.0.M1.jar \ -DgroupId=org.springframework.roo -DartifactId=spring-roo-process-manager \ -Dversion=1.0.0.M1 -Dpackaging=jar -DgeneratePom=true mvn install:install-file -Dfile=spring-roo-project-1.0.0.M1.jar \ -DgroupId=org.springframework.roo -DartifactId=spring-roo-project \ -Dversion=1.0.0.M1 -Dpackaging=jar -DgeneratePom=true
Aggiungere le necessarie dipendenze al progetto
<dependency> <groupId>org.springframework.roo</groupId> <artifactId>spring-roo-process-manager</artifactId> <version>${roo.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.roo</groupId> <artifactId>spring-roo-project</artifactId> <version>${roo.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.roo</groupId> <artifactId>spring-roo-metadata</artifactId> <version>${roo.version}</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework.roo</groupId> <artifactId>spring-roo-support</artifactId> <version>${roo.version}</version> <scope>provided</scope> </dependency>
Ora è possibile :
Verificare che una dipendenza sia installabile
public boolean isInstallSiteMeshAvailable() { Dependency dependency = new Dependency("opensymphony", "sitemesh", "2.4.2"); ProjectMetadata project = (ProjectMetadata) metadataService.get(ProjectMetadata.getProjectIdentifier()); if (project == null) { return false; } return project.getDependenciesExcludingVersion(dependency).size() == 0; }
Aggiungere la dipendenza
ProjectOperations projectOperations = new ProjectOperations( /* MetadataService */ metadataService, /* ProjectMetadataProvider */ projectMetadataProvider ) projectOperations.dependencyUpdate(/* Dependency */ dependency);
Scrivere il file web.xml
String webXml = pathResolver.getIdentifier(Path.SRC_MAIN_WEBAPP, "WEB-INF/web.xml"); MutableFile mutableWebXml = null; Document webXmlDoc; try { if (fileManager.exists(webXml)) { mutableWebXml = fileManager.updateFile(webXml); webXmlDoc = XmlUtils.getDocumentBuilder().parse(mutableWebXml.getInputStream()); } else { throw new IllegalStateException("Could not acquire " + webXml); } } catch (Exception e) { throw new IllegalStateException(e); } Element root = (Element) webXmlDoc.getFirstChild(); Element filter = webXmlDoc.createElement("filter"); Element filterName = webXmlDoc.createElement("filter-name"); filterName.setTextContent("sitemesh"); Element filterClass = webXmlDoc.createElement("filter-class"); filterClass.setTextContent("com.opensymphony.sitemesh.webapp.SiteMeshFilter"); filter.appendChild(filterName); filter.appendChild(filterClass); Element filterMapping = webXmlDoc.createElement("filter-mapping"); Element urlPattern = webXmlDoc.createElement("url-pattern"); Element filterName2 = webXmlDoc.createElement("filter-name"); filterName2.setTextContent("sitemesh"); urlPattern.setTextContent("/*"); filterMapping.appendChild(filterName2); filterMapping.appendChild(urlPattern); Element listener = XmlUtils.findRequiredElement("//listener", root); Assert.notNull(listener, "Could not find the first listener element in web.xml"); listener.getParentNode().insertBefore(filter, listener); listener.getParentNode().insertBefore(filterMapping, listener); XmlUtils.writeXml(mutableWebXml.getOutputStream(), webXmlDoc);