Operare su progetti Maven usando Spring Roo

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);