Pergunta

Atualmente, todo o meu ciclo de trabalho é:

  1. Editar foo.scala
  2. fsc foo.scala && scala -cp. FOOMAIN

Mas meu projeto está ficando maior e eu gostaria de dividir arquivos, fazer testes de unidade, etc. Mas sou preguiçoso demais para ler a documentação do SBT e fazer o que precisa ser feito para obter o "makefile" de um SBT. Da mesma forma, para testes de unidade (existem tantas estruturas, que escolher?)

O que tornaria o meu dia é um projeto fictício simples com um projeto de unidade fictícia usando o SBT.

Você sabe se isso existe?

Foi útil?

Solução

Bem, você deve use sbt. Você não precisa escrever nada: ele criará tudo o que precisa para um projeto básico e só perguntará qual é o nome do projeto e qual versão do Scala você estará usando.

Depois disso, basta colocar os arquivos nos lugares corretos. Procure o layout do diretório, embora a resposta curta seja os principais arquivos de origem em src/main/scala e teste de arquivos de origem em src/test/scala. Você vai tem que criar um "makefile" muito pequeno para obter uma biblioteca de testes.

Outras dicas

Resposta atualizada (2016)

Hoje em dia, você tem o Giter8 Projeto, combinado com a versão do lançador do SBT 0.13.13 ou superior, e seu comando new.

sbt new ... 

Resposta original (2010)

Sim, esse projeto de modelo, com base no SBT, completo com testes de Scala, existe:

Vejo Comece com Scala, SBT e Eclipse e os seus Projeto de modelo.

  • 1) Clone ou Download/Extract Fonte do SBT-Console-Template
    % git clone git://github.com/mgutz/sbt-console-template.git  your-project
  • 2) do console SBT
       # update dependencies
       > update

       # run project
       > run

       # test project continuously
       > ~test

       # eclipsify
       > eclipse

(A parte "Eclipse" é opcional e só aqui se você quiser gerar um projeto Scala Eclipse a partir do seu projeto SBT)


Outro projeto de modelo Scala:

Construa um aplicativo misto de scala 2.8/java do zero com maven

Ele usa o seguinte modelo (aqui está o Arquivo Zip com o projeto completo Maven-Scala):

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

E o seguinte 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>

Você pode executá -lo com:

mvn scala:run

E no final da saída, você deve 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] ------------------------------------------------------------------------

Dentro Blog de Fanf, François Armand presentes:

Maven2 Bootstrap Pom.xml para Scala com SLF4J e sem complosos

<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>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top