2010-05-11 15 views
7

Actualmente mi ciclo de trabajo conjunto es:proyecto simple maniquí Scala

  1. edición foo.scala
  2. fsc foo.scala & & Scala -cp. FooMain

Pero mi proyecto es cada vez más grande y me gustaría dividir archivos, realizar pruebas unitarias, etc. Pero yo soy demasiado perezoso para leer la documentación SBT y hacer lo que hay que hacer para conseguir un SBT " Makefile ". De manera similar para las pruebas unitarias (hay tantos marcos, ¿cuál elegir?)

Lo que haría que mi día fuera un simple proyecto simulado comprimido con pruebas de unidad ficticia usando sbt.

¿Sabes si existe tal cosa?

+0

Acabo de agregar otra plantilla para el proyecto Scala, esta vez solo en Maven. – VonC

+0

No entiendo: la primera parte de mi respuesta sí recomienda el uso de sbt, excepto que viene con un proyecto * template * sbt listo para funcionar, completo con prueba. ¿Qué estuvo mal con eso? Además, para completar, también agregué varios proyectos de plantilla maven. – VonC

+0

Su respuesta y proyecto es muy bueno. Pero mi necesidad se satisface simplemente usando SBT según el manual, no se necesita nada más, ya que SBT creará un proyecto y probará para mí. –

Respuesta

9

Bueno, usted debería utilizar SBT. No es necesario que escriba nada: creará todo lo que necesita para un proyecto básico y solo le preguntará cuál es el nombre del proyecto y qué versión de Scala utilizará.

Después de eso, solo coloque los archivos en los lugares correctos. Busque el diseño del directorio, aunque la respuesta corta son los archivos fuente principales en src/main/scala y los archivos fuente de prueba en src/test/scala. Sin embargo, tendrá crear un "archivo MAKE" muy pequeño para obtener una biblioteca de prueba.

+1

Buena guía: http://code.google.com/p/simple-build-tool/wiki/Setup –

9

respuesta Actualizado (2016)

estos días, usted tiene el proyecto Giter8, combinada con la versión de lanzamiento del SBT 0.13.13 o superior, and its command new.

sbt new ... 

Respuesta original (2010)

Sí, tal proyecto plantilla, basado en SBT, con pruebas Scala, existe:

ver Get Started With Scala, Sbt And Eclipse y su template project.

  • 1) Clone o descargar/fuente extracto de SBT-consola-plantilla
 
    % git clone git://github.com/mgutz/sbt-console-template.git your-project 
  • 2) desde la consola SBT
 
     # update dependencies 
     > update 

     # run project 
     > run 

     # test project continuously 
     > ~test 

     # eclipsify 
     > eclipse 

(el "eclipse" la parte es opcional, y solo aquí si desea generar un proyecto de eclipse de Scala desde su proyecto sbt)


Otro proyecto de plantilla Scala:

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

Se utiliza la siguiente plantilla (en este caso es el 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 

Y la siguiente 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/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> 

Se puede ejecutar con:

mvn scala:run 

y al final de la salida debería ver

[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 presenta:

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

Gracias. Creo que debería ser: git: //github.com/mgutz/sbt-console-template.git –

+0

@ Łukasz: cierto. He enmendado la respuesta para reflejar la dirección correcta de git repo. – VonC

Cuestiones relacionadas