63 votes

La construction d'un scala app avec maven (source java mélangés)

J'ai une application dans laquelle je voudrais avoir mélangé Java et Scala source (en fait sa migration d'une application java scala - mais un peu à la fois).

Je peux faire ce travail dans IDEs, très bien, très agréable. Mais je ne suis pas sûr de savoir comment le faire avec maven - scalac pouvez compiler java et scala liés, mais comment puis-je configurer maven pour le module?

Aussi, est-ce que mon scala source ont un dossier différent pour le java?

39voto

Michael Neale Points 7704

À l'aide de l'maven plugin scala, une config comme celle ci-dessous pour un projet qui mêle java et scala source (scala source de cours va dans le /scala répertoire, tel que mentionné par quelqu'un d'autre).

Vous pouvez exécuter mvn compile, test etc... et ce sera comme d'habitude. Très sympa (il sera exécuté scalac première automatiquement).

Pour une grande IDE, Ide, 8 fonctionne très bien: ajouter à la scala brancher, puis ajouter un scala facette, et ensuite ajuster la compilation de réglage pour scala pour exécuter scalac première critique (si vous avez des dépendances circulaires avec scala et java de la source).

<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/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>demo</groupId>
<artifactId>scala-java-app</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>scala-java-app</name>
<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>
<build>
	<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>
                <execution>
                   <phase>process-resources</phase>
                   <goals>
                     <goal>compile</goal>
                   </goals>
                </execution>
			</executions>
		</plugin>
		<plugin>
			<artifactId>maven-compiler-plugin</artifactId>
			<configuration>
				<source>1.5</source>
				<target>1.5</target>
			</configuration>
		</plugin>
	</plugins>	
</build>
<dependencies>
	<dependency>
		<groupId>org.scala-lang</groupId>
		<artifactId>scala-library</artifactId>
		<version>2.7.2</version>
	</dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.1</version>
        <scope>test</scope>
    </dependency>
</dependencies>

12voto

sblundy Points 27163

Ouais, de la scala de la partie a à être dans un module séparé et en src/main/scala répertoire. Maven ce qui concerne mixte source comme ceci comme une hérésie.

Vous activez la scala de compilation par l'importation de la scala plugin maven. Les "usages" de la page comme un bon exemple.

8voto

lindelof Points 9802

Une fois, j'ai posé une question très semblable sur la façon d'inclure les non-code Java dans un projet Maven. L'essentiel de la réponse a été d'avoir en vertu de la src un répertoire différent pour chaque langage de programmation, et de trouver/écriture d'un plugin Maven saurais quoi faire avec chaque. Par exemple:

src/
|-- main
|   |-- bin
|   |-- sh
|   |-- sql
|   |-- scala
|   |-- java
|   `-- resources
|-- site
...

4voto

cetnar Points 6170

Regardez Sonatype Maven livre de recettes Chapitre 3. Scala et Maven

2voto

Guðmundur Bjarni Points 1778

J'ai résolu ce problème il y a quelques temps pour avoir un Maven module écrit en Scala et l'autre en Java. Mais depuis Scala et Java peuvent traverser dépendent l'un de l'autre (Java -> Scala -> Java ou l'inverse), alors c'est quelque chose de très désirable sans multi projets de module.

Il y a des travaux en cours dans la résolution de ce, vous pouvez lire à ce sujet ici et une nouvelle version de maven-scala-plugin sera disponible bientôt.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X