Ho creato un modello simile che è possibile studiare.
Utilizzando Maven sarà come IDE-agnostico che può. Non dovrai memorizzare alcuna specifica IDE nel tuo VCS, solo il codice sorgente e i file pom. Ogni sviluppatore lancerà il suo IDE e indicherà il migliore e il progetto dovrebbe caricarsi. Verranno create le impostazioni locali, ma dovrebbero essere ignorate quando si esegue il commit su VCS.
Prima di tutto un progetto Maven multi modulo avrà sicuramente un layout molto simile a una soluzione C# con i suoi progetti. La cartella principale con il genitore-pom sarà come la soluzione con le configurazioni condivise e l'ordine di compilazione ecc. Quindi le sottocartelle con i sotto-poms corrisponderanno alle definizioni del progetto con le dipendenze tra altri progetti.
directory layout
+- pom.xml
+- scala
| +- pom.xml
| +- src
| +- main
| +- scala
+- console
| +- pom.xml
| +- src
| +- main
| +- java
+- web
+- pom.xml
+- src
+- main
+- java
+- resources
+- webapp
+- WEB-INF
-- web.xml
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.stackoverflow</groupId>
<artifactId>Q11226363</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>${project.artifactId}-${project.version}</name>
<properties>
<scala.version>2.9.2</scala.version>
</properties>
<modules>
<module>scala</module>
<module>web</module>
<module>console</module>
</modules>
<dependencyManagement>
<dependencies>
<!-- Inter-Module dependencies -->
<dependency>
<groupId>com.stackoverflow</groupId>
<artifactId>Q11226363-scala</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<repositories>
<repository>
<id>scala-tools.org</id>
<name>Scala Tools Maven2 Repository</name>
<url>http://scala-tools.org/repo-releases</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>scala-tools.org</id>
<name>Scala Tools Maven2 Repository</name>
<url>http://scala-tools.org/repo-releases</url>
</pluginRepository>
</pluginRepositories>
</project>
scala/pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.stackoverflow</groupId>
<artifactId>Q11226363</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>Q11226363-scala</artifactId>
<name>${project.artifactId}-${project.version}</name>
<dependencies>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
</dependency>
</dependencies>
<build>
<sourceDirectory>src/main/scala</sourceDirectory>
<plugins>
<plugin>
<groupId>org.scala-tools</groupId>
<artifactId>maven-scala-plugin</artifactId>
<executions>
<execution>
<id>compile</id>
<goals>
<goal>compile</goal>
</goals>
<phase>compile</phase>
</execution>
<execution>
<id>test-compile</id>
<goals>
<goal>testCompile</goal>
</goals>
<phase>test-compile</phase>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
console/pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.stackoverflow</groupId>
<artifactId>Q11226363</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>Q11226363-console</artifactId>
<name>${project.artifactId}-${project.version}</name>
<dependencies>
<dependency>
<groupId>com.stackoverflow</groupId>
<artifactId>Q11226363-scala</artifactId>
</dependency>
</dependencies>
</project>
web/pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.stackoverflow</groupId>
<artifactId>Q11226363</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<artifactId>Q11226363-web</artifactId>
<packaging>war</packaging>
<name>${project.artifactId}-${project.version}</name>
<dependencies>
<dependency>
<groupId>com.stackoverflow</groupId>
<artifactId>Q11226363-scala</artifactId>
</dependency>
</dependencies>
<build>
<finalName>webapp</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</build>
</project>
scala/src/main/scala/com/stackoverflow/Q11226363/ScalaApp.scala
/**
* @author maba, 2012-06-28
*/
package com.stackoverflow.Q11226363
class ScalaApp {
def helloScala():String = "Hello from Scala!"
}
console/src/main/java/com/stackoverflow/Q11226363/JavaApp.java
package com.stackoverflow.Q11226363;
/**
* @author maba, 2012-06-28
*/
public class JavaApp {
public static void main(String[] args) {
ScalaApp scalaApp = new ScalaApp();
System.out.println("Scala says: " + scalaApp.helloScala());
}
}
che è stato testato da me. Naturalmente ci possono essere dei miglioramenti ai file pom e alle dipendenze, ma è un buon inizio.
Se si guarda nello web/target
, troverete il numero webapp.war
che includerà le dipendenze necessarie.
Ovviamente è possibile dividere tutti questi moduli e costruirli separatamente e avere ancora delle dipendenze tra di loro, ma come ho detto è un buon punto di partenza.
Che sorprendentemente buona risposta alla domanda. Grazie! –
@PeteMontgomery Bene grazie! Sono felice di poterti assistere. – maba