2010-05-11 5 views
7

Actuellement, mon cycle complet de travail est:Scala simple projet factice

  1. modifier foo.scala
  2. fsc foo.scala & & scala -cp. FooMain

Mais mon projet devient plus grand et je voudrais partager des fichiers, faire des tests unitaires, etc. Mais je suis trop paresseux pour lire la documentation de SBT et faire tout ce qui doit être fait pour obtenir un SBT de " Makefile ". De même pour les tests unitaires (il y a tellement de frameworks, lequel choisir?)

Ce qui ferait de ma journée un simple projet de mannequin zippé avec des tests unitaires fictifs à l'aide de sbt.

Savez-vous si une telle chose existe?

+0

Juste ajouté un autre modèle pour le projet Scala, cette fois basée uniquement sur Maven. – VonC

+0

Je ne comprends pas: la première partie de ma réponse préconise l'utilisation de sbt, sauf qu'elle est accompagnée d'un projet * template * sbt déjà prêt, avec test. Quel était le problème avec ça? De plus, à titre d'exemple, j'ai ajouté plusieurs projets de modèles Maven. – VonC

+0

Votre réponse et votre projet sont très bons. Mais mon besoin est rencontré juste en utilisant SBT selon le manuel, rien de plus n'est nécessaire car SBT va créer un projet et tester pour moi. –

Répondre

9

Eh bien, vous devrait utiliser SBT. Vous n'avez pas besoin d'écrire quoi que ce soit pour cela: il créera tout ce dont vous avez besoin pour un projet de base, et vous demandera seulement quel est le nom du projet et quelle version de Scala vous utiliserez.

Après cela, il suffit de mettre les fichiers dans les bons endroits. Recherchez la disposition du répertoire, bien que la réponse courte soit les fichiers sources principaux dans src/main/scala et testez les fichiers source dans src/test/scala. Cependant, vous devrez créer un très petit fichier "makefile" pour obtenir une bibliothèque de test.

+1

Bon guide: http://code.google.com/p/simple-build-tool/wiki/Setup –

9

réponse Mise à jour (2016)

Ces jours, vous avez le projet Giter8, combiné avec la version du lanceur du SBT 0.13.13 ou au-dessus, and its command new.

sbt new ... 

réponse originale (2010)

Oui, un tel projet de modèle, basé sur SBT, avec des tests de scala, existe:

voir Get Started With Scala, Sbt And Eclipse et son template project.

  • 1) Clone ou télécharger/source d'extrait de SBT-console-template
 
    % git clone git://github.com/mgutz/sbt-console-template.git your-project 
  • 2) A partir de la console de SBT
 
     # update dependencies 
     > update 

     # run project 
     > run 

     # test project continuously 
     > ~test 

     # eclipsify 
     > eclipse 

(la "Eclipse" la partie est optionnelle, et seulement ici si vous voulez générer un projet Scala eclipse depuis votre projet sbt)


Un autre projet de modèle Scala:

Build a mixed Scala 2.8/Java application from scratch with Maven

Il utilise le modèle suivant (voici le zip file with the full Maven-Scala project):

+-scalajavatut/ 
    +-pom.xml 
    +-src/ 
    | +-main/ 
    | | +-java/ 
    | | | +-de/ 
    | | | +-mackaz/ 
    | | |  +-HelloScala.java 
    | | +-scala/ 
    | | +-de/ 
    | |  +-mackaz/ 
    | |  +-App.scala 
    | +-test/ 
    | +-scala/ 
    |  +-de/ 
    |  +-mackaz/ 
    |   +-AppTest.scala 
    |   +-MySpec.scala 

Et le pom.xml suivant:

<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>de.mackaz</groupId> 
    <artifactId>tutorial1</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <inceptionYear>2008</inceptionYear> 
    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    <scala.version>2.8.0-SNAPSHOT</scala.version> 
    </properties> 

    <repositories> 
    <repository> 
     <id>scala-tools.org</id> 
     <name>Scala-Tools Maven2 Repository</name> 
     <url>http://scala-tools.org/repo-releases</url> 
    </repository> 

    <!-- Scala 2.8 Latest --> 
    <repository> 
     <id>scala-tools.org.snapshots</id> 
     <name>Scala Tools Maven2 Repository</name> 
     <url>http://scala-tools.org/repo-snapshots</url> 
     <snapshots /> 
    </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> 

    <dependencies> 
    <dependency> 
     <groupId>org.scala-lang</groupId> 
     <artifactId>scala-library</artifactId> 
     <version>${scala.version}</version> 
    </dependency> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.4</version> 
     <scope>test</scope> 
    </dependency> 
    <!-- Specs (Behavior Driven Testing through JUnit) --> 
    <dependency> 
    <groupId>org.scala-tools.testing</groupId> 
    <artifactId>specs</artifactId> 
    <version>1.6.1-2.8.0.Beta1-RC1</version> 
    <scope>test</scope> 
    </dependency> 
    </dependencies> 

    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.scala-tools</groupId> 
     <artifactId>maven-scala-plugin</artifactId> 
     <version>2.13.1</version> 
     <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> 
     <configuration> 
      <scalaVersion>${scala.version}</scalaVersion> 
      <launchers> 
      <launcher> 
       <id>myLauncher</id> 
       <mainClass>de.mackaz.App</mainClass> 
      </launcher> 
      </launchers> 
      <args> 
      <arg>-target:jvm-1.5</arg> 
      <!-- to support mix java/scala only --> 
      <arg>-make:transitivenocp</arg> 
      <arg>-dependencyfile</arg> 
      <arg>${project.build.directory}/.scala_dependencies</arg> 
      </args> 
     </configuration> 
     </plugin> 

     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-eclipse-plugin</artifactId> 
     <configuration> 
      <downloadSources>true</downloadSources> 
      <buildcommands> 
      <buildcommand>ch.epfl.lamp.sdt.core.scalabuilder</buildcommand> 
      </buildcommands> 
      <additionalProjectnatures> 
      <projectnature>ch.epfl.lamp.sdt.core.scalanature</projectnature> 
      </additionalProjectnatures> 
      <classpathContainers> 
      <classpathContainer>org.eclipse.jdt.launching.JRE_CONTAINER</classpathContainer> 
      <classpathContainer>ch.epfl.lamp.sdt.launching.SCALA_CONTAINER</classpathContainer> 
      </classpathContainers> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 
    <reporting> 
    <plugins> 
     <plugin> 
     <groupId>org.scala-tools</groupId> 
     <artifactId>maven-scala-plugin</artifactId> 
     <configuration> 
      <scalaVersion>${scala.version}</scalaVersion> 
     </configuration> 
     </plugin> 
    </plugins> 
    </reporting> 
</project> 

Vous pouvez l'exécuter avec:

mvn scala:run 

et à la fin de la sortie, vous devriez voir

[INFO] launcher 'myLauncher' selected => de.mackaz.App 
Hello from Java 
Scala says: Hello from Scala! 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESSFUL 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 7 seconds 
[INFO] Finished at: Wed Mar 24 18:14:22 CET 2010 
[INFO] Final Memory: 14M/33M 
[INFO] ------------------------------------------------------------------------ 

En Fanf's blog, Francois Armand présente:

Maven2 bootstrap pom.xml for Scala with SLF4J and no-commons-logging

<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>org.test</groupId> 
<artifactId>test</artifactId> 
<packaging>jar</packaging> 

<version>0.1-SNAPSHOT</version> 

<properties> 
    <!-- UTF-8 for everyone --> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 

    <!-- Other general properties --> 
    <slf4j-version>1.6.0</slf4j-version> 
    <logback-version>0.9.20</logback-version> 
    <scala-version>2.8.0.RC2</scala-version> 
    <scala-maven-plugin-version>2.13.1</scala-maven-plugin-version> 
    </properties> 

<description> 
    Starting pom 
</description> 

<repositories> 
    <repository> 
    <id>scala-tools.org</id> 
    <name>Scala-tools Maven2 Repository</name> 
    <url>http://scala-tools.org/repo-releases</url> 
    </repository> 
    <repository> 
    <id>scala-snapshots.org</id> 
    <name>Scala-tools Maven2 Repository snapshots</name> 
    <url>http://scala-tools.org/repo-snapshots</url> 
    </repository> 

    <repository> 
    <id>no-commons-logging</id> 
    <name>No-commons-logging Maven Repository</name> 
    <layout>default</layout> 
    <url>http://no-commons-logging.zapto.org/mvn2</url> 
    <snapshots><enabled>false</enabled></snapshots> 
    </repository> 

</repositories> 

<pluginRepositories> 
    <pluginRepository> 
    <id>scala-tools.org</id> 
    <name>Scala-tools Maven2 Repository</name> 
    <url>http://scala-tools.org/repo-releases</url> 
    <snapshots><enabled>false</enabled></snapshots> 
    </pluginRepository> 
    <pluginRepository> 
    <id>scala-snapshots.org</id> 
    <name>Scala-tools Maven2 Repository snapshots</name> 
    <url>http://scala-tools.org/repo-snapshots</url> 
    </pluginRepository> 
</pluginRepositories> 

<build> 
    <sourceDirectory>src/main/scala</sourceDirectory> 
    <testSourceDirectory>src/test/scala</testSourceDirectory> 
    <plugins> 
    <plugin> 
    <groupId>org.scala-tools</groupId> 
    <artifactId>maven-scala-plugin</artifactId> 
    <version>${scala-maven-plugin-version}</version> 
    <executions> 
    <execution> 
     <goals> 
     <goal>compile</goal> 
     <goal>testCompile</goal> 
     </goals> 
    </execution> 
    </executions> 
    <configuration> 
    <args> 
     <arg>-target:jvm-1.5</arg> 
     <arg>-make:transitivenocp</arg> 
     <arg>-dependencyfile</arg> 
     <arg>${project.build.directory}/.scala_dependencies</arg> 
    </args> 
    <jvmArgs> 
     <jvmArg>-client</jvmArg> 
     <jvmArg>-Xmx1G</jvmArg> 
    </jvmArgs> 
    </configuration> 
    </plugin> 
    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>2.1</version> 
    <configuration> 
    <source>1.6</source> 
    </configuration> 
    </plugin> 

    </plugins> 
</build> 

<dependencies> 
    <dependency> 
    <groupId>org.scala-lang</groupId> 
    <artifactId>scala-library</artifactId> 
    <version>${scala-version}</version> 
    </dependency> 
    <dependency> 
    <groupId>joda-time</groupId> 
    <artifactId>joda-time</artifactId> 
    <version>1.6</version> 
    </dependency> 
    <!-- test --> 
    <dependency> 
    <groupId>junit</groupId> 
    <artifactId>junit</artifactId> 
    <version>4.7</version> 
    <scope>test</scope> 
    </dependency> 


    <!-- 
    All the following is related to our will to NOT use Commong-logging 
    --> 
    <!-- use no-commons-logging --> 
    <dependency> 
    <groupId>commons-logging</groupId> 
    <artifactId>commons-logging</artifactId> 
    <version>99.0-does-not-exist</version> 
    </dependency> 
    <!-- no-commons-logging-api, if you need it --> 
    <dependency> 
    <groupId>commons-logging</groupId> 
    <artifactId>commons-logging-api</artifactId> 
    <version>99.0-does-not-exist</version> 
    </dependency> 
    <!-- the slf4j commons-logging replacement --> 
    <dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>jcl-over-slf4j</artifactId> 
    <version>${slf4j-version}</version> 
    </dependency> 
    <!-- the other slf4j jars --> 
    <dependency> 
    <groupId>org.slf4j</groupId> 
    <artifactId>slf4j-api</artifactId> 
    <version>${slf4j-version}</version> 
    </dependency> 
    <!-- using slf4j native backend --> 
    <dependency> 
    <groupId>ch.qos.logback</groupId> 
    <artifactId>logback-core</artifactId> 
    <version>${logback-version}</version> 
    </dependency> 
    <dependency> 
    <groupId>ch.qos.logback</groupId> 
    <artifactId>logback-classic</artifactId> 
    <version>${logback-version}</version> 
    </dependency> 
</dependencies> 
</project> 
+0

Merci. Je pense que ce devrait être: git: //github.com/mgutz/sbt-console-template.git –

+0

@ Łukasz: vrai. J'ai modifié la réponse pour refléter la bonne adresse de repo. – VonC

Questions connexes