2010-05-11 38 views
7

Hiện nay toàn bộ chu trình công việc của tôi là:Scala dự án đơn giản giả

  1. chỉnh sửa foo.scala
  2. FSC foo.scala & & scala -cp. FooMain

Nhưng dự án của tôi là nhận được lớn hơn và tôi muốn chia nhỏ file, hãy kiểm tra đơn vị, vv Nhưng tôi quá lười biếng để đọc tài liệu hướng dẫn SBT và làm bất cứ điều gì cần phải làm để có được một SBT của " Makefile ". Tương tự như vậy đối với các thử nghiệm đơn vị (có quá nhiều khung để chọn?)

Điều gì sẽ làm cho ngày của tôi là một dự án giả nén đơn giản với một thử nghiệm đơn vị giả sử dụng sbt.

Bạn có biết liệu điều đó có tồn tại không?

+0

Chỉ cần thêm mẫu khác cho dự án Scala, lần này chỉ dựa trên Maven. – VonC

+0

Tôi không hiểu: phần đầu của câu trả lời của tôi ủng hộ việc sử dụng sbt, ngoại trừ nó đi kèm với một dự án * template * sbt đã sẵn sàng để đi, hoàn thành với kiểm tra. Chuyện gì thế? Plus, để hoàn thành vì lợi ích, tôi đã thêm một số dự án mẫu maven là tốt. – VonC

+0

Câu trả lời và dự án của bạn rất tốt. Nhưng nhu cầu của tôi được đáp ứng chỉ bằng cách sử dụng SBT theo hướng dẫn, không có gì nhiều hơn là cần thiết như SBT sẽ tạo ra dự án và thử nghiệm cho tôi. –

Trả lời

9

Vâng, bạn nên sử dụng SBT. Bạn không cần phải viết bất cứ điều gì cho nó: nó sẽ tạo ra mọi thứ bạn cần cho một dự án cơ bản, và chỉ hỏi bạn tên dự án là gì và phiên bản Scala nào bạn sẽ sử dụng.

Sau đó, chỉ cần đặt các tệp vào đúng vị trí. Tra cứu bố cục thư mục, mặc dù câu trả lời ngắn là các tệp nguồn chính trong src/main/scala và kiểm tra tệp nguồn trong src/test/scala. Tuy nhiên, bạn sẽ phải tạo một "makefile" rất nhỏ để có được thư viện thử nghiệm.

+1

Hướng dẫn tốt: http://code.google.com/p/simple-build-tool/wiki/Setup –

9

câu trả lời Cập nhật (2016)

Những ngày này, bạn có dự án Giter8, kết hợp với phiên bản launcher của SBT 0.13.13 trở lên, and its command new.

sbt new ... 

câu trả lời gốc (2010)

Vâng, như một dự án mẫu, dựa trên SBT, hoàn chỉnh với các bài kiểm tra scala, tồn tại:

thấy Get Started With Scala, Sbt And Eclipsetemplate project của nó.

  • 1) Clone HOẶC download/nguồn chiết xuất từ ​​SBT-console-mẫu
 
    % git clone git://github.com/mgutz/sbt-console-template.git your-project 
  • 2) Từ SBT console
 
     # update dependencies 
     > update 

     # run project 
     > run 

     # test project continuously 
     > ~test 

     # eclipsify 
     > eclipse 

(các "Eclipse" một phần là tùy chọn, và chỉ ở đây nếu bạn muốn tạo ra một dự án Eclipse eclipse từ dự án sbt của bạn)


Một Scala mẫu dự án:

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

Nó sử dụng các mẫu sau đây (ở đây là 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 

pom.xml sau:

<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> 

Bạn có thể chạy nó với:

mvn scala:run 

và ở phần cuối của đầu ra bạn sẽ thấy

[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] ------------------------------------------------------------------------ 

Trong Fanf's blog, Francois Armand quà:

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

Cảm ơn bạn. Tôi nghĩ rằng nó phải là: git: //github.com/mgutz/sbt-console-template.git –

+0

@ Łukasz: true. Tôi đã sửa đổi câu trả lời để phản ánh đúng địa chỉ git repo. – VonC

Các vấn đề liên quan