├── .github ├── dependabot.yml ├── deploy_sbt_website_rsa.gpg ├── publish-site.sh └── workflows │ ├── ci.yml │ └── cla.yml ├── .gitignore ├── .java-version ├── .mailmap ├── .node-version ├── .scalafmt.conf ├── DEVELOPING.md ├── LICENSE ├── NOTICE ├── README.md ├── babel.config.js ├── book.toml ├── build.sbt ├── docs ├── getting-started │ ├── 02-sbt-by-example.md │ └── _category_.json ├── index.md └── recipe │ └── _category_.json ├── docusaurus.config.js ├── material ├── ryoanji-progress.xcf └── ryoanji.xcf ├── package.json ├── po └── summary │ ├── appendix-glossary.ja.po │ ├── appendix-glossary.zh-cn.po │ ├── appendix-setup-notes.ja.po │ ├── appendix-setup-notes.zh-cn.po │ ├── changes.ja.po │ ├── changes.zh-cn.po │ ├── changes │ ├── migrating-from-sbt-1x.ja.po │ ├── migrating-from-sbt-1x.zh-cn.po │ ├── sbt-20-changes.ja.po │ └── sbt-20-changes.zh-cn.po │ ├── concepts.ja.po │ ├── concepts.zh-cn.po │ ├── concepts │ ├── caching.ja.po │ ├── caching.zh-cn.po │ ├── command.ja.po │ ├── command.zh-cn.po │ ├── cross-building.ja.po │ └── cross-building.zh-cn.po │ ├── getting-started.ja.po │ ├── getting-started.zh-cn.po │ ├── getting-started │ ├── basic-tasks.ja.po │ ├── basic-tasks.zh-cn.po │ ├── build-definition-basics.ja.po │ ├── build-definition-basics.zh-cn.po │ ├── build-layout.ja.po │ ├── build-layout.zh-cn.po │ ├── creating-a-new-build.ja.po │ ├── creating-a-new-build.zh-cn.po │ ├── library-dependency-basics.ja.po │ ├── library-dependency-basics.zh-cn.po │ ├── multi-project-basics.ja.po │ ├── multi-project-basics.zh-cn.po │ ├── sbt-components.ja.po │ ├── sbt-components.zh-cn.po │ ├── sbt-with-ides.ja.po │ ├── sbt-with-ides.zh-cn.po │ ├── why-sbt-exists.ja.po │ └── why-sbt-exists.zh-cn.po │ ├── installing-sbt-runner.ja.po │ ├── installing-sbt-runner.zh-cn.po │ ├── introduction.ja.po │ ├── introduction.zh-cn.po │ ├── recipes.ja.po │ ├── recipes.zh-cn.po │ ├── recipes │ ├── import-to-intellij-idea.ja.po │ ├── import-to-intellij-idea.zh-cn.po │ ├── use-neovim.ja.po │ ├── use-neovim.zh-cn.po │ ├── use-sbt-as-metals-build-server.ja.po │ ├── use-sbt-as-metals-build-server.zh-cn.po │ ├── write-hello-world.ja.po │ └── write-hello-world.zh-cn.po │ ├── reference.ja.po │ ├── reference.zh-cn.po │ ├── reference │ ├── cross-building-setup.ja.po │ ├── cross-building-setup.zh-cn.po │ ├── remote-cache-setup.ja.po │ ├── remote-cache-setup.zh-cn.po │ ├── sbt-update.ja.po │ ├── sbt-update.zh-cn.po │ ├── sbt.ja.po │ └── sbt.zh-cn.po │ ├── sbt-by-example.ja.po │ ├── sbt-by-example.zh-cn.po │ ├── summary.ja.po │ └── summary.zh-cn.po ├── project ├── Docs.scala ├── DocusaurusSitePlugin.scala ├── LowTechSnippletPlugin.scala ├── MdBookSitePlugin.scala ├── Pdf.scala ├── SiteMap.scala ├── Snippet.scala ├── build.properties └── plugins.sbt ├── script ├── build.sh ├── concat.sh ├── demote.scala ├── extractcode.scala ├── extracthowto.scala ├── genpo.sh ├── serve.sh ├── sync.sh └── unifyticks.scala ├── sidebars.js ├── src ├── components │ ├── HomepageFeatures │ │ ├── index.js │ │ └── styles.module.css │ ├── HomepageTestimonials │ │ ├── index.js │ │ └── styles.module.css │ └── HomepageVersions │ │ └── index.js ├── css │ └── custom.css ├── includes │ └── install.sh ├── landing │ └── _template │ │ ├── error.st │ │ ├── landing.st │ │ ├── page.st │ │ └── redirect_learn.st ├── pages │ ├── 404.md │ ├── community.md │ ├── cookie.md │ ├── download.mdx │ ├── index.js │ ├── index.module.css │ ├── learn.mdx │ └── thank-you.md ├── reference │ ├── 00.md │ ├── 01-Faq │ │ └── 00.md │ ├── 01-General-Info │ │ ├── 00.md │ │ ├── 01-Credits.md │ │ ├── 02-Community-Plugins.md │ │ ├── 03-Repository-Rules.md │ │ ├── 04-Bintray-For-Plugins.md │ │ ├── 05-Using-Sonatype.md │ │ ├── 07-Contributing-to-sbt.md │ │ └── 90-Changes │ │ │ ├── 00.md │ │ │ ├── 10-Migrating-from-sbt-0.13.x.md │ │ │ ├── 26-sbt-1.4-Release-Notes.md │ │ │ ├── 27-sbt-1.3-Release-Notes.md │ │ │ ├── 28-sbt-1.2-Release-Notes.md │ │ │ ├── 29-sbt-1.1-Release-Notes.md │ │ │ └── 30-sbt-1.0-Release-Notes.md │ ├── 02-DetailTopics │ │ ├── 00.md │ │ ├── 01-Using-sbt │ │ │ ├── 00.md │ │ │ ├── 02-Console-Project.md │ │ │ ├── 04-Inspecting-Settings.md │ │ │ ├── 05-Triggered-Execution.md │ │ │ ├── 06-Scripts.md │ │ │ ├── 07-sbt-server.md │ │ │ └── 50-Incremental-Recompilation.md │ │ ├── 02-Configuration │ │ │ ├── 00.md │ │ │ ├── 01-Classpaths.md │ │ │ ├── 02-Compiler-Plugins.md │ │ │ ├── 03-Configuring-Scala.md │ │ │ ├── 04-Forking.md │ │ │ ├── 05-Global-Settings.md │ │ │ ├── 06-Java-Sources.md │ │ │ ├── 07-Mapping-Files.md │ │ │ ├── 08-Local-Scala.md │ │ │ ├── 09-Macro-Projects.md │ │ │ ├── 10-Paths.md │ │ │ ├── 11-Parallel-Execution.md │ │ │ ├── 12-Process.md │ │ │ ├── 14-Testing.md │ │ │ ├── 15-In-Process-Classloaders.md │ │ │ ├── 16-Globs.md │ │ │ └── 17-Remote-Caching.md │ │ ├── 03-Dependency-Management │ │ │ ├── 00.md │ │ │ ├── 01-Artifacts.md │ │ │ ├── 02-Dependency-Management-Flow.md │ │ │ ├── 04-Proxy-Repositories.md │ │ │ ├── 05-Publishing.md │ │ │ ├── 06-Resolvers.md │ │ │ ├── 07-Update-Report.md │ │ │ └── 08-Cached-Resolution.md │ │ ├── 04-Tasks-and-Commands │ │ │ ├── 00.md │ │ │ ├── 01-Tasks.md │ │ │ ├── 01a-Caching.md │ │ │ ├── 02-Input-Tasks.md │ │ │ ├── 03-Commands.md │ │ │ ├── 04-Parsing-Input.md │ │ │ ├── 05-Build-State.md │ │ │ └── 06-Task-Inputs.md │ │ └── 05-Plugins-and-Best-Practices │ │ │ ├── 00.md │ │ │ ├── 01-Best-Practices.md │ │ │ ├── 02-Plugins.md │ │ │ ├── 03-Plugins-Best-Practices.md │ │ │ ├── 04-GitHub-Actions-with-sbt.md │ │ │ ├── 04-Travis-CI-with-sbt.md │ │ │ ├── 05-Testing-sbt-plugins.md │ │ │ ├── 06-sbt-new-and-Templates.md │ │ │ └── 07-Cross-Build-Plugins.md │ ├── 04-Howto │ │ ├── 00.md │ │ ├── 01-Howto-Classpaths.md │ │ ├── 02-Howto-Customizing-Paths.md │ │ ├── 03-Howto-Generating-Files.md │ │ ├── 04-Howto-Inspect-the-Build.md │ │ ├── 05-Howto-Interactive-Mode.md │ │ ├── 06-Howto-Logging.md │ │ ├── 07-Howto-Project-Metadata.md │ │ ├── 08-Howto-Package.md │ │ ├── 09-Howto-Running-Commands.md │ │ ├── 10-Howto-Scala.md │ │ ├── 11-Howto-Scaladoc.md │ │ ├── 13-Howto-Custom-Tasks.md │ │ ├── 14-How-Startup.md │ │ ├── 15-Howto-Track-File-Inputs-and-Outputs.md │ │ ├── 16-Howto-Troubleshoot-Memory-Issues.md │ │ ├── 20-Howto-Sequencing │ │ │ ├── 00.md │ │ │ ├── 01-Howto-Sequential-Task.md │ │ │ ├── 02-Howto-Dynamic-Task.md │ │ │ ├── 03-Howto-After-Input-Task.md │ │ │ ├── 04-Howto-Dynamic-Input-Task.md │ │ │ └── 05-Howto-Sequence-using-Commands.md │ │ ├── 30-Howto-Custom-Dependency-Configuration.md │ │ └── 90-Examples │ │ │ ├── 00.md │ │ │ ├── 01-Basic-Def-Examples.md │ │ │ ├── 02-Scala-Files-Example.md │ │ │ ├── 03-Advanced-Configurations-Example.md │ │ │ └── 04-Advanced-Command-Example.md │ ├── 90-Developers-Guide │ │ ├── 00.md │ │ ├── 01-Modularization │ │ │ ├── 00.md │ │ │ └── 01-Module-Summary.md │ │ ├── 02-Coding-Guideline │ │ │ └── 00.md │ │ ├── 06-Datatype │ │ │ └── 00.md │ │ ├── 08-Compiler-Interface │ │ │ ├── 00.md │ │ │ └── 01-Version-Specific-Sources.md │ │ ├── 09-Launcher │ │ │ ├── 00.md │ │ │ ├── 01-Launcher-Getting-Started.md │ │ │ ├── 02-Launcher-Architecture.md │ │ │ └── 03-Launcher-Configuration.md │ │ └── 10-DevGuide-Notes │ │ │ ├── 00.md │ │ │ ├── 01-Core-Principles.md │ │ │ ├── 02-Settings-Core.md │ │ │ ├── 03-Setting-Initialization.md │ │ │ └── 05-Command-Line-Applications.md │ ├── CNAME │ ├── README.md │ ├── SUMMARY.md │ ├── Setup.md │ ├── _robots.txt │ ├── _sphinx │ │ ├── exts │ │ │ ├── codeliteral.py │ │ │ ├── howto.py │ │ │ ├── key.py │ │ │ └── srcref.py │ │ └── themes │ │ │ └── sbt │ │ │ ├── layout.html │ │ │ ├── static │ │ │ ├── base.css │ │ │ ├── dark-blue-bg-main.jpg │ │ │ ├── dark-blue-bg.png │ │ │ ├── docs.css │ │ │ ├── set-versions.js │ │ │ ├── style.css │ │ │ └── syntax.css │ │ │ └── theme.conf │ ├── appendix │ │ ├── glossary.md │ │ └── setup-notes.md │ ├── build.sbt │ ├── changes │ │ ├── index.md │ │ ├── migrating-from-sbt-1.x.md │ │ └── sbt-2.0-change-summary.md │ ├── concepts │ │ ├── caching.md │ │ ├── command.md │ │ ├── cross-building.md │ │ ├── index.md │ │ └── sbt-query.md │ ├── conf.py │ ├── custom-202409.css │ ├── custom-202410.css │ ├── es │ │ ├── 00-Getting-Started │ │ │ ├── 00.md │ │ │ ├── 01-Setup │ │ │ │ ├── 00.md │ │ │ │ ├── a.md │ │ │ │ ├── b.md │ │ │ │ └── c.md │ │ │ ├── 02-sbt-by-example.md │ │ │ ├── 03-Directories.md │ │ │ ├── 04-Running.md │ │ │ ├── 05-Basic-Def.md │ │ │ ├── 05B-Multi-Project.md │ │ │ ├── 06-Task-Graph.md │ │ │ ├── 07A-Scopes.md │ │ │ ├── 07B-Appending-Values.md │ │ │ ├── 07C-Scope-Delegation.md │ │ │ ├── 08-Library-Dependencies.md │ │ │ ├── 10-Using-Plugins.md │ │ │ ├── 11-Custom-Settings.md │ │ │ ├── 12-Organizing-Build.md │ │ │ └── 13-Summary.md │ │ ├── 00.md │ │ └── layouts │ │ │ ├── footer.md │ │ │ └── header.md │ ├── favicon.ico │ ├── files │ │ ├── act.svg │ │ ├── bintray-include-my-package.png │ │ ├── bintray-include-package-form.png │ │ ├── bintray-link-plugin-search.png │ │ ├── bintray-new-repo-dialog.png │ │ ├── bintray-new-repo-link.png │ │ ├── bintray-org-member-link-button.png │ │ ├── bintray-org-member-link-dialog.png │ │ ├── bintray-repo-link.png │ │ ├── bintray-signup.png │ │ ├── cached-resolution.png │ │ ├── classloaders.png │ │ ├── command.svg │ │ ├── command2.svg │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ ├── favicon-96x96.png │ │ ├── github-logo-teal.svg │ │ ├── github-logo.png │ │ ├── intellij1.png │ │ ├── intellij10.png │ │ ├── intellij11.png │ │ ├── intellij12.png │ │ ├── intellij2.png │ │ ├── intellij3.png │ │ ├── intellij4.png │ │ ├── intellij5.png │ │ ├── intellij6.png │ │ ├── intellij7.png │ │ ├── intellij8.png │ │ ├── intellij9.png │ │ ├── lightbend-icon-reverse.svg │ │ ├── lightbend-icon_reverse.png │ │ ├── lightbend-reverse.svg │ │ ├── lightbend_reverse.png │ │ ├── metals-completion.png │ │ ├── metals-switch-build-server.png │ │ ├── metals0.png │ │ ├── metals2.png │ │ ├── metals3.png │ │ ├── metals4.png │ │ ├── metals5.png │ │ ├── metals6.png │ │ ├── module-diagram.png │ │ ├── nvim0.png │ │ ├── nvim1.png │ │ ├── nvim2.png │ │ ├── nvim3.png │ │ ├── nvim4.png │ │ ├── nvim5.png │ │ ├── nvim6.png │ │ ├── nvim7.png │ │ ├── nvim8.png │ │ ├── octicon-pencil.svg │ │ ├── overview-setting-example.png │ │ ├── proxy-cloud-setup.png │ │ ├── proxy-ivy-mvn-setup.png │ │ ├── rgb_color_solid_cube.png │ │ ├── sbt-configurations.png │ │ ├── sbt-logo-100x56.png │ │ ├── sbt-logo-reverse.svg │ │ ├── sbt-logo.svg │ │ ├── setting-expression.png │ │ ├── settings-initialization-load-ordering.png │ │ ├── task-dependency00.png │ │ ├── task-dependency01.png │ │ ├── task-dependency02.png │ │ ├── twitter-logo-teal.svg │ │ ├── twitter-logo-white.png │ │ ├── typesafe_reverse.svg │ │ ├── typesafe_sbt_reverse-pride.png │ │ ├── typesafe_sbt_reverse_png.png │ │ ├── typesafe_sbt_reverse_svg.svg │ │ ├── typesafe_sbt_svg.svg │ │ ├── ubuntu-sources.png │ │ └── ubuntu-synaptic.png │ ├── guide │ │ ├── 01-Setup │ │ │ ├── 00.md │ │ │ ├── a.md │ │ │ ├── b.md │ │ │ └── c.md │ │ ├── 04-Running.md │ │ ├── 05-Basic-Def.md │ │ ├── 05B-Multi-Project.md │ │ ├── 06-Task-Graph.md │ │ ├── 07A-Scopes.md │ │ ├── 07B-Appending-Values.md │ │ ├── 07C-Scope-Delegation.md │ │ ├── 08-Library-Dependencies.md │ │ ├── 10-Using-Plugins.md │ │ ├── 11-Custom-Settings.md │ │ ├── 12-Organizing-Build.md │ │ ├── 13-Summary.md │ │ ├── IDE.md │ │ ├── basic-tasks.md │ │ ├── build-definition-basics.md │ │ ├── build-layout.md │ │ ├── index.md │ │ ├── library-dependency-basics.md │ │ ├── multi-project-basics.md │ │ ├── sbt-components.md │ │ ├── sbt-new.md │ │ └── why-sbt-exists.md │ ├── ja │ │ ├── 00-Getting-Started │ │ │ ├── 00.md │ │ │ ├── 01-Setup │ │ │ │ ├── 00.md │ │ │ │ ├── a.md │ │ │ │ ├── b.md │ │ │ │ └── c.md │ │ │ ├── 02-sbt-by-example.md │ │ │ ├── 03-Directories.md │ │ │ ├── 04-Running.md │ │ │ ├── 04B-IDE.md │ │ │ ├── 05-Basic-Def.md │ │ │ ├── 05B-Multi-Project.md │ │ │ ├── 06-Task-Graph.md │ │ │ ├── 07A-Scopes.md │ │ │ ├── 07B-Appending-Values.md │ │ │ ├── 07C-Scope-Delegation.md │ │ │ ├── 08-Library-Dependencies.md │ │ │ ├── 10-Using-Plugins.md │ │ │ ├── 11-Custom-Settings.md │ │ │ ├── 12-Organizing-Build.md │ │ │ ├── 13-Summary.md │ │ │ └── 14-Bare-Def.md │ │ ├── 00.md │ │ ├── 01-General-Info │ │ │ ├── 00.md │ │ │ └── Changes │ │ │ │ ├── 00.md │ │ │ │ └── 47-sbt-1.0-Release-Notes.md │ │ ├── 02-DetailTopics │ │ │ ├── 00.md │ │ │ └── 05-Plugins-and-Best-Practices │ │ │ │ ├── 00.md │ │ │ │ ├── 01-Best-Practices.md │ │ │ │ └── 05-Testing-sbt-plugins.md │ │ ├── 04-Howto │ │ │ ├── 00.md │ │ │ ├── 03-Howto-Generating-Files.md │ │ │ └── 20-Howto-Sequencing │ │ │ │ ├── 00.md │ │ │ │ ├── 01-Howto-Sequential-Task.md │ │ │ │ ├── 02-Howto-Dynamic-Task.md │ │ │ │ ├── 03-Howto-After-Input-Task.md │ │ │ │ ├── 04-Howto-Dynamic-Input-Task.md │ │ │ │ └── 05-Howto-Sequence-using-Commands.md │ │ └── layouts │ │ │ ├── footer.md │ │ │ └── header.md │ ├── layouts │ │ ├── footer.md │ │ └── header.md │ ├── mdbook-admonish.css │ ├── recipes │ │ ├── hello-world.md │ │ ├── import-to-intellij.md │ │ ├── index.md │ │ ├── use-neovim.md │ │ └── use-sbt-as-metals-build-server.md │ ├── reference │ │ ├── cross-building-setup.md │ │ ├── index.md │ │ ├── remote-cache-setup.md │ │ ├── sbt-run.md │ │ ├── sbt-update.md │ │ └── sbt.md │ ├── sbt-by-example.md │ ├── template.properties │ └── zh-cn │ │ ├── 00-Getting-Started │ │ ├── 00.md │ │ ├── 01-Setup │ │ │ ├── 00.md │ │ │ ├── a.md │ │ │ ├── b.md │ │ │ └── c.md │ │ ├── 02-Hello.md │ │ ├── 03-Directories.md │ │ ├── 04-Running.md │ │ ├── 05-Basic-Def.md │ │ ├── 06-Task-Graph.md │ │ ├── 07A-Scopes.md │ │ ├── 07B-Appending-Values.md │ │ ├── 07C-Scope-Delegation.md │ │ ├── 08-Library-Dependencies.md │ │ ├── 09-Multi-Project.md │ │ ├── 10-Using-Plugins.md │ │ ├── 11-Custom-Settings.md │ │ ├── 12-Organizing-Build.md │ │ └── 13-Summary.md │ │ ├── 00.md │ │ └── layouts │ │ ├── footer.md │ │ └── header.md └── sbt-test │ └── ref │ ├── bare │ ├── build.sbt │ └── test │ ├── basic │ ├── build.sbt │ └── test │ ├── caching-file-function │ ├── README.md │ ├── build.sbt │ └── test │ ├── custom-config │ ├── build.sbt │ ├── project │ │ ├── FuzzPlugin.scala │ │ └── ScalafmtPlugin.scala │ └── test │ ├── example-custom-config │ ├── build.sbt │ └── test │ ├── example-library │ ├── build.sbt │ └── test │ ├── example-name │ ├── build.sbt │ └── test │ ├── example-sub1 │ ├── build.sbt │ └── test │ ├── example-sub2 │ ├── build.sbt │ └── test │ ├── example-sub3 │ ├── build.sbt │ └── test │ ├── example-sub4 │ ├── build.sbt │ └── test │ ├── example-test │ ├── build.sbt │ ├── changes │ │ └── HelloSuite.scala │ ├── src │ │ └── test │ │ │ └── scala │ │ │ └── example │ │ │ └── HelloSuite.scala │ └── test │ ├── example-weather │ ├── build.sbt │ ├── changes │ │ ├── build.sbt │ │ ├── build3.sbt │ │ └── plugins.sbt │ ├── core │ │ └── src │ │ │ └── main │ │ │ └── scala │ │ │ └── example │ │ │ └── core │ │ │ └── Weather.scala │ ├── src │ │ └── main │ │ │ └── scala │ │ │ └── example │ │ │ └── Hello.scala │ └── test │ ├── plugins-hello │ ├── project │ │ └── HelloPlugin.scala │ └── test │ ├── plugins-obfuscate │ ├── build.sbt │ └── test │ ├── scope-delegation │ ├── build.sbt │ ├── pending │ └── x │ │ └── build.sbt │ └── scopes │ ├── build.sbt │ └── test ├── static ├── .nojekyll ├── .well-known │ └── atproto-did ├── assets │ ├── arc.js │ ├── artifactory_black_green.png │ ├── bootstrap-theme.min.css │ ├── bootstrap.min.js │ ├── bootstrap_style.min.css │ ├── community-support.svg │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon-96x96.png │ ├── favicon.ico │ ├── github-logo-teal.svg │ ├── github-logo.png │ ├── github-theme.css │ ├── glyphicons-halflings-regular.svg │ ├── jquery.min.js │ ├── polygon-alter.jpg │ ├── ryoanji-2000x548.jpg │ ├── ryoanji-progress.jpg │ ├── ryoanji.jpg │ ├── sbt-logo-100x56.png │ ├── sbt-logo-reverse.svg │ ├── sbt-logo.svg │ ├── set-versions.js │ ├── stylesheet.css │ ├── twitter-logo-teal.svg │ ├── twitter-logo-white.png │ ├── versions.js │ ├── warnOldDocs.js │ └── wrench-1000-center-navy.png ├── img │ ├── bintray-include-my-package.png │ ├── bintray-include-package-form.png │ ├── bintray-link-plugin-search.png │ ├── bintray-new-repo-dialog.png │ ├── bintray-new-repo-link.png │ ├── bintray-org-member-link-button.png │ ├── bintray-org-member-link-dialog.png │ ├── bintray-repo-link.png │ ├── bintray-signup.png │ ├── cached-resolution.png │ ├── classloaders.png │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── favicon-96x96.png │ ├── github-logo-teal.svg │ ├── github-logo.png │ ├── intellij1.png │ ├── intellij10.png │ ├── intellij11.png │ ├── intellij12.png │ ├── intellij2.png │ ├── intellij3.png │ ├── intellij4.png │ ├── intellij5.png │ ├── intellij6.png │ ├── intellij7.png │ ├── intellij8.png │ ├── intellij9.png │ ├── lightbend-icon-reverse.svg │ ├── lightbend-icon_reverse.png │ ├── lightbend-reverse.svg │ ├── lightbend_reverse.png │ ├── metals-completion.png │ ├── metals-switch-build-server.png │ ├── metals0.png │ ├── metals2.png │ ├── metals3.png │ ├── metals4.png │ ├── metals5.png │ ├── metals6.png │ ├── module-diagram.png │ ├── nvim0.png │ ├── nvim1.png │ ├── nvim2.png │ ├── nvim3.png │ ├── nvim4.png │ ├── nvim5.png │ ├── nvim6.png │ ├── nvim7.png │ ├── nvim8.png │ ├── octicon-pencil.svg │ ├── overview-setting-example.png │ ├── proxy-cloud-setup.png │ ├── proxy-ivy-mvn-setup.png │ ├── rgb_color_solid_cube.png │ ├── sbt-configurations.png │ ├── sbt-logo-100x56.png │ ├── sbt-logo-reverse.svg │ ├── sbt-logo.svg │ ├── setting-expression.png │ ├── settings-initialization-load-ordering.png │ ├── task-dependency00.png │ ├── task-dependency01.png │ ├── task-dependency02.png │ ├── twitter-logo-teal.svg │ ├── twitter-logo-white.png │ ├── typesafe_reverse.svg │ ├── typesafe_sbt_reverse-pride.png │ ├── typesafe_sbt_reverse_png.png │ ├── typesafe_sbt_reverse_svg.svg │ ├── typesafe_sbt_svg.svg │ ├── ubuntu-sources.png │ └── ubuntu-synaptic.png └── sbt-rpm.repo ├── theme ├── fonts │ ├── Inconsolata[wdth,wght].ttf │ ├── LinBiolinum_R.otf │ ├── LinBiolinum_RB.otf │ ├── LinBiolinum_RI.otf │ ├── Lora-Italic[wght].ttf │ ├── Lora[wght].ttf │ ├── NotoSerifCJK-wght-400-900.ttf.ttc │ └── fonts.css ├── highlight.css ├── index.hbs └── language-picker.css ├── variables.js └── yarn.lock /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: "github-actions" 4 | directory: "/" 5 | schedule: 6 | interval: "weekly" 7 | -------------------------------------------------------------------------------- /.github/deploy_sbt_website_rsa.gpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/.github/deploy_sbt_website_rsa.gpg -------------------------------------------------------------------------------- /.github/publish-site.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -ex 2 | 3 | mkdir -p $HOME/.ssh/ 4 | echo -e "Host github.com\n\tStrictHostKeyChecking no\nIdentityFile ~/.ssh/deploy_rsa\n" >> ~/.ssh/config 5 | 6 | gpg --quiet --batch --yes --decrypt --passphrase="$DEPLOY_KEY_PASSPHRASE" \ 7 | --output .github/deploy_rsa .github/deploy_sbt_website_rsa.gpg 8 | chmod 600 .github/deploy_rsa 9 | cp .github/deploy_rsa $HOME/.ssh/ 10 | sbt -v -Dsbt.website.detect_pdf ghpagesPushSite 11 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | on: 3 | pull_request: 4 | push: 5 | 6 | jobs: 7 | test: 8 | runs-on: ubuntu-latest 9 | env: 10 | JVM_OPTS: -Dfile.encoding=UTF-8 -Xmx1G -Xms1G -server -XX:ReservedCodeCacheSize=128M 11 | JAVA_OPTS: -Dfile.encoding=UTF-8 -Xmx1G -Xms1G -server -XX:ReservedCodeCacheSize=128M 12 | steps: 13 | - name: Checkout 14 | uses: actions/checkout@v4 15 | - name: Setup 16 | uses: actions/setup-java@v4 17 | with: 18 | distribution: 'adopt' 19 | java-version: '11' 20 | cache: 'sbt' 21 | - name: Setup sbt 22 | uses: sbt/setup-sbt@v1 23 | - name: Setup node 24 | uses: actions/setup-node@v4 25 | with: 26 | node-version: 22 27 | - name: Setup Rust 28 | uses: actions-rust-lang/setup-rust-toolchain@v1 29 | - name: Install mdbook 30 | run: | 31 | cargo install mdbook --no-default-features --features search --vers "^0.4" --locked 32 | cargo install mdbook-variables --vers "^0.2" --locked 33 | cargo install mdbook-admonish --vers "^1" --locked 34 | cargo install mdbook-i18n-helpers --locked 35 | export PATH="$PATH:$HOME/.cargo/bin" 36 | mdbook --version 37 | 38 | - name: Build and test 39 | run: | 40 | sbt -v scalafmtSbtCheck scalafmtCheckAll makeSite 41 | 42 | # https://docs.github.com/en/free-pro-team@latest/actions/reference/encrypted-secrets 43 | - name: Deploy to GH Pages 44 | if: ${{ github.event_name == 'push' && github.repository == 'sbt/website' && (github.ref == 'refs/heads/develop' || github.ref == 'refs/heads/1.x' || github.ref == 'refs/heads/1.x-beta') }} 45 | run: .github/publish-site.sh 46 | env: 47 | DEPLOY_KEY_PASSPHRASE: ${{ secrets.DEPLOY_KEY_PASSPHRASE }} 48 | -------------------------------------------------------------------------------- /.github/workflows/cla.yml: -------------------------------------------------------------------------------- 1 | name: "Check Scala CLA" 2 | on: 3 | pull_request: 4 | jobs: 5 | cla-check: 6 | runs-on: ubuntu-latest 7 | steps: 8 | - name: Verify CLA 9 | uses: scala/cla-checker@v1 10 | with: 11 | author: ${{ github.event.pull_request.user.login }} 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /project/project 2 | /project/target 3 | /target 4 | .bsp 5 | 6 | *.log 7 | 8 | *.zip 9 | 10 | .bloop 11 | .metals 12 | metals.sbt 13 | 14 | .vscode 15 | 16 | # GetText 17 | *.pot 18 | *.po~ 19 | *.mo 20 | po/ja.po 21 | po/zh-cn.po 22 | 23 | # Dependencies 24 | node_modules 25 | 26 | # Production 27 | build 28 | book 29 | 30 | # Generated files 31 | .docusaurus 32 | .cache-loader 33 | 34 | # Misc 35 | .DS_Store 36 | .env.local 37 | .env.development.local 38 | .env.test.local 39 | .env.production.local 40 | 41 | npm-debug.log* 42 | yarn-debug.log* 43 | yarn-error.log* 44 | -------------------------------------------------------------------------------- /.java-version: -------------------------------------------------------------------------------- 1 | 1.8 2 | -------------------------------------------------------------------------------- /.mailmap: -------------------------------------------------------------------------------- 1 | Andrea Peruffo 2 | Ethan Atkins 3 | Ethan Atkins 4 | Eugene Yokota (eed3si9n) 5 | Jorge Vicente Cantero 6 | Kenji Yoshida (xuwei-k) <6b656e6a69@gmail.com> 7 | Yasuhiro Tatsuno 8 | -------------------------------------------------------------------------------- /.node-version: -------------------------------------------------------------------------------- 1 | 22.12.0 2 | -------------------------------------------------------------------------------- /.scalafmt.conf: -------------------------------------------------------------------------------- 1 | version = 2.7.5 2 | 3 | maxColumn = 100 4 | project.git = true 5 | project.excludeFilters = [ /script/, ] 6 | 7 | # https://docs.scala-lang.org/style/scaladoc.html recommends the JavaDoc style. 8 | # scala/scala is written that way too https://github.com/scala/scala/blob/v2.12.2/src/library/scala/Predef.scala 9 | docstrings = JavaDoc 10 | 11 | # This also seems more idiomatic to include whitespace in import x.{ yyy } 12 | spaces.inImportCurlyBraces = true 13 | 14 | trailingCommas = preserve 15 | -------------------------------------------------------------------------------- /NOTICE: -------------------------------------------------------------------------------- 1 | sbt 2 | Copyright 2023 - current, Scala Center at EPFL 3 | Copyright 2011 - 2023, Lightbend, Inc. 4 | Copyright 2008 - 2010, Mark Harrah 5 | Licensed under Apache v2 license (see LICENSE) 6 | -------------------------------------------------------------------------------- /babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: [require.resolve('@docusaurus/core/lib/babel/preset')], 3 | }; 4 | -------------------------------------------------------------------------------- /book.toml: -------------------------------------------------------------------------------- 1 | [book] 2 | authors = ["Eugene Yokota"] 3 | language = "en" 4 | multilingual = false 5 | src = "src/reference" 6 | title = "The Book of sbt" 7 | 8 | [output.html] 9 | theme = "theme" 10 | default-theme = "light" 11 | additional-css = [ 12 | "src/reference/custom-202410.css", 13 | "src/reference/mdbook-admonish.css", 14 | "theme/language-picker.css" 15 | ] 16 | cname = "www.scala-sbt.org" 17 | 18 | [preprocessor.variables] 19 | 20 | [preprocessor.variables.variables] 21 | sbt_version = "2.0.0-M3" 22 | sbt_runner_version = "1.10.0" 23 | scala3_example_version = "3.6.4" 24 | scala3_metabuild_version = "3.6.4" 25 | scala2_13_example_version = "2.13.15" 26 | 27 | [preprocessor.admonish] 28 | command = "mdbook-admonish" 29 | assets_version = "3.0.2" # do not edit: managed by `mdbook-admonish install` 30 | 31 | [preprocessor.gettext] 32 | after = ["links"] 33 | 34 | [build] 35 | extra-watch-dirs = ["po"] 36 | -------------------------------------------------------------------------------- /build.sbt: -------------------------------------------------------------------------------- 1 | import com.typesafe.sbt.site.util.SiteHelpers 2 | import Docs._ 3 | 4 | lazy val tutorialSubDirName = settingKey[String]("subdir name for old tutorial") 5 | lazy val fileEncoding = settingKey[String]("check the file encoding") 6 | lazy val landingSubDirName = settingKey[String]("subdir name for landing") 7 | 8 | ThisBuild / organization := "org.scala-sbt" 9 | ThisBuild / scalafmtOnCompile := true 10 | 11 | lazy val root = (project in file(".")) 12 | .enablePlugins( 13 | (if (isDevelopBranch) Seq(DocusaurusSitePlugin) else Seq()) ++ 14 | Seq(MdBookSitePlugin, ScriptedPlugin, SitePreviewPlugin): _* 15 | ) 16 | .settings( 17 | name := "website", 18 | siteEmail := "eed3si9n" + "@gmail.com", 19 | // Reference 20 | MdBook / siteSubdirName := s"""$targetSbtBinaryVersion/docs/""", 21 | tutorialSubDirName := s"""$targetSbtBinaryVersion/tutorial""", 22 | landingSubDirName := "", 23 | // Redirects 24 | redirectSettings, 25 | // SiteHelpers.addMappingsToSiteDir(Redirect / mappings, Pamflet / siteSubdirName), 26 | SiteHelpers.addMappingsToSiteDir(RedirectLanding / mappings, landingSubDirName), 27 | // redirectTutorialSettings, 28 | // SiteHelpers.addMappingsToSiteDir(RedirectTutorial / mappings, tutorialSubDirName), 29 | // GitHub Pages. See project/Docs.scala 30 | customGhPagesSettings, 31 | fileEncoding := { 32 | sys.props("file.encoding") match { 33 | case "UTF-8" => "UTF-8" 34 | case x => sys.error(s"Unexpected encoding $x") 35 | } 36 | }, 37 | scriptedLaunchOpts := { 38 | scriptedLaunchOpts.value ++ 39 | Seq("-Xmx1024M", "-Dplugin.version=" + version.value) 40 | }, 41 | scriptedBufferLog := false, 42 | isGenerateSiteMap := true 43 | ) 44 | -------------------------------------------------------------------------------- /docs/getting-started/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "Getting Started with sbt", 3 | "position": 2, 4 | "link": { 5 | "type": "generated-index", 6 | "description": "sbt uses a small number of concepts to support flexible and powerful 7 | build definitions. There are not that many concepts, but sbt is not 8 | exactly like other build systems and there are details you will 9 | stumble on if you haven't read the documentation. 10 | 11 | The Getting Started Guide covers the concepts you need to know to 12 | use an sbt build definition." 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /docs/recipe/_category_.json: -------------------------------------------------------------------------------- 1 | { 2 | "label": "sbt cookbook", 3 | "position": 3, 4 | "link": { 5 | "type": "generated-index" 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /material/ryoanji-progress.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/material/ryoanji-progress.xcf -------------------------------------------------------------------------------- /material/ryoanji.xcf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/material/ryoanji.xcf -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "website", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "docusaurus": "docusaurus", 7 | "start": "docusaurus start", 8 | "build": "docusaurus build", 9 | "swizzle": "docusaurus swizzle", 10 | "deploy": "docusaurus deploy", 11 | "clear": "docusaurus clear", 12 | "serve": "docusaurus serve", 13 | "write-translations": "docusaurus write-translations", 14 | "write-heading-ids": "docusaurus write-heading-ids" 15 | }, 16 | "dependencies": { 17 | "@babel/helper-environment-visitor": "^7.24.7", 18 | "@babel/helper-function-name": "^7.24.7", 19 | "@babel/helper-hoist-variables": "^7.24.7", 20 | "@babel/helper-split-export-declaration": "^7.24.7", 21 | "@docusaurus/core": "^3.6.3", 22 | "@docusaurus/plugin-client-redirects": "^3.6.3", 23 | "@docusaurus/preset-classic": "^3.6.3", 24 | "@mdx-js/react": "^3.0.0", 25 | "clsx": "^2.0.0", 26 | "prism-react-renderer": "^2.3.0", 27 | "react": "^18.0.0", 28 | "react-dom": "^18.0.0" 29 | }, 30 | "devDependencies": { 31 | "@docusaurus/module-type-aliases": "^3.6.3", 32 | "@docusaurus/types": "^3.6.3" 33 | }, 34 | "browserslist": { 35 | "production": [ 36 | ">0.5%", 37 | "not dead", 38 | "not op_mini all" 39 | ], 40 | "development": [ 41 | "last 3 chrome version", 42 | "last 3 firefox version", 43 | "last 5 safari version" 44 | ] 45 | }, 46 | "engines": { 47 | "node": ">=18.0" 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /po/summary/changes.ja.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: The Book of sbt\n" 4 | "POT-Creation-Date: 2024-10-30T03:08:34-04:00\n" 5 | "PO-Revision-Date: 2024-10-30T01:14:09-04:00\n" 6 | "Last-Translator: Automatically generated\n" 7 | "Language-Team: none\n" 8 | "Language: ja\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | "Plural-Forms: nplurals=1; plural=0;\n" 13 | 14 | #: src/reference/changes/index.md:1 15 | msgid "Changes" 16 | msgstr "" 17 | -------------------------------------------------------------------------------- /po/summary/changes.zh-cn.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: The Book of sbt\n" 4 | "POT-Creation-Date: 2024-10-30T03:50:36-04:00\n" 5 | "PO-Revision-Date: 2024-10-30T03:50:36-04:00\n" 6 | "Last-Translator: Automatically generated\n" 7 | "Language-Team: none\n" 8 | "MIME-Version: 1.0\n" 9 | "Content-Type: text/plain; charset=UTF-8\n" 10 | "Content-Transfer-Encoding: 8bit\n" 11 | "Language: zh-cn\n" 12 | "Plural-Forms: nplurals=1; plural=0;\n" 13 | 14 | #: src/reference/changes/index.md:1 15 | msgid "Changes" 16 | msgstr "" 17 | -------------------------------------------------------------------------------- /po/summary/concepts.ja.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: The Book of sbt\n" 4 | "POT-Creation-Date: 2024-10-30T03:08:34-04:00\n" 5 | "PO-Revision-Date: 2024-10-30T01:14:09-04:00\n" 6 | "Last-Translator: Automatically generated\n" 7 | "Language-Team: none\n" 8 | "Language: ja\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | "Plural-Forms: nplurals=1; plural=0;\n" 13 | 14 | #: src/reference/concepts/index.md:1 15 | msgid "Concepts" 16 | msgstr "" 17 | -------------------------------------------------------------------------------- /po/summary/concepts.zh-cn.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: The Book of sbt\n" 4 | "POT-Creation-Date: 2024-10-30T03:50:36-04:00\n" 5 | "PO-Revision-Date: 2024-10-30T03:50:36-04:00\n" 6 | "Last-Translator: Automatically generated\n" 7 | "Language-Team: none\n" 8 | "MIME-Version: 1.0\n" 9 | "Content-Type: text/plain; charset=UTF-8\n" 10 | "Content-Transfer-Encoding: 8bit\n" 11 | "Language: zh-cn\n" 12 | "Plural-Forms: nplurals=1; plural=0;\n" 13 | 14 | #: src/reference/concepts/index.md:1 15 | msgid "Concepts" 16 | msgstr "" 17 | -------------------------------------------------------------------------------- /po/summary/getting-started.ja.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: The Book of sbt\n" 4 | "POT-Creation-Date: 2024-10-30T03:08:34-04:00\n" 5 | "PO-Revision-Date: 2024-10-30T01:14:09-04:00\n" 6 | "Last-Translator: Automatically generated\n" 7 | "Language-Team: none\n" 8 | "Language: ja\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | "Plural-Forms: nplurals=1; plural=0;\n" 13 | 14 | #: src/reference/guide/index.md:5 15 | msgid "Getting Started with sbt" 16 | msgstr "" 17 | 18 | #: src/reference/guide/index.md:8 19 | msgid "" 20 | "sbt uses a small number of concepts to support flexible and powerful build " 21 | "definitions. There are not that many concepts, but sbt is not exactly like " 22 | "other build systems and there are details you _will_ stumble on if you " 23 | "haven't read the documentation." 24 | msgstr "" 25 | 26 | #: src/reference/guide/index.md:13 27 | msgid "" 28 | "The Getting Started Guide covers the concepts you need to know to create and " 29 | "maintain an sbt build definition." 30 | msgstr "" 31 | 32 | #: src/reference/guide/index.md:16 33 | msgid "It is _highly recommended_ to read the Getting Started Guide!" 34 | msgstr "" 35 | -------------------------------------------------------------------------------- /po/summary/getting-started.zh-cn.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: The Book of sbt\n" 4 | "POT-Creation-Date: 2024-10-30T03:50:36-04:00\n" 5 | "PO-Revision-Date: 2024-10-30T03:50:36-04:00\n" 6 | "Last-Translator: Automatically generated\n" 7 | "Language-Team: none\n" 8 | "MIME-Version: 1.0\n" 9 | "Content-Type: text/plain; charset=UTF-8\n" 10 | "Content-Transfer-Encoding: 8bit\n" 11 | "Language: zh-cn\n" 12 | "Plural-Forms: nplurals=1; plural=0;\n" 13 | 14 | #: src/reference/guide/index.md:5 15 | msgid "Getting Started with sbt" 16 | msgstr "" 17 | 18 | #: src/reference/guide/index.md:8 19 | msgid "" 20 | "sbt uses a small number of concepts to support flexible and powerful build " 21 | "definitions. There are not that many concepts, but sbt is not exactly like " 22 | "other build systems and there are details you _will_ stumble on if you " 23 | "haven't read the documentation." 24 | msgstr "" 25 | 26 | #: src/reference/guide/index.md:13 27 | msgid "" 28 | "The Getting Started Guide covers the concepts you need to know to create and " 29 | "maintain an sbt build definition." 30 | msgstr "" 31 | 32 | #: src/reference/guide/index.md:16 33 | msgid "It is _highly recommended_ to read the Getting Started Guide!" 34 | msgstr "" 35 | -------------------------------------------------------------------------------- /po/summary/getting-started/multi-project-basics.ja.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: The Book of sbt\n" 4 | "POT-Creation-Date: 2024-10-30T03:08:34-04:00\n" 5 | "PO-Revision-Date: 2024-10-30T01:14:09-04:00\n" 6 | "Last-Translator: Automatically generated\n" 7 | "Language-Team: none\n" 8 | "Language: ja\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | "Plural-Forms: nplurals=1; plural=0;\n" 13 | 14 | #: src/reference/guide/multi-project-basics.md:7 15 | msgid "Multi project basics" 16 | msgstr "" 17 | 18 | #: src/reference/guide/multi-project-basics.md:10 19 | msgid "" 20 | "While a simple program can start out as a single-project build, it's more " 21 | "common for a build to split into smaller, multiple subprojects." 22 | msgstr "" 23 | 24 | #: src/reference/guide/multi-project-basics.md:13 25 | msgid "" 26 | "Each subproject in a build has its own source directories, generates its own " 27 | "JAR file when you run `packageBin`, and in general works like any other " 28 | "project." 29 | msgstr "" 30 | 31 | #: src/reference/guide/multi-project-basics.md:17 32 | msgid "" 33 | "A project is defined by declaring a lazy val of type [Project](../../api/sbt/" 34 | "Project.html). For example, :" 35 | msgstr "" 36 | 37 | #: src/reference/guide/multi-project-basics.md:21 38 | msgid "\"3.3.3\"" 39 | msgstr "" 40 | 41 | #: src/reference/guide/multi-project-basics.md:23 42 | #: src/reference/guide/multi-project-basics.md:25 43 | msgid "\"core\"" 44 | msgstr "" 45 | 46 | #: src/reference/guide/multi-project-basics.md:28 47 | #: src/reference/guide/multi-project-basics.md:31 48 | msgid "\"util\"" 49 | msgstr "" 50 | 51 | #: src/reference/guide/multi-project-basics.md:35 52 | msgid "" 53 | "The name of the val is used as the subproject's ID, which is used to refer " 54 | "to the subproject at the sbt shell." 55 | msgstr "" 56 | -------------------------------------------------------------------------------- /po/summary/getting-started/multi-project-basics.zh-cn.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: The Book of sbt\n" 4 | "POT-Creation-Date: 2024-10-30T03:50:36-04:00\n" 5 | "PO-Revision-Date: 2024-10-30T03:50:36-04:00\n" 6 | "Last-Translator: Automatically generated\n" 7 | "Language-Team: none\n" 8 | "MIME-Version: 1.0\n" 9 | "Content-Type: text/plain; charset=UTF-8\n" 10 | "Content-Transfer-Encoding: 8bit\n" 11 | "Language: zh-cn\n" 12 | "Plural-Forms: nplurals=1; plural=0;\n" 13 | 14 | #: src/reference/guide/multi-project-basics.md:7 15 | msgid "Multi project basics" 16 | msgstr "" 17 | 18 | #: src/reference/guide/multi-project-basics.md:10 19 | msgid "" 20 | "While a simple program can start out as a single-project build, it's more " 21 | "common for a build to split into smaller, multiple subprojects." 22 | msgstr "" 23 | 24 | #: src/reference/guide/multi-project-basics.md:13 25 | msgid "" 26 | "Each subproject in a build has its own source directories, generates its own " 27 | "JAR file when you run `packageBin`, and in general works like any other " 28 | "project." 29 | msgstr "" 30 | 31 | #: src/reference/guide/multi-project-basics.md:17 32 | msgid "" 33 | "A project is defined by declaring a lazy val of type [Project](../../api/sbt/" 34 | "Project.html). For example, :" 35 | msgstr "" 36 | 37 | #: src/reference/guide/multi-project-basics.md:21 38 | msgid "\"3.3.3\"" 39 | msgstr "" 40 | 41 | #: src/reference/guide/multi-project-basics.md:23 42 | #: src/reference/guide/multi-project-basics.md:25 43 | msgid "\"core\"" 44 | msgstr "" 45 | 46 | #: src/reference/guide/multi-project-basics.md:28 47 | #: src/reference/guide/multi-project-basics.md:31 48 | msgid "\"util\"" 49 | msgstr "" 50 | 51 | #: src/reference/guide/multi-project-basics.md:35 52 | msgid "" 53 | "The name of the val is used as the subproject's ID, which is used to refer " 54 | "to the subproject at the sbt shell." 55 | msgstr "" 56 | -------------------------------------------------------------------------------- /po/summary/introduction.ja.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: The Book of sbt\n" 4 | "POT-Creation-Date: 2024-10-30T03:23:28-04:00\n" 5 | "PO-Revision-Date: 2024-10-30 03:36-0400\n" 6 | "Last-Translator: Automatically generated\n" 7 | "Language-Team: none\n" 8 | "Language: ja\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | "Plural-Forms: nplurals=1; plural=0;\n" 13 | "X-Generator: Poedit 3.5\n" 14 | 15 | #: src/reference/index.md:1 16 | msgid "The Book of sbt (Draft)" 17 | msgstr "sbt 記 (草稿)" 18 | 19 | #: src/reference/index.md:4 20 | msgid "" 21 | "This is a draft documentation of sbt 2.x that is yet to be released. While " 22 | "the general concept translates to sbt 1.x, details of both 2.x and this doc " 23 | "are subject to change." 24 | msgstr "" 25 | "これは未だリリースされていない sbt 2.x のドキュメンテーションの草稿だ。一般" 26 | "的な概念は sbt 1.x とも一貫しているが、2.x 系および本稿の詳細は今後変更され" 27 | "る可能性がある。" 28 | 29 | #: src/reference/index.md:8 30 | msgid "![sbt logo](files/sbt-logo.svg)" 31 | msgstr "" 32 | 33 | #: src/reference/index.md:10 34 | msgid "" 35 | "sbt is a simple build tool for Scala and Java. sbt downloads your library " 36 | "dependencies via Coursier, incrementally compiles and tests your projects, " 37 | "integrates with IDEs like IntelliJ and VS Code, makes JAR packages, and " 38 | "publishes them to [Maven Central](https://central.sonatype.com/), JVM " 39 | "community's package registry." 40 | msgstr "" 41 | "sbt は Scala と Java のためのシンプルなビルド・ツールだ。sbt は、Coursier を" 42 | "用いたライブラリ依存性のダウンロード、プロジェクトの差分コンパイルや差分テス" 43 | "ト、IntelliJ や VS Code などの IDE との統合、JAR パッケージの作成、および " 44 | "JVM コミュニティーがパッケージ登録を行う [Maven Central](https://central." 45 | "sonatype.com/) への公開などを行う。" 46 | 47 | #: src/reference/index.md:18 48 | msgid "\"3.3.3\"" 49 | msgstr "" 50 | 51 | #: src/reference/index.md:21 52 | msgid "You just need one line of `build.sbt` to get started with Scala." 53 | msgstr "Scala を始めるには、一行の `build.sbt` を書くだけでいい。" 54 | -------------------------------------------------------------------------------- /po/summary/introduction.zh-cn.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: The Book of sbt\n" 4 | "POT-Creation-Date: 2024-10-30T03:50:36-04:00\n" 5 | "PO-Revision-Date: 2024-10-30 04:53-0400\n" 6 | "Last-Translator: Automatically generated\n" 7 | "Language-Team: none\n" 8 | "Language: zh_CN\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | "Plural-Forms: nplurals=1; plural=0;\n" 13 | "X-Generator: Poedit 3.5\n" 14 | 15 | #: src/reference/index.md:1 16 | msgid "The Book of sbt (Draft)" 17 | msgstr "sbt 记 (草稿)" 18 | 19 | #: src/reference/index.md:4 20 | msgid "" 21 | "This is a draft documentation of sbt 2.x that is yet to be released. While " 22 | "the general concept translates to sbt 1.x, details of both 2.x and this doc " 23 | "are subject to change." 24 | msgstr "" 25 | "这是关于 sbt 2.x 的草稿文档,目前尚未发布。虽然总体概念可以应用到 sbt 1.x," 26 | "但 2.x 及本文档的详细内容可能会有所变动。" 27 | 28 | #: src/reference/index.md:8 29 | msgid "![sbt logo](files/sbt-logo.svg)" 30 | msgstr "" 31 | 32 | #: src/reference/index.md:10 33 | msgid "" 34 | "sbt is a simple build tool for Scala and Java. sbt downloads your library " 35 | "dependencies via Coursier, incrementally compiles and tests your projects, " 36 | "integrates with IDEs like IntelliJ and VS Code, makes JAR packages, and " 37 | "publishes them to [Maven Central](https://central.sonatype.com/), JVM " 38 | "community's package registry." 39 | msgstr "" 40 | "sbt 是一个用于 Scala 和 Java 的简单构建工具。\n" 41 | "sbt 通过 Coursier 下载你的库依赖,\n" 42 | "增量编译和测试项目,\n" 43 | "并与 IntelliJ 和 VS Code 等 IDE 集成,\n" 44 | "打包 JAR 文件并发布到 [Maven Central](https://central.sonatype.com/),\n" 45 | "这是 JVM 社区的包注册表。" 46 | 47 | #: src/reference/index.md:18 48 | msgid "\"3.3.3\"" 49 | msgstr "" 50 | 51 | #: src/reference/index.md:21 52 | msgid "You just need one line of `build.sbt` to get started with Scala." 53 | msgstr "你只需要在 `build.sbt` 中添加一行代码即可开始使用 Scala。" 54 | -------------------------------------------------------------------------------- /po/summary/recipes.ja.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: The Book of sbt\n" 4 | "POT-Creation-Date: 2024-10-30T03:08:34-04:00\n" 5 | "PO-Revision-Date: 2024-10-30T01:14:09-04:00\n" 6 | "Last-Translator: Automatically generated\n" 7 | "Language-Team: none\n" 8 | "Language: ja\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | "Plural-Forms: nplurals=1; plural=0;\n" 13 | 14 | #: src/reference/recipes/index.md:1 15 | msgid "Recipes" 16 | msgstr "" 17 | -------------------------------------------------------------------------------- /po/summary/recipes.zh-cn.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: The Book of sbt\n" 4 | "POT-Creation-Date: 2024-10-30T03:50:36-04:00\n" 5 | "PO-Revision-Date: 2024-10-30T03:50:36-04:00\n" 6 | "Last-Translator: Automatically generated\n" 7 | "Language-Team: none\n" 8 | "MIME-Version: 1.0\n" 9 | "Content-Type: text/plain; charset=UTF-8\n" 10 | "Content-Transfer-Encoding: 8bit\n" 11 | "Language: zh-cn\n" 12 | "Plural-Forms: nplurals=1; plural=0;\n" 13 | 14 | #: src/reference/recipes/index.md:1 15 | msgid "Recipes" 16 | msgstr "" 17 | -------------------------------------------------------------------------------- /po/summary/reference.ja.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: The Book of sbt\n" 4 | "POT-Creation-Date: 2024-10-30T03:08:34-04:00\n" 5 | "PO-Revision-Date: 2024-10-30T01:14:09-04:00\n" 6 | "Last-Translator: Automatically generated\n" 7 | "Language-Team: none\n" 8 | "Language: ja\n" 9 | "MIME-Version: 1.0\n" 10 | "Content-Type: text/plain; charset=UTF-8\n" 11 | "Content-Transfer-Encoding: 8bit\n" 12 | "Plural-Forms: nplurals=1; plural=0;\n" 13 | 14 | #: src/reference/reference/index.md:1 15 | msgid "Reference" 16 | msgstr "" 17 | -------------------------------------------------------------------------------- /po/summary/reference.zh-cn.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: The Book of sbt\n" 4 | "POT-Creation-Date: 2024-10-30T03:50:36-04:00\n" 5 | "PO-Revision-Date: 2024-10-30T03:50:36-04:00\n" 6 | "Last-Translator: Automatically generated\n" 7 | "Language-Team: none\n" 8 | "MIME-Version: 1.0\n" 9 | "Content-Type: text/plain; charset=UTF-8\n" 10 | "Content-Transfer-Encoding: 8bit\n" 11 | "Language: zh-cn\n" 12 | "Plural-Forms: nplurals=1; plural=0;\n" 13 | 14 | #: src/reference/reference/index.md:1 15 | msgid "Reference" 16 | msgstr "" 17 | -------------------------------------------------------------------------------- /project/LowTechSnippletPlugin.scala: -------------------------------------------------------------------------------- 1 | import sbt._ 2 | import Keys._ 3 | 4 | object LowTechSnippetPamfletPlugin extends AutoPlugin { 5 | import com.typesafe.sbt.site.pamflet._ 6 | import PamfletPlugin.autoImport._ 7 | import pamflet._ 8 | 9 | override def requires = PamfletPlugin 10 | override def trigger = noTrigger 11 | override def projectSettings = pamfletSettings 12 | 13 | def pamfletSettings: Seq[Setting[_]] = 14 | Seq( 15 | Pamflet / mappings := generate( 16 | (Pamflet / sourceDirectory).value, 17 | target.value / "lowtech_generated", 18 | (Pamflet / target).value, 19 | (Pamflet / includeFilter).value, 20 | (Pamflet / pamfletFencePlugins).value 21 | ) 22 | ) 23 | 24 | def generate( 25 | input: File, 26 | generated: File, 27 | output: File, 28 | includeFilter: FileFilter, 29 | fencePlugins: Seq[FencePlugin] 30 | ): Seq[(File, String)] = { 31 | // this is the added step 32 | Snippet.processDirectory(input, generated) 33 | val storage = FileStorage(generated, fencePlugins.toList) 34 | Produce(storage.globalized, output) 35 | output ** includeFilter --- output pair Path.relativeTo(output) 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /project/MdBookSitePlugin.scala: -------------------------------------------------------------------------------- 1 | import sbt.* 2 | import Keys.* 3 | import com.typesafe.sbt.site.SitePlugin.autoImport.siteSubdirName 4 | import com.typesafe.sbt.site.SitePlugin 5 | import com.typesafe.sbt.site.util.SiteHelpers 6 | import scala.annotation.nowarn 7 | 8 | object MdBookSitePlugin extends AutoPlugin { 9 | override def requires = SitePlugin 10 | override def trigger = noTrigger 11 | override def projectSettings = mdbookSettings(Compile) 12 | 13 | object autoImport { 14 | val MdBook = config("mdbook") 15 | val mdbookBuild = taskKey[File]("") 16 | val mdbookDirectory = settingKey[File]("Directory where docs are located") 17 | } 18 | import autoImport.* 19 | 20 | @nowarn 21 | def mdbookSettings(config: Configuration): Seq[Setting[_]] = 22 | inConfig(if (config == Compile) MdBook else config)( 23 | List( 24 | siteSubdirName := "", 25 | mdbookDirectory := baseDirectory.value, 26 | config / mdbookBuild := { 27 | import scala.sys.process.* 28 | val dir = mdbookDirectory.value 29 | IO.createDirectory(dir / "book") 30 | Process(List("mdbook", "build", "-d", "book/en"), cwd = dir).! 31 | Process(List("script/build.sh", "ja"), cwd = dir).! 32 | Process(List("script/build.sh", "zh-cn"), cwd = dir).! 33 | val out = dir / "book" 34 | out 35 | }, 36 | ) 37 | ) ++ 38 | SiteHelpers.watchSettings(ThisScope.in(config, mdbookBuild.key)) ++ 39 | SiteHelpers.addMappingsToSiteDir( 40 | (config / mdbookBuild) 41 | .map(SiteHelpers.selectSubpaths(_, AllPassFilter)), 42 | (if (config == Compile) MdBook else config) / siteSubdirName 43 | ) 44 | } 45 | -------------------------------------------------------------------------------- /project/build.properties: -------------------------------------------------------------------------------- 1 | sbt.version=1.11.2 2 | -------------------------------------------------------------------------------- /project/plugins.sbt: -------------------------------------------------------------------------------- 1 | ThisBuild / libraryDependencySchemes += "org.scala-lang.modules" %% "scala-xml" % VersionScheme.Always 2 | addSbtPlugin("com.github.sbt" % "sbt-site" % "1.5.0") 3 | addSbtPlugin("com.github.sbt" % "sbt-ghpages" % "0.7.0") 4 | addSbtPlugin("org.scalameta" % "sbt-scalafmt" % "2.4.2") 5 | -------------------------------------------------------------------------------- /script/build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -o errexit # abort on nonzero exitstatus 4 | set -o nounset # abort on unbound variable 5 | set -o pipefail # don't hide errors within pipes 6 | 7 | locale="" 8 | 9 | show_help() { 10 | echo "Usage: $0 " 11 | } 12 | 13 | if [[ $# -eq 0 ]]; then 14 | show_help 15 | exit 1 16 | fi 17 | 18 | while [[ $# -gt 0 ]]; do 19 | case "$1" in 20 | *) 21 | locale="$1" 22 | shift 23 | ;; 24 | esac 25 | done 26 | 27 | script/concat.sh "$locale" 28 | MDBOOK_BOOK__LANGUAGE="$locale" mdbook build -d "book/$locale" 29 | -------------------------------------------------------------------------------- /script/concat.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -o errexit # abort on nonzero exitstatus 4 | set -o nounset # abort on unbound variable 5 | set -o pipefail # don't hide errors within pipes 6 | 7 | locale="" 8 | 9 | show_help() { 10 | echo "Usage: $0 " 11 | } 12 | 13 | if [[ $# -eq 0 ]]; then 14 | show_help 15 | exit 1 16 | fi 17 | 18 | while [[ $# -gt 0 ]]; do 19 | case "$1" in 20 | *) 21 | locale="$1" 22 | shift 23 | ;; 24 | esac 25 | done 26 | 27 | output_file="po/$locale.po" 28 | cat po/summary/summary.$locale.po > "$output_file" 29 | echo -e "\n" >> "$output_file" 30 | 31 | for file in po/**/*.$locale.po; do 32 | if [[ $file != "po/summary/summary.$locale.po" ]]; then 33 | # Append each file's content to the output file, starting from line 13 34 | tail -n +13 "$file" >> "$output_file" 35 | echo -e "\n" >> "$output_file" 36 | fi 37 | done 38 | -------------------------------------------------------------------------------- /script/extracthowto.scala: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env scalas 2 | 3 | /*** 4 | scalaVersion := "2.10.4" 5 | 6 | resolvers += Resolver.url("typesafe-ivy-repo", url("http://typesafe.artifactoryonline.com/typesafe/releases"))(Resolver.ivyStylePatterns) 7 | 8 | libraryDependencies += "org.scala-sbt" % "io" % "0.13.5-RC2" 9 | */ 10 | 11 | // $ script/extracthowto.scala ../sbt/src/sphinx/Howto/*.rst 12 | 13 | import sbt._, Path._ 14 | import java.io.File 15 | import java.net.{URI, URL} 16 | def file(s: String): File = new File(s) 17 | def uri(s: String): URI = new URI(s) 18 | 19 | /* 20 | A how to tag looks like this: 21 | 22 | .. howto:: 23 | :id: unmanaged-base-directory 24 | :title: Change the default (unmanaged) library directory 25 | :type: setting 26 | 27 | unmanagedBase := baseDirectory.value / "jars" 28 | */ 29 | 30 | def extractId(line: String): String = line.replaceAll(":id:", "").trim 31 | def extractTitle(line: String): String = line.replaceAll(":title:", "").trim 32 | 33 | def processLine(num: Int, line1: String, line2: String, line3: String): Option[String] = 34 | line1 match { 35 | case x if x.trim == ".. howto::" => 36 | Some(s""" 37 | ### ${extractTitle(line3)}""") 38 | case _ => None 39 | } 40 | 41 | def processFile(f: File): Unit = { 42 | if (!f.exists) sys.error(s"$f does not exist!") 43 | 44 | val lines0: Vector[String] = IO.readLines(f).toVector 45 | val size = lines0.size 46 | val xs: Vector[String] = (0 to size - 3).toVector flatMap { i => 47 | processLine(i, lines0(i), lines0(i + 1), lines0(i + 2)) 48 | } 49 | println("-------------------\n") 50 | println(xs.mkString("\n\n")) 51 | println("\n") 52 | // IO.writeLines(f, xs) 53 | // println(s"extracted $f") 54 | } 55 | 56 | args foreach { x => processFile(file(x)) } 57 | -------------------------------------------------------------------------------- /script/genpo.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -o errexit # abort on nonzero exitstatus 4 | set -o nounset # abort on unbound variable 5 | set -o pipefail # don't hide errors within pipes 6 | 7 | locale="" 8 | 9 | show_help() { 10 | echo "Usage: $0 " 11 | } 12 | 13 | if [[ $# -eq 0 ]]; then 14 | show_help 15 | exit 1 16 | fi 17 | 18 | while [[ $# -gt 0 ]]; do 19 | case "$1" in 20 | *) 21 | locale="$1" 22 | shift 23 | ;; 24 | esac 25 | done 26 | 27 | MDBOOK_OUTPUT='{"xgettext": { "depth": 3 }}' mdbook build -d po 28 | 29 | find po -type f -name "*.pot" | while read -r potfile; do 30 | pofile="${potfile%.pot}.$locale.po" 31 | msginit --locale=$locale --input="$potfile" --no-translator --output="$pofile" 32 | done 33 | -------------------------------------------------------------------------------- /script/serve.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -o errexit # abort on nonzero exitstatus 4 | set -o nounset # abort on unbound variable 5 | set -o pipefail # don't hide errors within pipes 6 | 7 | locale="" 8 | 9 | show_help() { 10 | echo "Usage: $0 " 11 | } 12 | 13 | if [[ $# -eq 0 ]]; then 14 | show_help 15 | exit 1 16 | fi 17 | 18 | while [[ $# -gt 0 ]]; do 19 | case "$1" in 20 | *) 21 | locale="$1" 22 | shift 23 | ;; 24 | esac 25 | done 26 | 27 | script/concat.sh "$locale" 28 | MDBOOK_BOOK__LANGUAGE="$locale" mdbook serve -d "book/$locale" 29 | -------------------------------------------------------------------------------- /script/sync.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | set -o errexit # abort on nonzero exitstatus 4 | set -o nounset # abort on unbound variable 5 | set -o pipefail # don't hide errors within pipes 6 | 7 | locale="" 8 | 9 | show_help() { 10 | echo "Usage: $0 " 11 | } 12 | 13 | if [[ $# -eq 0 ]]; then 14 | show_help 15 | exit 1 16 | fi 17 | 18 | while [[ $# -gt 0 ]]; do 19 | case "$1" in 20 | *) 21 | locale="$1" 22 | shift 23 | ;; 24 | esac 25 | done 26 | 27 | MDBOOK_OUTPUT='{"xgettext": { "depth": 3 }}' mdbook build -d po 28 | 29 | find po -type f -name "*.pot" | while read -r potfile; do 30 | pofile="${potfile%.pot}.$locale.po" 31 | msgmerge --update "$pofile" "$potfile" 32 | done 33 | -------------------------------------------------------------------------------- /sidebars.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Creating a sidebar enables you to: 3 | - create an ordered group of docs 4 | - render a sidebar for each doc of that group 5 | - provide next/previous navigation 6 | 7 | The sidebars can be generated from the filesystem, or explicitly defined here. 8 | 9 | Create as many sidebars as you want. 10 | */ 11 | 12 | // @ts-check 13 | 14 | /** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ 15 | const sidebars = { 16 | // By default, Docusaurus generates a sidebar from the docs folder structure 17 | tutorialSidebar: [{type: 'autogenerated', dirName: '.'}], 18 | 19 | // But you can create a sidebar manually 20 | /* 21 | tutorialSidebar: [ 22 | 'intro', 23 | 'hello', 24 | { 25 | type: 'category', 26 | label: 'Tutorial', 27 | items: ['tutorial-basics/create-a-document'], 28 | }, 29 | ], 30 | */ 31 | }; 32 | 33 | export default sidebars; 34 | -------------------------------------------------------------------------------- /src/components/HomepageFeatures/styles.module.css: -------------------------------------------------------------------------------- 1 | .features { 2 | display: flex; 3 | align-items: center; 4 | padding: 2rem 0; 5 | width: 100%; 6 | } 7 | 8 | .featureSvg { 9 | height: 200px; 10 | width: 200px; 11 | } 12 | -------------------------------------------------------------------------------- /src/components/HomepageTestimonials/styles.module.css: -------------------------------------------------------------------------------- 1 | .testimonials { 2 | display: flex; 3 | align-items: center; 4 | padding: 2rem 0; 5 | width: 100%; 6 | } 7 | -------------------------------------------------------------------------------- /src/components/HomepageVersions/index.js: -------------------------------------------------------------------------------- 1 | import { downloadUrl, VersionList } from '@site/variables'; 2 | 3 | function VersionRow({v}) { 4 | return ( 5 | 6 | sbt {v} 7 | .zip 8 | .zip.sha256 9 | .tgz 10 | .tgz.sha256 11 | .msi 12 | .msi.sha256 13 | 14 | ); 15 | } 16 | 17 | export default function HomepageVersions() { 18 | return ( 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | {VersionList.map((v, idx) => ( 30 | 31 | ))} 32 |
sbt version.zip.zip.sha256.tgz.tgz.sha256.msi.msi.sha256
33 | ); 34 | } 35 | -------------------------------------------------------------------------------- /src/css/custom.css: -------------------------------------------------------------------------------- 1 | /** 2 | * Any CSS included here will be global. The classic template 3 | * bundles Infima by default. Infima is a CSS framework designed to 4 | * work well for content-centric websites. 5 | */ 6 | 7 | /* You can override the default Infima variables here. */ 8 | :root { 9 | --ifm-color-primary: #4a34bc; 10 | --ifm-color-primary-dark: #432fa9; 11 | --ifm-color-primary-darker: #3f2ca0; 12 | --ifm-color-primary-darkest: #342484; 13 | --ifm-color-primary-light: #553eca; 14 | --ifm-color-primary-lighter: #5d48cc; 15 | --ifm-color-primary-lightest: #7664d4; 16 | --ifm-code-font-size: 95%; 17 | --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); 18 | --ifm-navbar-height: 5em; 19 | } 20 | 21 | /* For readability concerns, you should choose a lighter palette in dark mode. */ 22 | [data-theme='dark'] { 23 | --ifm-color-primary-dark: #ff35da; 24 | --ifm-color-primary-darker: #ff24d7; 25 | --ifm-color-primary-darkest: #ef00c3; 26 | --ifm-color-primary-light: #ff79e6; 27 | --ifm-color-primary-lighter: #ff8ae9; 28 | --ifm-color-primary-lightest: #ffbef3; 29 | --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); 30 | --ifm-navbar-height: 5em; 31 | } 32 | 33 | .navbar__logo { 34 | padding: 0.5rem; 35 | height: 4em; 36 | } 37 | 38 | [data-theme='dark'] .navbar__logo { 39 | background-color: #aaa; 40 | } 41 | -------------------------------------------------------------------------------- /src/includes/install.sh: -------------------------------------------------------------------------------- 1 | \$ sdk install java \$(sdk list java | grep -o "\b8\.[0-9]*\.[0-9]*\-tem" | head -1) 2 | \$ sdk install sbt -------------------------------------------------------------------------------- /src/landing/_template/redirect_learn.st: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | This page has moved 8 | 9 | 10 |

This page has moved to learn.

11 | 12 | 13 | -------------------------------------------------------------------------------- /src/pages/404.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: "404: Page not found" 3 | --- 4 | 5 | ## Sorry we couldn't find that page 6 | 7 | ### Where to go now 8 | 9 | * [Home page](/index.html) 10 | * [Learn](/learn.html) 11 | * [Download](/download.html) 12 | * [StackOverflow](https://stackoverflow.com/questions/tagged/sbt) 13 | 14 | ### Help us fix this site 15 | 16 | If you clicked a link on the sbt site and ended up here please raise an [issue](https://github.com/sbt/website/issues) 17 | letting us know which link you clicked. 18 | -------------------------------------------------------------------------------- /src/pages/cookie.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Cookie 3 | slug: /cookie.html 4 | --- 5 | 6 | Your Privacy 7 | ------------ 8 | 9 |

When you visit any web site, it may store or retrieve information on your browser, mostly in the form of cookies. This information might be about you, your preferences or your device and is mostly used to make the site work as you expect it to. The information does not usually directly identify you, but it can give you a more personalised web experience.

10 |

Because we respect your right to privacy, you can choose not to allow some types of cookies. Below is a list of the cookies that get set on the scala-sbt.org domain. Blocking some types of cookies may impact your experience of the site and the services we are able to offer.

11 |

COOKIE SETTINGS

12 |




13 | 14 | Cookie Listing 15 | -------------- 16 | 17 | -------------------------------------------------------------------------------- /src/pages/index.module.css: -------------------------------------------------------------------------------- 1 | /** 2 | * CSS files with the .module.css suffix will be treated as CSS modules 3 | * and scoped locally. 4 | */ 5 | 6 | header { 7 | background-color: #222; 8 | margin-bottom: 5em; 9 | } 10 | 11 | .heroBanner { 12 | height: 530px; 13 | text-align: center; 14 | background: url("/assets/ryoanji-progress.jpg") center no-repeat; 15 | /* Prevent header text from turning dark. 16 | * Insufficient contrast due to the background image */ 17 | --ifm-hero-text-color: #fff; 18 | } 19 | 20 | .buttons { 21 | display: flex; 22 | align-items: center; 23 | justify-content: center; 24 | flex-wrap: wrap; 25 | gap: 2rem; 26 | } 27 | 28 | @media screen and (max-width: 600px) { 29 | .buttons { 30 | flex-direction: column; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/pages/thank-you.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Thank you 3 | slug: /thank-you.html 4 | --- 5 | 6 | Thank You 7 | --------- 8 | 9 | Thanks to everyone who's helped improve sbt and Zinc 1 by using them, reporting bugs, improving our documentation, porting builds, porting plugins, and submitting and reviewing pull requests. 10 | 11 | 12 | 13 | 16 | 19 | 20 |
14 | 15 | 17 | sbt team serves plugins and other artifacts on Artifactory at repo.scala-sbt.org, which is sponsored by JFrog. 18 |
21 | -------------------------------------------------------------------------------- /src/reference/01-General-Info/00.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: General-Info.html 3 | --- 4 | 5 | General Information 6 | ------------------- 7 | 8 | This part of the documentation has project "meta-information" such as 9 | where to get help, find source code and how to contribute. 10 | -------------------------------------------------------------------------------- /src/reference/01-General-Info/03-Repository-Rules.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Repository-Roles.html 3 | --- 4 | 5 | Community Repository Policy 6 | --------------------------- 7 | 8 | The community repository has the following guideline for artifacts 9 | published to it: 10 | 11 | 1. All published artifacts are the authors own work or have an 12 | appropriate license which grants distribution rights. 13 | 2. All published artifacts come from open source projects, that have an 14 | open patch acceptance policy. 15 | 3. All published artifacts are placed under an organization in a DNS 16 | domain for which you have the permission to use or are an owner 17 | (scala-sbt.org is available for sbt plugins). 18 | 4. All published artifacts are signed by a committer of the project 19 | (coming soon). 20 | 21 | -------------------------------------------------------------------------------- /src/reference/01-General-Info/04-Bintray-For-Plugins.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Bintray-For-Plugins.html 3 | --- 4 | 5 | [UsingSonatype]: Using-Sonatype.html 6 | 7 | Bintray For Plugins 8 | ------------------- 9 | 10 | **We no longer use Bintray to host plugins.** 11 | 12 | First and foremost, we would like to thank JFrog for their continued support of sbt project and the Scala ecosystem. 13 | Between 2014 and April, 2021 sbt hosted its community plugin repository on 14 | [bintray.com/sbt](https://bintray.com/sbt). 15 | 16 | When JFrog sunsetted their Bintray product, they have proactively contacted us 17 | and granted Scala Center open source sponsorship that allows us to use an online Artifactory instance. 18 | 19 | As of 2021-04-18, we have migrated all sbt plugins and sbt 0.13 artifacts to the Artifactory instance, 20 | and redirected to point to it as well, 21 | so existing builds should continue to work without making any changes today and after May 1st. 22 | For plugin hosting, we will operate this as a read-only repository. 23 | Any new plugin releases should migrate to using [Sonatype OSS][UsingSonatype]. 24 | -------------------------------------------------------------------------------- /src/reference/01-General-Info/90-Changes/00.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Changes.html 3 | --- 4 | 5 | Changes 6 | ------- 7 | 8 | These are changes made in each sbt release. 9 | -------------------------------------------------------------------------------- /src/reference/02-DetailTopics/00.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Detailed-Topics.html 3 | --- 4 | 5 | [Getting-Started]: Getting-Started.html 6 | [Howto]: Howto.html 7 | [Developers-Guide]: Developers-Guide.html 8 | 9 | Detailed Topics 10 | --------------- 11 | 12 | This part of the documentation has pages documenting particular sbt 13 | topics in detail. Before reading anything in here, you will need the 14 | information in the 15 | [Getting Started Guide][Getting-Started] as 16 | a foundation. 17 | 18 | Other resources include the 19 | [How to][Howto] and 20 | [Developer’s Guide][Developers-Guide] 21 | sections in this reference, and the 22 | [API Documentation](../api/index.html) 23 | -------------------------------------------------------------------------------- /src/reference/02-DetailTopics/01-Using-sbt/00.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Using-sbt.html 3 | --- 4 | 5 | [Getting-Started]: Getting-Started.html 6 | 7 | Using sbt 8 | --------- 9 | 10 | This part of the documentation has pages documenting particular sbt 11 | topics in detail. Before reading anything in here, you will need the 12 | information in the 13 | [Getting Started Guide][Getting-Started] as 14 | a foundation. 15 | -------------------------------------------------------------------------------- /src/reference/02-DetailTopics/02-Configuration/00.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Configuration-Index.html 3 | --- 4 | 5 | [Getting-Started]: Getting-Started.html 6 | 7 | Configuration 8 | ------------- 9 | 10 | This part of the documentation has pages documenting particular sbt 11 | topics in detail. Before reading anything in here, you will need the 12 | information in the 13 | [Getting Started Guide][Getting-Started] as 14 | a foundation. 15 | -------------------------------------------------------------------------------- /src/reference/02-DetailTopics/02-Configuration/08-Local-Scala.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Local-Scala.html 3 | --- 4 | 5 | [Cross-Build]: Cross-Build.html 6 | 7 | Local Scala 8 | ----------- 9 | 10 | To use a locally built Scala version, define the `scalaHome` setting, 11 | which is of type `Option[File]`. This Scala version will only be used 12 | for the build and not for sbt, which will still use the version it was 13 | compiled against. 14 | 15 | Example: 16 | 17 | ```scala 18 | scalaHome := Some(file("/path/to/scala")) 19 | ``` 20 | 21 | Using a local Scala version will override the `scalaVersion` setting and 22 | will not work with [cross building][Cross-Build]. 23 | 24 | sbt reuses the class loader for the local Scala version. If you 25 | recompile your local Scala version and you are using sbt interactively, 26 | run 27 | 28 | ``` 29 | > reload 30 | ``` 31 | 32 | to use the new compilation results. 33 | -------------------------------------------------------------------------------- /src/reference/02-DetailTopics/03-Dependency-Management/00.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Dependency-Management-Index.html 3 | --- 4 | 5 | [Getting-Started]: Getting-Started.html 6 | 7 | Dependency Management 8 | --------------------- 9 | 10 | This part of the documentation has pages documenting particular sbt 11 | topics in detail. Before reading anything in here, you will need the 12 | information in the 13 | [Getting Started Guide][Getting-Started] as 14 | a foundation. 15 | -------------------------------------------------------------------------------- /src/reference/02-DetailTopics/04-Tasks-and-Commands/00.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Tasks-and-Commands.html 3 | --- 4 | 5 | [Getting-Started]: Getting-Started.html 6 | 7 | Tasks and Commands 8 | ------------------ 9 | 10 | This part of the documentation has pages documenting particular sbt 11 | topics in detail. Before reading anything in here, you will need the 12 | information in the 13 | [Getting Started Guide][Getting-Started] as 14 | a foundation. 15 | -------------------------------------------------------------------------------- /src/reference/02-DetailTopics/05-Plugins-and-Best-Practices/00.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Plugins-and-Best-Practices.html 3 | --- 4 | 5 | [Getting-Started]: Getting-Started.html 6 | 7 | Plugins and Best Practices 8 | -------------------------- 9 | 10 | This part of the documentation has pages documenting particular sbt 11 | topics in detail. Before reading anything in here, you will need the 12 | information in the 13 | [Getting Started Guide][Getting-Started] as 14 | a foundation. 15 | -------------------------------------------------------------------------------- /src/reference/02-DetailTopics/05-Plugins-and-Best-Practices/07-Cross-Build-Plugins.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Cross-Build-Plugins.html 3 | --- 4 | 5 | Cross building plugins 6 | ---------------------- 7 | 8 | Like we are able to cross build against multiple Scala versions, we can cross build sbt 0.13 plugins while staying on sbt 1.x. 9 | 10 | ```scala 11 | crossSbtVersions := Vector("1.2.8", "0.13.18") 12 | ``` 13 | 14 | If you need to make changes specific to a sbt version, you can now include them into `src/main/scala-sbt-0.13` 15 | and `src/main/scala-sbt-1.0`. To switch between the sbt versions use 16 | 17 | ``` 18 | ^^ 0.13.18 19 | 20 | [info] Setting `sbtVersion in pluginCrossBuild` to 0.13.18 21 | [info] Set current project to sbt-something (in build file:/xxx/sbt-something/) 22 | ``` 23 | 24 | or `^compile` to cross compile. 25 | 26 | ### Mixing libraries and sbt plugins in a build 27 | 28 | When you want to mix both libraries and sbt plugins into a multi-project build, 29 | it's more convenient to drive the sbt version based on the Scala version. 30 | 31 | You can do that as follows: 32 | 33 | ```scala 34 | ThisBuild / crossScalaVersions := Seq("2.10.7", "2.12.10") 35 | 36 | lazy val core = (project in file("core")) 37 | 38 | lazy val plugin = (project in file("sbt-something")) 39 | .enablePlugins(SbtPlugin) 40 | .dependsOn(core) 41 | .settings( 42 | // change the sbt version based on Scala version 43 | pluginCrossBuild / sbtVersion := { 44 | scalaBinaryVersion.value match { 45 | case "2.10" => "0.13.18" 46 | case "2.12" => "1.2.8" 47 | } 48 | } 49 | ) 50 | ``` 51 | 52 | This is a technique discovered by [@jroper](https://github.com/jroper) in [sbt-pgp#115](https://github.com/sbt/sbt-pgp/pull/115). It works because sbt 0.13 and 1.x series use different Scala binary versions. 53 | 54 | Using the setting, you can now use Scala cross building commands such as `+compile` and `+publish`. 55 | -------------------------------------------------------------------------------- /src/reference/04-Howto/00.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Howto.html 3 | --- 4 | 5 | How to... 6 | --------- 7 | 8 | See [Detailed Table of Contents](Contents+in+Depth.html) for the list of all the how-tos. 9 | -------------------------------------------------------------------------------- /src/reference/04-Howto/07-Howto-Project-Metadata.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Howto-Project-Metadata.html 3 | --- 4 | 5 | Project metadata 6 | ---------------- 7 | 8 | 9 | 10 | ### Set the project name 11 | 12 | A project should define `name` and `version`. These will be used in 13 | various parts of the build, such as the names of generated artifacts. 14 | Projects that are published to a repository should also override 15 | `organization`. 16 | 17 | ```scala 18 | name := "Your project name" 19 | ``` 20 | 21 | For published projects, this name is normalized to be suitable for use 22 | as an artifact name and dependency ID. This normalized name is stored in 23 | `normalizedName`. 24 | 25 | 26 | 27 | ### Set the project version 28 | 29 | ```scala 30 | version := "1.0" 31 | ``` 32 | 33 | 34 | 35 | ### Set the project organization 36 | 37 | ```scala 38 | organization := "org.example" 39 | ``` 40 | 41 | By convention, this is a reverse domain name that you own, typically one 42 | specific to your project. It is used as a namespace for projects. 43 | 44 | A full/formal name can be defined in the `organizationName` setting. 45 | This is used in the generated pom.xml. If the organization has a web 46 | site, it may be set in the `organizationHomepage` setting. For example: 47 | 48 | ```scala 49 | organizationName := "Example, Inc." 50 | 51 | organizationHomepage := Some(url("http://example.org")) 52 | ``` 53 | 54 | 55 | 56 | ### Set the project's homepage and other metadata 57 | 58 | ```scala 59 | homepage := Some(url("https://www.scala-sbt.org")) 60 | 61 | startYear := Some(2008) 62 | 63 | description := "A build tool for Scala." 64 | 65 | licenses += "GPLv2" -> url("https://www.gnu.org/licenses/gpl-2.0.html") 66 | ``` 67 | -------------------------------------------------------------------------------- /src/reference/04-Howto/13-Howto-Custom-Tasks.md: -------------------------------------------------------------------------------- 1 | Define Custom Tasks 2 | ------------------- 3 | 4 | ### Define a Task that runs tests in specific sub-projects 5 | 6 | Consider a hypothetical multi-build project with 3 subprojects. The following defines a task `myTestTask` that will 7 | run the `test` Task in specific subprojects `core` and `tools` but not `client`: 8 | 9 | ```scala 10 | lazy val core = project.in(file("./core")) 11 | lazy val tools = project.in(file("./tools")) 12 | lazy val client = project.in(file("./client")) 13 | 14 | lazy val myTestTask = taskKey[Unit]("my test task") 15 | 16 | myTestTask := { 17 | (core / Test / test).value 18 | (tools / Test / test).value 19 | } 20 | ``` 21 | -------------------------------------------------------------------------------- /src/reference/04-Howto/14-How-Startup.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Howto-Startup.html 3 | --- 4 | 5 | How to take an action on startup 6 | -------------------------------- 7 | 8 | A global setting `onLoad` is of type `State => State` and is executed once, after all projects are built and loaded. There is a similar hook `onUnload` for when a project is unloaded. 9 | 10 | Project unloading typically occurs as a result of a `reload` command or a `set` command. Because the `onLoad` and `onUnload` hooks are global, modifying this setting typically involves composing a new function with the previous value. The following example shows the basic structure of defining `onLoad`. 11 | 12 | Suppose you want to run a task named `dependencyUpdates` on start up. Here's what you can do: 13 | 14 | ```scala 15 | lazy val dependencyUpdates = taskKey[Unit]("foo") 16 | 17 | // This prepends the String you would type into the shell 18 | lazy val startupTransition: State => State = { s: State => 19 | "dependencyUpdates" :: s 20 | } 21 | 22 | lazy val root = (project in file(".")) 23 | .settings( 24 | ThisBuild / scalaVersion := "2.12.6", 25 | ThisBuild / organization := "com.example", 26 | name := "helloworld", 27 | dependencyUpdates := { println("hi") }, 28 | 29 | // onLoad is scoped to Global because there's only one. 30 | Global / onLoad := { 31 | val old = (Global / onLoad).value 32 | // compose the new transition on top of the existing one 33 | // in case your plugins are using this hook. 34 | startupTransition compose old 35 | } 36 | ) 37 | ``` 38 | 39 | You can use this technique to switch the startup subproject too. 40 | -------------------------------------------------------------------------------- /src/reference/04-Howto/20-Howto-Sequencing/00.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Howto-Sequencing.html 3 | --- 4 | 5 | [ExecutionSemantics]: Custom-Settings.html#Execution+semantics+of+tasks 6 | 7 | Sequencing 8 | ---------- 9 | 10 | One of the most frequently asked questions is in the form of "how do I do X *and then* do Y in sbt"? 11 | 12 | Generally speaking, that's not how sbt tasks are set up. build.sbt is a DSL to define dependency graph of tasks. This is covered in [Execution semantics of tasks][ExecutionSemantics]. So ideally, what you should do is define task Y yourself, and depend on the task X. 13 | 14 | ```scala 15 | taskY := { 16 | val x = taskX.value 17 | x + 1 18 | } 19 | ``` 20 | 21 | This is more constrained compared to the imperative style plain Scala code with side effects such as the follows: 22 | 23 | ```scala 24 | def foo(): Unit = { 25 | doX() 26 | doY() 27 | } 28 | ``` 29 | 30 | The benefit of the dependency-oriented programming model is that sbt's task engine is able to reorder the task execution. When possible we run dependent tasks in parallel. Another benefit is that we can deduplicate the graph, and make sure that the task evaluation, such as `Compile / compile`, is called once per command execution, as opposed to compiling the same source many times. 31 | 32 | Because task system is generally set up this way, running something sequentially is possible, but you will be fighting the system a bit, and it's not always going to be easy. 33 | 34 | - [Defining a sequential task with Def.sequential](Howto-Sequential-Task.html) 35 | - [Defining a dynamic task with Def.taskDyn](Howto-Dynamic-Task.html) 36 | - [Doing something after an input task](Howto-After-Input-Task.html) 37 | - [Defining a dynamic input task with Def.inputTaskDyn](Howto-Dynamic-Input-Task.html) 38 | - [How to sequence using commands](Howto-Sequence-using-Commands.html) 39 | -------------------------------------------------------------------------------- /src/reference/04-Howto/20-Howto-Sequencing/01-Howto-Sequential-Task.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Howto-Sequential-Task.html 3 | --- 4 | 5 | ### Defining a sequential task with Def.sequential 6 | 7 | sbt 0.13.8 added `Def.sequential` function to run tasks under semi-sequential semantics. 8 | To demonstrate the sequential task, let's create a custom task called `compilecheck` that runs `Compile / compile` and then `Compile / scalastyle` task added by [scalastyle-sbt-plugin](http://www.scalastyle.org/sbt.html). 9 | 10 | Here's how to set it up 11 | 12 | #### project/build.properties 13 | 14 | ``` 15 | sbt.version=$app_version$ 16 | ``` 17 | 18 | #### project/style.sbt 19 | 20 | ``` 21 | addSbtPlugin("org.scalastyle" %% "scalastyle-sbt-plugin" % "1.0.0") 22 | ``` 23 | 24 | #### build.sbt 25 | 26 | ```scala 27 | lazy val compilecheck = taskKey[Unit]("compile and then scalastyle") 28 | 29 | lazy val root = (project in file(".")) 30 | .settings( 31 | Compile / compilecheck := Def.sequential( 32 | Compile / compile, 33 | (Compile / scalastyle).toTask("") 34 | ).value 35 | ) 36 | ``` 37 | 38 | To call this task type in `compilecheck` from the shell. If the compilation fails, `compilecheck` would stop the execution. 39 | 40 | ``` 41 | root> compilecheck 42 | [info] Compiling 1 Scala source to /Users/x/proj/target/scala-2.10/classes... 43 | [error] /Users/x/proj/src/main/scala/Foo.scala:3: Unmatched closing brace '}' ignored here 44 | [error] } 45 | [error] ^ 46 | [error] one error found 47 | [error] (compile:compileIncremental) Compilation failed 48 | ``` 49 | 50 | Looks like we were able to sequence these tasks. 51 | -------------------------------------------------------------------------------- /src/reference/04-Howto/20-Howto-Sequencing/03-Howto-After-Input-Task.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Howto-After-Input-Task.html 3 | --- 4 | 5 | [Input-Tasks]: Input-Tasks.html 6 | 7 | ### Doing something after an input task 8 | 9 | Thus far we've mostly looked at tasks. There's another kind of tasks called input tasks that accepts user input from the shell. 10 | A typical example for this is the `Compile / run` task. The `scalastyle` task is actually an input task too. See [input task][Input-Tasks] for the details of the input tasks. 11 | 12 | Now suppose we want to call `Compile / run` task and then open the browser for testing purposes. 13 | 14 | #### src/main/scala/Greeting.scala 15 | 16 | ```scala 17 | object Greeting { 18 | def main(args: Array[String]): Unit = { 19 | println("hello " + args.toList) 20 | } 21 | } 22 | ``` 23 | 24 | #### build.sbt v1 25 | 26 | ```scala 27 | lazy val runopen = inputKey[Unit]("run and then open the browser") 28 | 29 | lazy val root = (project in file(".")) 30 | .settings( 31 | runopen := { 32 | (Compile / run).evaluated 33 | println("open browser!") 34 | } 35 | ) 36 | ``` 37 | 38 | Here, I'm faking the browser opening using `println` as the side effect. We can now call this task from the shell: 39 | 40 | ``` 41 | > runopen foo 42 | [info] Compiling 1 Scala source to /x/proj/... 43 | [info] Running Greeting foo 44 | hello List(foo) 45 | open browser! 46 | ``` 47 | 48 | #### build.sbt v2 49 | 50 | We can actually remove `runopen` key, by rewriting the new input task to `Compile / run`: 51 | 52 | ```scala 53 | lazy val root = (project in file(".")) 54 | .settings( 55 | Compile / run := { 56 | (Compile / run).evaluated 57 | println("open browser!") 58 | } 59 | ) 60 | ``` 61 | -------------------------------------------------------------------------------- /src/reference/04-Howto/20-Howto-Sequencing/05-Howto-Sequence-using-Commands.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Howto-Sequence-using-Commands.html 3 | --- 4 | 5 | ### How to sequence using commands 6 | 7 | If all you care about is the side effects, and you really just want to emulate humans typing in one command after another, a custom command might be just want you need. This comes in handy for release procedures. 8 | 9 | Here's from the build script of sbt itself: 10 | 11 | ```scala 12 | commands += Command.command("releaseNightly") { state => 13 | "stampVersion" :: 14 | "clean" :: 15 | "compile" :: 16 | "publish" :: 17 | "bintrayRelease" :: 18 | state 19 | } 20 | ``` 21 | -------------------------------------------------------------------------------- /src/reference/04-Howto/90-Examples/00.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Examples.html 3 | --- 4 | 5 | [Getting-Started]: Getting-Started.html 6 | 7 | Examples 8 | -------- 9 | 10 | This section of the documentation has example sbt build definitions and 11 | code. Contributions are welcome! 12 | 13 | You may want to read the 14 | [Getting Started Guide][Getting-Started] as a foundation for 15 | understanding the examples. 16 | -------------------------------------------------------------------------------- /src/reference/04-Howto/90-Examples/03-Advanced-Configurations-Example.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Advanced-Configurations-Example.html 3 | --- 4 | 5 | [Basic-Def]: Basic-Def.html 6 | 7 | Advanced configurations example 8 | ------------------------------- 9 | 10 | This is an example [.sbt build definition][Basic-Def] 11 | that demonstrates using configurations to group dependencies. 12 | 13 | The `utils` module provides utilities for other modules. It uses 14 | configurations to group dependencies so that a dependent project doesn't 15 | have to pull in all dependencies if it only uses a subset of 16 | functionality. This can be an alternative to having multiple utilities 17 | modules (and consequently, multiple utilities jars). 18 | 19 | In this example, consider a `utils` project that provides utilities 20 | related to both Scalate and Saxon. It therefore needs both Scalate and 21 | Saxon on the compilation classpath and a project that uses all of the 22 | functionality of 'utils' will need these dependencies as well. However, 23 | project `a` only needs the utilities related to Scalate, so it doesn't 24 | need Saxon. By depending only on the `scalate` configuration of `utils`, 25 | it only gets the Scalate-related dependencies. 26 | 27 | @@snip [custom-config]($root$/src/sbt-test/ref/example-custom-config/build.sbt) {} 28 | -------------------------------------------------------------------------------- /src/reference/90-Developers-Guide/01-Modularization/00.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Modularization.html 3 | --- 4 | 5 | ### Modularization 6 | 7 | The process we aim to take for sbt 1.0 is to disassemble sbt into smaller modules and layers. 8 | To be clear, sbt 0.13's codebase already does consist of numerous subprojects. 9 | 10 | Layers are more coarse-grained sets of subproject(s) that can be used independently. 11 | Another purpose of the modularization is to distinguish between public API and internal implementation. 12 | Reducing the surface area of the sbt code base has several benefits: 13 | 14 | - It makes it easier for the build users and the plugin authors to learn the APIs. 15 | - It makes it easier for us to maintain binary and semantic compatibilities. 16 | - It encourages the reuse of the modules. 17 | 18 | The following is a conceptual diagram of the layers: 19 | 20 | ![Module diagram](files/module-diagram.png) 21 | 22 | We'll discuss the details in the next page. 23 | -------------------------------------------------------------------------------- /src/reference/90-Developers-Guide/08-Compiler-Interface/00.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Compiler-Interface.html 3 | --- 4 | 5 | Compiler Interface 6 | ------------------ 7 | 8 | The compiler interface is the communication link between sbt and the 9 | Scala compiler. 10 | 11 | It is used to get information from the Scala compiler, and must therefore 12 | be compiled against the Scala version in use for the configured projects. 13 | 14 | The code for this project can be found in the directory [internal/compiler-bridge](https://github.com/sbt/zinc/tree/v1.1.0/internal/compiler-bridge). 15 | -------------------------------------------------------------------------------- /src/reference/90-Developers-Guide/08-Compiler-Interface/01-Version-Specific-Sources.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Version-Specific-Sources.html 3 | --- 4 | 5 | Fetching the most specific sources 6 | ---------------------------------- 7 | 8 | Because the compiler interface is recompiled against each Scala version 9 | in use in your project, its source must stay compatible with all the Scala 10 | versions that sbt supports (from Scala 2.8 to the latest version of Scala). 11 | 12 | This comes at great cost for both the sbt maintainers and the Scala 13 | compiler authors: 14 | 15 | 1. The compiler authors cannot remove old and deprecated public APIs from 16 | the Scala compiler. 17 | 1. sbt cannot use new APIs defined in the Scala compiler. 18 | 1. sbt must implement [all kinds of hackery](https://github.com/sbt/sbt/blob/0.13/compile/interface/src/main/scala/xsbt/Compat.scala#L6) 19 | to remain source-compatible with all versions of the Scala compiler and support 20 | new features. 21 | 22 | To circumvent this problem, a new mechanism that allows sbt to fetch the 23 | version of the sources for the compiler interface that are the most specific 24 | for the Scala version in use has been implemented in sbt. 25 | 26 | For instance, for a project that is compiled using Scala 2.11.8-M2, sbt 27 | will look for the following version of the sources for the compiler interface, 28 | in this order: 29 | 30 | 1. 2.11.8-M2 31 | 1. 2.11.8 32 | 1. 2.11 33 | 1. The default sources. 34 | 35 | This new mechanism allows both the Scala compiler and sbt to move forward and 36 | enjoy new APIs while being certain than users of older versions of Scala will 37 | still be able to use sbt. 38 | 39 | Finally, another advantage of this technique is that it relies on Ivy to 40 | retrieve the sources of the compiler bridge, but can be easily ported for use 41 | with Maven, which is the distribution mechanism that the sbt maintainers would 42 | like to use to distribute sbt's modules. 43 | -------------------------------------------------------------------------------- /src/reference/90-Developers-Guide/09-Launcher/00.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Sbt-Launcher.html 3 | --- 4 | 5 | sbt Launcher 6 | ------------ 7 | 8 | The sbt launcher provides a generic container that can load and run 9 | programs resolved using the Ivy dependency manager. Sbt uses this as its 10 | own deployment mechanism. 11 | 12 | The code is hosted at [sbt/launcher](https://github.com/sbt/launcher). 13 | -------------------------------------------------------------------------------- /src/reference/90-Developers-Guide/10-DevGuide-Notes/00.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: DevGuide-Notes.html 3 | --- 4 | 5 | Notes 6 | ----- 7 | 8 | Here are some more docs that used to be part of Developer Guide. 9 | -------------------------------------------------------------------------------- /src/reference/CNAME: -------------------------------------------------------------------------------- 1 | www.scala-sbt.org 2 | -------------------------------------------------------------------------------- /src/reference/README.md: -------------------------------------------------------------------------------- 1 | The Book of sbt (Draft) 2 | ======================= 3 | 4 | This is a draft documentation of sbt 2.x that is yet to be released. 5 | While the general concept translates to sbt 1.x, 6 | details of both 2.x and this doc are subject to change. 7 | 8 | ![sbt logo](files/sbt-logo.svg) 9 | 10 | sbt is a simple build tool for Scala and Java. 11 | sbt downloads your library dependencies via Coursier, 12 | incrementally compiles and tests your projects, 13 | integrates with IDEs like IntelliJ and VS Code, 14 | makes JAR packages, and publishes them to [Maven Central](https://central.sonatype.com/), 15 | JVM community's package registry. 16 | 17 | ```scala 18 | scalaVersion := "{{scala3_example_version}}" 19 | ``` 20 | 21 | You just need one line of `build.sbt` to get started with Scala. 22 | -------------------------------------------------------------------------------- /src/reference/SUMMARY.md: -------------------------------------------------------------------------------- 1 | # Summary 2 | 3 | [Introduction](README.md) 4 | 5 | - [Installing sbt runner](Setup.md) 6 | - [sbt by example](sbt-by-example.md) 7 | - [Getting Started](guide/index.md) 8 | - [Why sbt exists](guide/why-sbt-exists.md) 9 | - [Creating a new build](guide/sbt-new.md) 10 | - [sbt components](guide/sbt-components.md) 11 | - [Basic tasks](guide/basic-tasks.md) 12 | - [Build definition basics](guide/build-definition-basics.md) 13 | - [Library dependency basics](guide/library-dependency-basics.md) 14 | - [Multi project basics](guide/multi-project-basics.md) 15 | - [Build layout](guide/build-layout.md) 16 | - [sbt with IDEs](guide/IDE.md) 17 | - [Changes](changes/index.md) 18 | - [sbt 2.0 changes](changes/sbt-2.0-change-summary.md) 19 | - [Migrating from sbt 1.x](changes/migrating-from-sbt-1.x.md) 20 | - [Concepts](concepts/index.md) 21 | - [Command](concepts/command.md) 22 | - [Cross building](concepts/cross-building.md) 23 | - [sbt query](concepts/sbt-query.md) 24 | - [Caching](concepts/caching.md) 25 | - [Reference](reference/index.md) 26 | - [sbt](reference/sbt.md) 27 | - [sbt update](reference/sbt-update.md) 28 | - [sbt run](reference/sbt-run.md) 29 | - [Cross building setup](reference/cross-building-setup.md) 30 | - [Remote cache setup](reference/remote-cache-setup.md) 31 | - [Recipes](recipes/index.md) 32 | - [Write hello world](recipes/hello-world.md) 33 | - [Use sbt as Metals build server](recipes/use-sbt-as-metals-build-server.md) 34 | - [Import to IntelliJ IDEA](recipes/import-to-intellij.md) 35 | - [Use Neovim](recipes/use-neovim.md) 36 | - [Appendix: Glossary](appendix/glossary.md) 37 | - [Appendix: Setup notes](appendix/setup-notes.md) 38 | -------------------------------------------------------------------------------- /src/reference/Setup.md: -------------------------------------------------------------------------------- 1 | Installing sbt runner 2 | ===================== 3 | 4 | To build an sbt project, you'll need to take these steps: 5 | 6 | - Install JDK (We recommend Eclipse Adoptium Temurin JDK 8, 11, or 17, or Zulu JDK 8 for macOS with ARM chips). 7 | - Install sbt runner. 8 | 9 | sbt runner is a script that invokes a declared version of sbt, downloading it beforehand if necessary. This allows build authors to precisely control 10 | the sbt version, instead of relying on users' machine environment. 11 | 12 | ### Prerequisites 13 | 14 | sbt runs on all major operating systems; however, it requires JDK 8 or higher to run. 15 | 16 | ```bash 17 | java -version 18 | # openjdk version "1.8.0_352" 19 | ``` 20 | 21 | ### Installing from SDKMAN 22 | 23 | To install both JDK and sbt, consider using [SDKMAN](https://sdkman.io/). 24 | 25 | ```bash 26 | sdk install java $(sdk list java | grep -o "\b8\.[0-9]*\.[0-9]*\-tem" | head -1) 27 | sdk install sbt 28 | ``` 29 | 30 | ### Universal packages 31 | 32 | - [sbt-{{sbt_runner_version}}.zip][ZIP] 33 | - [sbt-{{sbt_runner_version}}.tgz][TGZ] 34 | - [sbt-{{sbt_runner_version}}.msi][MSI] 35 | 36 | Verify the sbt runner 37 | --------------------- 38 | 39 | ```bash 40 | sbt --script-version 41 | # {{sbt_runner_version}} 42 | ``` 43 | 44 | [MSI]: https://github.com/sbt/sbt/releases/download/v{{sbt_runner_version}}/sbt-{{sbt_runner_version}}.msi 45 | [ZIP]: https://github.com/sbt/sbt/releases/download/v{{sbt_runner_version}}/sbt-{{sbt_runner_version}}.zip 46 | [TGZ]: https://github.com/sbt/sbt/releases/download/v{{sbt_runner_version}}/sbt-{{sbt_runner_version}}.tgz 47 | -------------------------------------------------------------------------------- /src/reference/_robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Disallow: /snapshot/ 3 | Sitemap: https://www.scala-sbt.org/sitemap_index.xml.gz 4 | Host: www.scala-sbt.org 5 | -------------------------------------------------------------------------------- /src/reference/_sphinx/exts/codeliteral.py: -------------------------------------------------------------------------------- 1 | from docutils import nodes 2 | from sphinx.util.nodes import set_source_info 3 | 4 | 5 | class Struct: 6 | def __init__(self, **keywordargs): 7 | self.__dict__.update(keywordargs) 8 | 9 | def process_node(node): 10 | if isinstance(node, nodes.Text): 11 | node = nodes.inline('', node.astext()) 12 | else: 13 | node = nodes.inline('', '', node) 14 | node['classes'].append('pre') 15 | return node 16 | 17 | # This role formats a string to be in a fixed width font. 18 | # The string is taken as a literal and is not processed for further inline formatting. 19 | def code_literal(name, rawtext, text, lineno, inliner, options={}, content=[]): 20 | node = nodes.inline('', text) 21 | node['classes'].append('pre') 22 | return [node], [] 23 | 24 | # This role formats a string to be in a fixed width font. 25 | # It processes nested inline formatting, substitutions in particular. 26 | def sub_literal(name, rawtext, text, lineno, inliner, options={}, content=[]): 27 | memo = Struct(document=inliner.document, 28 | reporter=inliner.reporter, 29 | language=inliner.language, 30 | inliner=inliner) 31 | 32 | nested_parse, problems = inliner.parse(text, lineno, memo, inliner.parent) 33 | nodes = [process_node(node) for node in nested_parse ] 34 | return nodes, problems 35 | 36 | # register the role 37 | def setup(app): 38 | app.add_role('sublit', sub_literal) 39 | app.add_role('codeliteral', code_literal) 40 | -------------------------------------------------------------------------------- /src/reference/_sphinx/exts/key.py: -------------------------------------------------------------------------------- 1 | from docutils import nodes 2 | from sphinx.util.nodes import set_source_info 3 | from sphinx.util.osutil import relative_uri 4 | 5 | # node that will have its link that is relative to root be made relative to 6 | # the referencing document 7 | class sibling_ref(nodes.General, nodes.Inline, nodes.TextElement): pass 8 | 9 | # This role interprets its argument as the name of a `val` in `sbt.Keys`. 10 | # The description of the key is used as the title and the name is linked to 11 | # the sxr documentation for the key. 12 | def sbt_key(name, rawtext, text, lineno, inliner, options={}, content=[]): 13 | refNode = sibling_ref('', '') 14 | refNode.keyName = text 15 | refNode.description = 'faked' 16 | return [refNode], [] 17 | 18 | # register the role 19 | # process_sibling_ref_nodes will replace sibling_ref nodes with proper links 20 | # purge_siblings drops data for changed documents 21 | def setup(app): 22 | app.add_role('key', sbt_key) 23 | app.add_node(sibling_ref) 24 | app.connect('doctree-resolved', process_sibling_ref_nodes) 25 | 26 | 27 | # Resolves sibling_ref links relative to the referencing document 28 | def process_sibling_ref_nodes(app, doctree, fromdocname): 29 | fromTargetURI = app.builder.get_target_uri(fromdocname) 30 | # resolves links for all sibling_ref nodes 31 | for node in doctree.traverse(sibling_ref): 32 | rellink = '../sxr/sbt/Keys.scala.html#sbt.Keys.%s' % node.keyName 33 | newuri = relative_uri(fromTargetURI, rellink) 34 | refNode = nodes.reference('', node.keyName, internal=False, refuri=newuri) 35 | refNode['classes'].append('pre') 36 | refNode['title'] = node.description 37 | node.replace_self(refNode) 38 | -------------------------------------------------------------------------------- /src/reference/_sphinx/exts/srcref.py: -------------------------------------------------------------------------------- 1 | from docutils import nodes 2 | from sphinx.util.nodes import set_source_info 3 | from sphinx.util.osutil import relative_uri 4 | import os 5 | 6 | # This role inserts a link to the source rST on GitHub. 7 | def srcref(name, rawtext, text, lineno, inliner, options={}, content=[]): 8 | srcPath = inliner.document.settings.env.docname 9 | srcUri = "%s%s.rst" % (os.environ['sbt.site.source.base'], srcPath) 10 | refNode = nodes.reference('', 'Source for this page', internal=False, refuri=srcUri) 11 | spanNode = nodes.paragraph() 12 | spanNode.append(refNode) 13 | spanNode['classes'].append('page-source') 14 | return [spanNode], [] 15 | 16 | # register the role 17 | def setup(app): 18 | app.add_role('srcref', srcref) 19 | 20 | -------------------------------------------------------------------------------- /src/reference/_sphinx/themes/sbt/static/dark-blue-bg-main.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/_sphinx/themes/sbt/static/dark-blue-bg-main.jpg -------------------------------------------------------------------------------- /src/reference/_sphinx/themes/sbt/static/dark-blue-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/_sphinx/themes/sbt/static/dark-blue-bg.png -------------------------------------------------------------------------------- /src/reference/_sphinx/themes/sbt/theme.conf: -------------------------------------------------------------------------------- 1 | [theme] 2 | inherit = basic 3 | stylesheet = style.css 4 | 5 | [options] 6 | full_logo = false 7 | -------------------------------------------------------------------------------- /src/reference/build.sbt: -------------------------------------------------------------------------------- 1 | lazy val root = (project in file(".")) 2 | .settings( 3 | name := "Hello", 4 | scalaVersion := "$example_scala_version$" 5 | ) 6 | -------------------------------------------------------------------------------- /src/reference/changes/index.md: -------------------------------------------------------------------------------- 1 | # Changes 2 | -------------------------------------------------------------------------------- /src/reference/concepts/index.md: -------------------------------------------------------------------------------- 1 | # Concepts 2 | -------------------------------------------------------------------------------- /src/reference/custom-202409.css: -------------------------------------------------------------------------------- 1 | html { 2 | font-family: "Lora"; 3 | } 4 | 5 | :root { 6 | font-size: 80%; 7 | } 8 | 9 | pre { 10 | border: solid 1px lightgray; 11 | line-height: 1.8rem; 12 | font-weight: 500; 13 | } 14 | 15 | code { 16 | font-family: 'Inconsolata', monospace !important; 17 | } 18 | 19 | p code { 20 | font-weight: 600; 21 | } 22 | 23 | li code { 24 | font-weight: 600; 25 | } 26 | 27 | h1 { 28 | font-family: 'Linux Biolinum'; 29 | } 30 | 31 | h1.menu-title { 32 | font-family: "Lora"; 33 | font-size: 1.5rem; 34 | } 35 | 36 | h2 { 37 | font-family: 'Linux Biolinum'; 38 | } 39 | 40 | h3 { 41 | font-family: 'Linux Biolinum'; 42 | } 43 | -------------------------------------------------------------------------------- /src/reference/custom-202410.css: -------------------------------------------------------------------------------- 1 | html { 2 | font-family: "Lora", "Noto Serif", 'serif'; 3 | } 4 | 5 | [lang=en] html { 6 | font-family: "Lora", 'serif'; 7 | } 8 | 9 | h1 { 10 | font-family: 'Linux Biolinum', "Noto Serif", 'serif'; 11 | } 12 | 13 | [lang=en] h1 { 14 | font-family: 'Linux Biolinum', 'serif'; 15 | } 16 | 17 | :root { 18 | font-size: 80%; 19 | } 20 | 21 | pre { 22 | border: solid 1px lightgray; 23 | line-height: 1.8rem; 24 | font-weight: 500; 25 | } 26 | 27 | code { 28 | font-family: 'Inconsolata', monospace !important; 29 | } 30 | 31 | p code { 32 | font-weight: 600; 33 | } 34 | 35 | li code { 36 | font-weight: 600; 37 | } 38 | 39 | h1.menu-title { 40 | font-family: "Lora", 41 | "Noto Serif", 'serif'; 42 | font-size: 1.5rem; 43 | } 44 | 45 | [lang=en] h1.menu-title { 46 | font-family: "Lora", 47 | 'serif'; 48 | font-size: 1.5rem; 49 | } 50 | 51 | h2 { 52 | font-family: 'Linux Biolinum', 53 | "Noto Serif", 'serif'; 54 | } 55 | 56 | [lang=en] h2 { 57 | font-family: 'Linux Biolinum', 'serif'; 58 | } 59 | 60 | h3 { 61 | font-family: 'Linux Biolinum', 62 | "Noto Serif", 'serif'; 63 | } 64 | 65 | [lang=en] h3 { 66 | font-family: 'Linux Biolinum', 'serif'; 67 | } -------------------------------------------------------------------------------- /src/reference/es/00-Getting-Started/00.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Getting-Started.html 3 | --- 4 | 5 | [Basic-Def]: Basic-Def.html 6 | [Scopes]: Scopes.html 7 | [Task-Graph]: Task-Graph.html 8 | 9 | Guía de inicio de sbt 10 | ====================== 11 | 12 | sbt utiliza unos cuantos conceptos que dan soporte a flexibles y poderosas 13 | definiciones de construcción (build definitions). 14 | No es que haya muchos conceptos, pero sbt no es exactamente como otros sistemas 15 | de construcción y algunos detalles te *confundirán* si no has leído la 16 | documentación. 17 | 18 | La Guía de inicio cubre los conceptos que necesitas conocer para crear y 19 | mantener una definición de construcción de sbt. 20 | 21 | ¡Es *altamente recomendable* leer la Guía de inicio! 22 | 23 | Si tienes prisa, los conceptos esenciales más importantes pueden ser encontrados 24 | en [Definiciones de construcción][Basic-Def], [Ámbitos][Scopes], y 25 | [Grafos de tareas][Task-Graph]. 26 | Aunque no te aseguramos que saltarte el resto de páginas de la guía sea una 27 | buena idea. 28 | 29 | Lo mejor es leerlas en orden, ya que las páginas finales de la Guía de inicio se 30 | basan en conceptos explicados antes. 31 | 32 | Gracias por probar sbt y... ¡*divértete*! 33 | -------------------------------------------------------------------------------- /src/reference/es/00-Getting-Started/01-Setup/00.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Setup.html 3 | --- 4 | 5 | [Basic-Def]: Basic-Def.html 6 | [Hello]: Hello.html 7 | [Running]: Running.html 8 | [Setup-Notes]: ../docs/Setup-Notes.html 9 | [Mac]: Installing-sbt-on-Mac.html 10 | [Windows]: Installing-sbt-on-Windows.html 11 | [Linux]: Installing-sbt-on-Linux.html 12 | 13 | Instalar sbt 14 | ------------ 15 | 16 | Para crear un proyecto sbt necesitarás realizar los siguientes pasos: 17 | 18 | - Instalar JDK (recomendamos Eclipse Adoptium Temurin JDK 8, 11, u 17). 19 | - Instalar sbt. 20 | - Configurar un proyecto [hola mundo][Hello] simple 21 | - Continuar con [Ejecución][Running] para aprender cómo ejecutar sbt. 22 | - Continuar con [Definición de construcción][Basic-Def] para aprender más 23 | acerca de definiciones de construcción. 24 | 25 | En última instancia, la instalación de sbt se reduce a un lanzador JAR y un 26 | script de shell, pero dependiendo de tu plataforma, proporcionamos varias formas 27 | de hacer el proceso menos tedioso. Echa un vistazo a los pasos de instalación para 28 | [macOS][Mac], [Windows][Windows], o [Linux][Linux]. 29 | 30 | ### Consejos y notas 31 | 32 | Si has tenido algún problema ejecutando sbt, revisa las 33 | [Notas sobre configuración][Setup-Notes] sobre codificaciones en el terminal, 34 | proxies HTTP y opciones de la JVM. 35 | -------------------------------------------------------------------------------- /src/reference/es/00-Getting-Started/01-Setup/a.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Installing-sbt-on-Mac.html 3 | --- 4 | 5 | [MSI]: $sbt_native_package_base$/v$app_version$/sbt-$windows_app_version$.msi 6 | [ZIP]: $sbt_native_package_base$/v$app_version$/sbt-$app_version$.zip 7 | [TGZ]: $sbt_native_package_base$/v$app_version$/sbt-$app_version$.tgz 8 | [Manual-Installation]: Manual-Installation.html 9 | [AdoptiumOpenJDK]: https://adoptium.net 10 | 11 | Instalar sbt on macOS 12 | --------------------- 13 | 14 | ### Install sbt with **cs setup** 15 | 16 | Follow [Install](https://www.scala-lang.org/download/) page, and install Scala using Coursier. This should install the latest stable version of `sbt`. 17 | 18 | ### Instalar JDK 19 | 20 | Sigue el link para instalar [JDK 8 u 11][AdoptiumOpenJDK]. 21 | 22 | Or use SDKMAN. 23 | 24 | #### [SDKMAN!](https://sdkman.io/) 25 | 26 | @@snip [install.sh]($root$/src/includes/install.sh) {} 27 | 28 | ### Instalar desde un paquete universal 29 | 30 | Descarga el paquete [ZIP][ZIP] o [TGZ][TGZ] y descomprímelo. 31 | 32 | ### Instalar desde un paquete de terceros 33 | 34 | > **Nota:** Puede que algunos paquetes de terceros no proporcionen la última versión. 35 | > Por favor, asegúrate de reportar cualquier problema con dichos paquetes a sus 36 | > respectivos mantenedores. 37 | 38 | #### [Homebrew](https://brew.sh/) 39 | 40 | ``` 41 | \$ brew install sbt 42 | ``` 43 | -------------------------------------------------------------------------------- /src/reference/es/00-Getting-Started/01-Setup/b.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Installing-sbt-on-Windows.html 3 | --- 4 | 5 | [MSI]: $sbt_native_package_base$/v$app_version$/sbt-$windows_app_version$.msi 6 | [ZIP]: $sbt_native_package_base$/v$app_version$/sbt-$app_version$.zip 7 | [TGZ]: $sbt_native_package_base$/v$app_version$/sbt-$app_version$.tgz 8 | [AdoptiumOpenJDK]: https://adoptium.net 9 | 10 | Instalar sbt en Windows 11 | ----------------------- 12 | 13 | ### Install sbt with **cs setup** 14 | 15 | Follow [Install](https://www.scala-lang.org/download/) page, and install Scala using Coursier. This should install the latest stable version of `sbt`. 16 | 17 | ### Instalar JDK 18 | 19 | Sigue el link para instalar [JDK 8 u 11][AdoptiumOpenJDK]. 20 | 21 | ### Instalar desde un paquete universal 22 | 23 | Descarga el paquete [ZIP][ZIP] o [TGZ][TGZ] y descomprímelo. 24 | 25 | ### Instalador Windows 26 | 27 | Descarga el [instalador msi][MSI] e instálalo. 28 | 29 | ### Instalar desde un paquete de terceros 30 | 31 | > **Nota:** Puede que algunos paquetes de terceros no proporcionen la última versión. 32 | > Por favor, asegúrate de reportar cualquier problema con dichos paquetes a sus 33 | > respectivos mantenedores. 34 | 35 | #### [Scoop](https://scoop.sh/) 36 | 37 | ``` 38 | \$ scoop install sbt 39 | ``` 40 | -------------------------------------------------------------------------------- /src/reference/es/00.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: index.html 3 | --- 4 | 5 | Manual de referencia de sbt 6 | =========================== 7 | -------------------------------------------------------------------------------- /src/reference/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/favicon.ico -------------------------------------------------------------------------------- /src/reference/files/bintray-include-my-package.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/bintray-include-my-package.png -------------------------------------------------------------------------------- /src/reference/files/bintray-include-package-form.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/bintray-include-package-form.png -------------------------------------------------------------------------------- /src/reference/files/bintray-link-plugin-search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/bintray-link-plugin-search.png -------------------------------------------------------------------------------- /src/reference/files/bintray-new-repo-dialog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/bintray-new-repo-dialog.png -------------------------------------------------------------------------------- /src/reference/files/bintray-new-repo-link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/bintray-new-repo-link.png -------------------------------------------------------------------------------- /src/reference/files/bintray-org-member-link-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/bintray-org-member-link-button.png -------------------------------------------------------------------------------- /src/reference/files/bintray-org-member-link-dialog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/bintray-org-member-link-dialog.png -------------------------------------------------------------------------------- /src/reference/files/bintray-repo-link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/bintray-repo-link.png -------------------------------------------------------------------------------- /src/reference/files/bintray-signup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/bintray-signup.png -------------------------------------------------------------------------------- /src/reference/files/cached-resolution.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/cached-resolution.png -------------------------------------------------------------------------------- /src/reference/files/classloaders.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/classloaders.png -------------------------------------------------------------------------------- /src/reference/files/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/favicon-16x16.png -------------------------------------------------------------------------------- /src/reference/files/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/favicon-32x32.png -------------------------------------------------------------------------------- /src/reference/files/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/favicon-96x96.png -------------------------------------------------------------------------------- /src/reference/files/github-logo-teal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/reference/files/github-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/github-logo.png -------------------------------------------------------------------------------- /src/reference/files/intellij1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/intellij1.png -------------------------------------------------------------------------------- /src/reference/files/intellij10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/intellij10.png -------------------------------------------------------------------------------- /src/reference/files/intellij11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/intellij11.png -------------------------------------------------------------------------------- /src/reference/files/intellij12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/intellij12.png -------------------------------------------------------------------------------- /src/reference/files/intellij2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/intellij2.png -------------------------------------------------------------------------------- /src/reference/files/intellij3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/intellij3.png -------------------------------------------------------------------------------- /src/reference/files/intellij4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/intellij4.png -------------------------------------------------------------------------------- /src/reference/files/intellij5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/intellij5.png -------------------------------------------------------------------------------- /src/reference/files/intellij6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/intellij6.png -------------------------------------------------------------------------------- /src/reference/files/intellij7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/intellij7.png -------------------------------------------------------------------------------- /src/reference/files/intellij8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/intellij8.png -------------------------------------------------------------------------------- /src/reference/files/intellij9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/intellij9.png -------------------------------------------------------------------------------- /src/reference/files/lightbend-icon-reverse.svg: -------------------------------------------------------------------------------- 1 | lightbend-icon -------------------------------------------------------------------------------- /src/reference/files/lightbend-icon_reverse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/lightbend-icon_reverse.png -------------------------------------------------------------------------------- /src/reference/files/lightbend_reverse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/lightbend_reverse.png -------------------------------------------------------------------------------- /src/reference/files/metals-completion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/metals-completion.png -------------------------------------------------------------------------------- /src/reference/files/metals-switch-build-server.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/metals-switch-build-server.png -------------------------------------------------------------------------------- /src/reference/files/metals0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/metals0.png -------------------------------------------------------------------------------- /src/reference/files/metals2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/metals2.png -------------------------------------------------------------------------------- /src/reference/files/metals3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/metals3.png -------------------------------------------------------------------------------- /src/reference/files/metals4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/metals4.png -------------------------------------------------------------------------------- /src/reference/files/metals5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/metals5.png -------------------------------------------------------------------------------- /src/reference/files/metals6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/metals6.png -------------------------------------------------------------------------------- /src/reference/files/module-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/module-diagram.png -------------------------------------------------------------------------------- /src/reference/files/nvim0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/nvim0.png -------------------------------------------------------------------------------- /src/reference/files/nvim1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/nvim1.png -------------------------------------------------------------------------------- /src/reference/files/nvim2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/nvim2.png -------------------------------------------------------------------------------- /src/reference/files/nvim3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/nvim3.png -------------------------------------------------------------------------------- /src/reference/files/nvim4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/nvim4.png -------------------------------------------------------------------------------- /src/reference/files/nvim5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/nvim5.png -------------------------------------------------------------------------------- /src/reference/files/nvim6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/nvim6.png -------------------------------------------------------------------------------- /src/reference/files/nvim7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/nvim7.png -------------------------------------------------------------------------------- /src/reference/files/nvim8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/nvim8.png -------------------------------------------------------------------------------- /src/reference/files/octicon-pencil.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | pencil 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/reference/files/overview-setting-example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/overview-setting-example.png -------------------------------------------------------------------------------- /src/reference/files/proxy-cloud-setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/proxy-cloud-setup.png -------------------------------------------------------------------------------- /src/reference/files/proxy-ivy-mvn-setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/proxy-ivy-mvn-setup.png -------------------------------------------------------------------------------- /src/reference/files/rgb_color_solid_cube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/rgb_color_solid_cube.png -------------------------------------------------------------------------------- /src/reference/files/sbt-configurations.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/sbt-configurations.png -------------------------------------------------------------------------------- /src/reference/files/sbt-logo-100x56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/sbt-logo-100x56.png -------------------------------------------------------------------------------- /src/reference/files/setting-expression.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/setting-expression.png -------------------------------------------------------------------------------- /src/reference/files/settings-initialization-load-ordering.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/settings-initialization-load-ordering.png -------------------------------------------------------------------------------- /src/reference/files/task-dependency00.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/task-dependency00.png -------------------------------------------------------------------------------- /src/reference/files/task-dependency01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/task-dependency01.png -------------------------------------------------------------------------------- /src/reference/files/task-dependency02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/task-dependency02.png -------------------------------------------------------------------------------- /src/reference/files/twitter-logo-teal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /src/reference/files/twitter-logo-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/twitter-logo-white.png -------------------------------------------------------------------------------- /src/reference/files/typesafe_sbt_reverse-pride.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/typesafe_sbt_reverse-pride.png -------------------------------------------------------------------------------- /src/reference/files/typesafe_sbt_reverse_png.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/typesafe_sbt_reverse_png.png -------------------------------------------------------------------------------- /src/reference/files/typesafe_sbt_reverse_svg.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/reference/files/typesafe_sbt_svg.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/reference/files/ubuntu-sources.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/ubuntu-sources.png -------------------------------------------------------------------------------- /src/reference/files/ubuntu-synaptic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/src/reference/files/ubuntu-synaptic.png -------------------------------------------------------------------------------- /src/reference/guide/01-Setup/00.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Setup.html 3 | --- 4 | 5 | [Basic-Def]: Basic-Def.html 6 | [Hello]: Hello.html 7 | [Running]: Running.html 8 | [Command-Line-Reference]: ../docs/Command-Line-Reference.html 9 | [Mac]: Installing-sbt-on-Mac.html 10 | [Windows]: Installing-sbt-on-Windows.html 11 | [Linux]: Installing-sbt-on-Linux.html 12 | 13 | Installing sbt 14 | -------------- 15 | 16 | To create an sbt project, you'll need to take these steps: 17 | 18 | - Install JDK (We recommend Eclipse Adoptium Temurin JDK 8, 11, or 17). 19 | - Install sbt. 20 | - Setup a simple [hello world][Hello] project 21 | - Move on to [running][Running] to learn how to run sbt. 22 | - Then move on to [.sbt build definition][Basic-Def] to learn more 23 | about build definitions. 24 | 25 | Ultimately, the installation of sbt boils down to a launcher JAR 26 | and a shell script, but depending on your platform, we provide 27 | several ways to make the process less tedious. Head over to the 28 | installation steps for [macOS][Mac], [Windows][Windows], or 29 | [Linux][Linux]. 30 | 31 | ### Tips and Notes 32 | 33 | If you have any trouble running sbt, see [Command line reference][Command-Line-Reference] on 34 | JVM options. 35 | -------------------------------------------------------------------------------- /src/reference/guide/01-Setup/a.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Installing-sbt-on-Mac.html 3 | --- 4 | 5 | [ZIP]: $sbt_native_package_base$/v$app_version$/sbt-$app_version$.zip 6 | [TGZ]: $sbt_native_package_base$/v$app_version$/sbt-$app_version$.tgz 7 | [Manual-Installation]: Manual-Installation.html 8 | [AdoptiumOpenJDK]: https://adoptium.net/ 9 | 10 | Installing sbt on macOS 11 | ----------------------- 12 | 13 | ### Install sbt with **cs setup** 14 | 15 | Follow [Install](https://www.scala-lang.org/download/) page, and install Scala using Coursier. This should install the latest stable version of `sbt`. 16 | 17 | ### Install JDK 18 | 19 | Follow the link to install [JDK 8 or 11][AdoptiumOpenJDK], or use [SDKMAN!](https://sdkman.io/). 20 | 21 | #### [SDKMAN!](https://sdkman.io/) 22 | 23 | @@snip [install.sh]($root$/src/includes/install.sh) {} 24 | 25 | ### Installing from a universal package 26 | 27 | Download [ZIP][ZIP] or [TGZ][TGZ] package, and expand it. 28 | 29 | ### Installing from a third-party package 30 | 31 | > **Note:** Third-party packages may not provide the latest version. Please make 32 | > sure to report any issues with these packages to the relevant 33 | > maintainers. 34 | 35 | #### [Homebrew](https://brew.sh/) 36 | 37 | ``` 38 | \$ brew install sbt 39 | ``` 40 | -------------------------------------------------------------------------------- /src/reference/guide/01-Setup/b.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Installing-sbt-on-Windows.html 3 | --- 4 | 5 | [MSI]: $sbt_native_package_base$/v$app_version$/sbt-$windows_app_version$.msi 6 | [ZIP]: $sbt_native_package_base$/v$app_version$/sbt-$app_version$.zip 7 | [TGZ]: $sbt_native_package_base$/v$app_version$/sbt-$app_version$.tgz 8 | [AdoptiumOpenJDK]: https://adoptium.net 9 | 10 | Installing sbt on Windows 11 | ------------------------- 12 | 13 | ### Install sbt with **cs setup** 14 | 15 | Follow [Install](https://www.scala-lang.org/download/) page, and install Scala using Coursier. This should install the latest stable version of `sbt`. 16 | 17 | ### Install JDK 18 | 19 | Follow the link to install [JDK 8 or 11][AdoptiumOpenJDK]. 20 | 21 | ### Installing from a universal package 22 | 23 | Download [ZIP][ZIP] or [TGZ][TGZ] package and expand it. 24 | 25 | ### Windows installer 26 | 27 | Download [msi installer][MSI] and install it. 28 | 29 | ### Installing from a third-party package 30 | 31 | > **Note:** Third-party packages may not provide the latest version. Please make 32 | > sure to report any issues with these packages to the relevant 33 | > maintainers. 34 | 35 | #### [Scoop](https://scoop.sh/) 36 | 37 | ``` 38 | \$ scoop install sbt 39 | ``` 40 | 41 | #### [Chocolatey](https://chocolatey.org) 42 | 43 | ``` 44 | \$ choco install sbt 45 | ``` 46 | -------------------------------------------------------------------------------- /src/reference/guide/IDE.md: -------------------------------------------------------------------------------- 1 | 2 | [metals]: https://scalameta.org/metals/ 3 | [intellij]: https://www.jetbrains.com/idea/ 4 | [vscode]: https://code.visualstudio.com/ 5 | [neovim]: https://neovim.io/ 6 | 7 | sbt with IDEs 8 | ============= 9 | 10 | While it's possible to code Scala with just an editor and sbt, 11 | most programmers today use an Integrated Development Environment, or IDE for short. 12 | Two of the popular IDEs in Scala are [Metals][metals] and [IntelliJ IDEA][intellij], and they both integrate with sbt builds. 13 | 14 | A few of the advantages of using the IDEs are: 15 | 16 | - Jump to definition 17 | - Code completion based on static types 18 | - Listing compilation errors, and jumping to the error positions 19 | - Interactive debugging 20 | 21 | Here are a few recipes on how to configure the IDEs to integrate with sbt: 22 | 23 | - [Use sbt as Metals build server](../recipes/use-sbt-as-metals-build-server.md) 24 | - [Import to IntelliJ IDEA](../recipes/import-to-intellij.md) 25 | - [Use Neovim](../recipes/use-neovim.md) 26 | -------------------------------------------------------------------------------- /src/reference/guide/index.md: -------------------------------------------------------------------------------- 1 | [Basic-Def]: Basic-Def.html 2 | [Scopes]: Scopes.html 3 | [Task-Graph]: Task-Graph.html 4 | 5 | Getting Started with sbt 6 | ======================== 7 | 8 | sbt uses a small number of concepts to support flexible and powerful 9 | build definitions. There are not that many concepts, but sbt is not 10 | exactly like other build systems and there are details you *will* 11 | stumble on if you haven't read the documentation. 12 | 13 | The Getting Started Guide covers the concepts you need to know to create 14 | and maintain an sbt build definition. 15 | 16 | It is *highly recommended* to read the Getting Started Guide! 17 | -------------------------------------------------------------------------------- /src/reference/guide/multi-project-basics.md: -------------------------------------------------------------------------------- 1 | 2 | [Basic-Def]: Basic-Def.html 3 | [Scopes]: Scopes.html 4 | [Directories]: Directories.html 5 | [Organizing-Build]: Organizing-Build.html 6 | 7 | Multi project basics 8 | ==================== 9 | 10 | While a simple program can start out as a single-project build, 11 | it's more common for a build to split into smaller, multiple subprojects. 12 | 13 | Each subproject in a build has its own source directories, generates 14 | its own JAR file when you run `packageBin`, and in general works like any 15 | other project. 16 | 17 | A project is defined by declaring a lazy val of type 18 | [Project](../../api/sbt/Project.html). For example, : 19 | 20 | ```scala 21 | scalaVersion := "{{scala3_example_version}}" 22 | 23 | lazy val core = (project in file("core")) 24 | .settings( 25 | name := "core", 26 | ) 27 | 28 | lazy val util = (project in file("util")) 29 | .dependsOn(core) 30 | .settings( 31 | name := "util", 32 | ) 33 | ``` 34 | 35 | The name of the val is used as the subproject's ID, which 36 | is used to refer to the subproject at the sbt shell. 37 | -------------------------------------------------------------------------------- /src/reference/ja/00-Getting-Started/00.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Getting-Started.html 3 | --- 4 | 5 | [Basic-Def]: Basic-Def.html 6 | [Scopes]: Scopes.html 7 | [Task-Graph]: Task-Graph.html 8 | 9 | 始める sbt 10 | ========= 11 | 12 | sbt には、柔軟かつ強力なビルド定義(Build Definition)を支えるための独自の概念がいくつか存在している。 13 | その概念は決して多くはないが、sbt は他のビルドシステムとは一味違うので、ドキュメントを読まずに使おうとすると、きっと細かい点でつまづいてしまうだろう。 14 | 15 | この「始める sbt」では、sbt ビルド定義を作成してメンテナンスしていく上で知っておくべき概念を説明していく。 16 | 17 | このガイドを一通り読んでおくことを_強く推奨したい_。 18 | 19 | もしどうしても時間がないというなら、最も重要な概念は 20 | [.sbt ビルド定義][Basic-Def]、 21 | [スコープ][Scopes]、と 22 | [タスク・グラフ][Task-Graph] 23 | に書かれている。 24 | ただし、それ以外のページを読み飛ばしても大丈夫かは保証できない。 25 | 26 | このガイドの読み方だが、後ろの方のページはその前のページで紹介された概念の理解を前提に書かれているので、最初から順番に読み進めていくのがベストだ。 27 | 28 | sbt を試してくれることに感謝する。_ぜひ楽しいんでほしい!_ 29 | 30 | > 誤訳の報告は[こちらへ](https://github.com/sbt/website/issues)。
31 | > sbt0.13での変更点や新機能に興味があるなら、[sbt 0.13.0 の変更点](http://eed3si9n.com/ja/node/142) を読むとよいだろう。 32 | -------------------------------------------------------------------------------- /src/reference/ja/00-Getting-Started/01-Setup/00.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Setup.html 3 | --- 4 | 5 | [Basic-Def]: Basic-Def.html 6 | [Hello]: Hello.html 7 | [Running]: Running.html 8 | [Setup-Notes]: ../../docs/Setup-Notes.html 9 | [Mac]: Installing-sbt-on-Mac.html 10 | [Windows]: Installing-sbt-on-Windows.html 11 | [Linux]: Installing-sbt-on-Linux.html 12 | 13 | sbt のインストール 14 | ---------------- 15 | 16 | sbt プロジェクトを作るためには、以下の手順をたどる必要がある: 17 | 18 | - JDK をインストールする。(Eclipse Adoptium Temurin JDK 8、11 もしくは 17 を推奨) 19 | - sbt をインストールする。 20 | - 簡単な [hello world][Hello] プロジェクトをセットアップする。 21 | - [実行する][Running]を読んで、sbt の実行方法を知る。 22 | - [.sbt ビルド定義][Basic-Def]を読んで、ビルド定義についてもっと詳しく知る。 23 | 24 | 究極的には sbt のインストールはランチャー JAR とシェルスクリプトの 2 つを用意するだけだが、 25 | 利用するプラットフォームによってはもう少し簡単なインストール方法もいくつか提供されている。 26 | [macOS][Mac]、[Windows][Windows]、もしくは 27 | [Linux][Linux] の手順を参照してほしい。 28 | 29 | ### 豆知識 30 | 31 | `sbt` の実行が上手くいかない場合は、[Setup Notes][Setup-Notes] のターミナルの文字エンコーディング、HTTP プロキシ、JVM のオプションに関する説明を参照してほしい。 32 | 33 | -------------------------------------------------------------------------------- /src/reference/ja/00-Getting-Started/01-Setup/a.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Installing-sbt-on-Mac.html 3 | --- 4 | 5 | [MSI]: $sbt_native_package_base$/v$app_version$/sbt-$windows_app_version$.msi 6 | [ZIP]: $sbt_native_package_base$/v$app_version$/sbt-$app_version$.zip 7 | [TGZ]: $sbt_native_package_base$/v$app_version$/sbt-$app_version$.tgz 8 | [Manual-Installation]: Manual-Installation.html 9 | [AdoptiumOpenJDK]: https://adoptium.net 10 | 11 | macOS への sbt のインストール 12 | -------------------------- 13 | 14 | ### **cs setup** を用いた sbt のインストール 15 | 16 | [Install](https://www.scala-lang.org/download/) に従い Coursier を用いて Scala をインストールする。これは最新の安定版の `sbt` を含む。 17 | 18 | ### JDK のインストール 19 | 20 | リンクをたどって [JDK 8 もしくは JDK 11][AdoptiumOpenJDK] をインストールする、 21 | もしくは [SDKMAN!](https://sdkman.io/) を使う。 22 | 23 | #### [SDKMAN!](https://sdkman.io/) 24 | 25 | @@snip [install.sh]($root$/src/includes/install.sh) {} 26 | 27 | ### ユニバーサルパッケージからのインストール 28 | 29 | [ZIP][ZIP] か [TGZ][TGZ] をダウンロードしてきて解凍する。 30 | 31 | ### サードパーティパッケージを使ってのインストール 32 | 33 | > **注意:** サードパーティが提供するパッケージは最新版を使っているとは限らない。 34 | > 何か問題があれば、パッケージメンテナに報告してほしい。 35 | 36 | #### [Homebrew](https://brew.sh/) 37 | 38 | ``` 39 | \$ brew install sbt 40 | ``` 41 | -------------------------------------------------------------------------------- /src/reference/ja/00-Getting-Started/01-Setup/b.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Installing-sbt-on-Windows.html 3 | --- 4 | 5 | [MSI]: $sbt_native_package_base$/v$app_version$/sbt-$windows_app_version$.msi 6 | [ZIP]: $sbt_native_package_base$/v$app_version$/sbt-$app_version$.zip 7 | [TGZ]: $sbt_native_package_base$/v$app_version$/sbt-$app_version$.tgz 8 | [AdoptiumOpenJDK]: https://adoptium.net 9 | 10 | Windows への sbt のインストール 11 | ---------------------------- 12 | 13 | ### **cs setup** を用いた sbt のインストール 14 | 15 | [Install](https://www.scala-lang.org/download/) に従い Coursier を用いて Scala をインストールする。これは最新の安定版の `sbt` を含む。 16 | 17 | ### JDK のインストール 18 | 19 | リンクをたどって [JDK 8 もしくは JDK 11][AdoptiumOpenJDK] をインストールする。 20 | 21 | ### ユニバーサルパッケージからのインストール 22 | 23 | [ZIP][ZIP] か [TGZ][TGZ] をダウンロードしてきて解凍する。 24 | 25 | ### Windows インストーラ 26 | 27 | [msi インストーラ][MSI]をダウンロードしてインストールする。 28 | 29 | ### サードパーティパッケージを使ってのインストール 30 | 31 | > **注意:** サードパーティが提供するパッケージは最新版を使っているとは限らない。 32 | > 何か問題があれば、パッケージメンテナに報告してほしい。 33 | 34 | #### [Scoop](https://scoop.sh/) 35 | 36 | ``` 37 | \$ scoop install sbt 38 | ``` 39 | -------------------------------------------------------------------------------- /src/reference/ja/00-Getting-Started/14-Bare-Def.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Bare-Def.html 3 | --- 4 | 5 | [Full-Def]: Full-Def.html 6 | [Basic-Def]: Basic-Def.html 7 | 8 | 付録: bare .sbt ビルド定義 9 | ------------------------ 10 | 11 | このページでは旧式の `.sbt` ビルド定義の説明をする。 12 | 現在の推奨は[マルチプロジェクト .sbt ビルド定義][Basic-Def]だ。 13 | 14 | ### bare .sbt ビルド定義とは何か 15 | 16 | 明示的に [Project](../../api/sbt/Project.html) を定義する 17 | [マルチプロジェクト .sbt ビルド定義][Basic-Def]や [.scala ビルド定義][Full-Def]と違って 18 | bare ビルド定義は `.sbt` ファイルの位置から暗黙にプロジェクトが定義される。 19 | 20 | `Project` を定義する代わりに、bare `.sbt` ビルド定義は `Setting[_]` 式のリストから構成される。 21 | 22 | ```scala 23 | name := "hello" 24 | 25 | version := "1.0" 26 | 27 | scalaVersion := "$example_scala_version$" 28 | ``` 29 | 30 | ### (0.13.7 以前) 設定は空白行で区切る 31 | 32 | **注意**: 0.13.7 以降は空白行の区切りを必要としない。 33 | 34 | こんな風に `build.sbt` を書くことはできない。 35 | 36 | ```scala 37 | // 空白行がない場合はコンパイルしない 38 | name := "hello" 39 | version := "1.0" 40 | scalaVersion := "2.10.3" 41 | ``` 42 | 43 | sbt はどこまでで式が終わってどこからが次の式なのかを判別するために、何らかの区切りを必要とする。 44 | -------------------------------------------------------------------------------- /src/reference/ja/00.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: index.html 3 | --- 4 | 5 | sbt Reference Manual 6 | ==================== 7 | -------------------------------------------------------------------------------- /src/reference/ja/01-General-Info/00.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: General-Info.html 3 | --- 4 | 5 | インフォメーション 6 | --------------- 7 | 8 | 一般的な情報。 9 | -------------------------------------------------------------------------------- /src/reference/ja/01-General-Info/Changes/00.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Changes.html 3 | --- 4 | 5 | 変更点 6 | ------ 7 | 8 | sbt のリリースごとの変更点など。 9 | -------------------------------------------------------------------------------- /src/reference/ja/02-DetailTopics/00.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Detailed-Topics.html 3 | --- 4 | 5 | 各論 6 | ---- 7 | 8 | -------------------------------------------------------------------------------- /src/reference/ja/02-DetailTopics/05-Plugins-and-Best-Practices/00.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Plugins-and-Best-Practices.html 3 | --- 4 | 5 | [Getting-Started]: Getting-Started.html 6 | 7 | プラグインとベストプラクティス 8 | -------------------------- 9 | 10 | このパートでは,sbtの各トピックを詳細に扱う。 11 | これを読む前に、基礎知識として[始める sbt](Getting-Started)を読む必要があるだろう。 12 | -------------------------------------------------------------------------------- /src/reference/ja/04-Howto/00.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Howto.html 3 | --- 4 | 5 | How to 6 | ------ 7 | 8 | How to 記事の一覧は[目次](Contents+in+Depth.html)を参照してください。 9 | -------------------------------------------------------------------------------- /src/reference/ja/04-Howto/20-Howto-Sequencing/00.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Howto-Sequencing.html 3 | --- 4 | 5 | [ExecutionSemantics]: Custom-Settings.html#Execution+semantics+of+tasks 6 | 7 | 逐次実行 8 | ------- 9 | 10 | sbt で最もよくある質問の一つに「X をやった後で Y をするにはどうすればいいのか?」というものがある。 11 | 12 | 一般論としては、sbt のタスクはそのように作られていない。なぜなら、build.sbt はタスクの依存グラフ作るための DSL だからだ。これに関しては[タスクの実行意味論][ExecutionSemantics]で解説してある。そのため、理想的にはタスク Y を自分で定義して、そこからタスク X に依存させるべきだ。 13 | 14 | ```scala 15 | taskY := { 16 | val x = taskX.value 17 | x + 1 18 | } 19 | ``` 20 | 21 | これは、以下のような、副作用のあるメソッド呼び出しを続けて行っているような命令型の素の Scala と比べるとより制限されていると言える: 22 | 23 | ```scala 24 | def foo(): Unit = { 25 | doX() 26 | doY() 27 | } 28 | ``` 29 | 30 | この依存指向なプログラミング・モデルの利点は sbt のタスク・エンジンがタスクの実行の順序を入れ替えることができることにある。実際、可能な限り sbt は依存タスクを並列に実行する。もう一つの利点は、グラフを非重複化して一回のコマンド実行に対して `Compile / compile` などのタスクは一度だけ実行することで、同じソースを何度もコンパイルすることを回避している。 31 | 32 | タスク・システムがこのような設計になっているため、何かを逐次実行させるというのは一応可能ではあるけども、システムの流れに反する行為であり、簡単だとは言えない。 33 | 34 | - [Def.sequential を用いて逐次タスクを定義する](Howto-Sequential-Task.html) 35 | - [Def.taskDyn を用いて動的タスクを定義する](Howto-Dynamic-Task.html) 36 | - [タスクの後で何かする](Howto-After-Input-Task.html) 37 | - [Def.inputTaskDyn を用いた動的インプットタスクの定義](Howto-Dynamic-Input-Task.html) 38 | - [コマンドを用いた逐次実行](Howto-Sequence-using-Commands.html) 39 | -------------------------------------------------------------------------------- /src/reference/ja/04-Howto/20-Howto-Sequencing/01-Howto-Sequential-Task.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Howto-Sequential-Task.html 3 | --- 4 | 5 | ### Def.sequential を用いて逐次タスクを定義する 6 | 7 | sbt 0.13.8 で `Def.sequential` という関数が追加されて、準逐次な意味論でタスクを実行できるようになった。 8 | 逐次タスクの説明として `compilecheck` というカスタムタスクを定義してみよう。これは、まず `Compile / compile` を実行して、その後で [scalastyle-sbt-plugin](http://www.scalastyle.org/sbt.html) の `Compile / scalastyle` を呼び出す。 9 | 10 | セットアップはこのようになる。 11 | 12 | #### project/build.properties 13 | 14 | ``` 15 | sbt.version=$app_version$ 16 | ``` 17 | 18 | #### project/style.sbt 19 | 20 | ``` 21 | addSbtPlugin("org.scalastyle" %% "scalastyle-sbt-plugin" % "1.0.0") 22 | ``` 23 | 24 | #### build.sbt 25 | 26 | ```scala 27 | lazy val compilecheck = taskKey[Unit]("compile and then scalastyle") 28 | 29 | lazy val root = (project in file(".")) 30 | .settings( 31 | Compile / compilecheck := Def.sequential( 32 | Compile / compile, 33 | (Compile / scalastyle).toTask("") 34 | ).value 35 | ) 36 | ``` 37 | 38 | このタスクを呼び出すには、シェルから `compilecheck` と打ち込む。もしコンパイルが失敗すると、`compilecheck` はそこで実行を中止する。 39 | 40 | ``` 41 | root> compilecheck 42 | [info] Compiling 1 Scala source to /Users/x/proj/target/scala-2.10/classes... 43 | [error] /Users/x/proj/src/main/scala/Foo.scala:3: Unmatched closing brace '}' ignored here 44 | [error] } 45 | [error] ^ 46 | [error] one error found 47 | [error] (compile:compileIncremental) Compilation failed 48 | ``` 49 | 50 | これで、タスクを逐次実行できた。 51 | -------------------------------------------------------------------------------- /src/reference/ja/04-Howto/20-Howto-Sequencing/02-Howto-Dynamic-Task.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Howto-Dynamic-Task.html 3 | --- 4 | 5 | [Howto-Sequential-Task]: Howto-Sequential-Task.html 6 | [Tasks]: Tasks.html 7 | 8 | ### Def.taskDyn を用いて動的タスクを定義する 9 | 10 | [逐次タスク][Howto-Sequential-Task]だけで十分じゃなければ、次のステップは[動的タスク][Tasks]だ。純粋な型 `A` の値を返すことを期待する `Def.task` と違って、`Def.taskDyn` は `sbt.Def.Initialize[sbt.Task[A]]` という型のタスク・エンジンが残りの計算を継続するタスクを返す。 11 | 12 | `Compile / compile` を実行した後で [scalastyle-sbt-plugin](http://www.scalastyle.org/sbt.html) の `Compile / scalastyle` タスクを実行するカスタムタスク、`compilecheck` を実装してみよう。 13 | 14 | #### project/build.properties 15 | 16 | ``` 17 | sbt.version=$app_version$ 18 | ``` 19 | 20 | #### project/style.sbt 21 | 22 | ``` 23 | addSbtPlugin("org.scalastyle" %% "scalastyle-sbt-plugin" % "1.0.0") 24 | ``` 25 | 26 | #### build.sbt v1 27 | 28 | ```scala 29 | lazy val compilecheck = taskKey[sbt.inc.Analysis]("compile and then scalastyle") 30 | 31 | lazy val root = (project in file(".")) 32 | .settings( 33 | compilecheck := (Def.taskDyn { 34 | val c = (Compile / compile).value 35 | Def.task { 36 | val x = (Compile / scalastyle).toTask("").value 37 | c 38 | } 39 | }).value 40 | ) 41 | ``` 42 | 43 | これで逐次タスクと同じものができたけども、違いは最初のタスクの結果である `c` を返していることだ。 44 | 45 | #### build.sbt v2 46 | 47 | `Compile / compile` の戻り値と同じ型を返せるようになったので、もとのキーをこの動的タスクで再配線 (rewire) できるかもしれない。 48 | 49 | ```scala 50 | lazy val root = (project in file(".")) 51 | .settings( 52 | Compile / compile := (Def.taskDyn { 53 | val c = (Compile / compile).value 54 | Def.task { 55 | val x = (Compile / scalastyle).toTask("").value 56 | c 57 | } 58 | }).value 59 | ) 60 | ``` 61 | 62 | これで、`Compile / compile` をシェルから呼び出してやりたかったことをやらせれるようになった。 63 | -------------------------------------------------------------------------------- /src/reference/ja/04-Howto/20-Howto-Sequencing/03-Howto-After-Input-Task.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Howto-After-Input-Task.html 3 | --- 4 | 5 | [Input-Tasks]: Input-Tasks.html 6 | 7 | ### インプットタスクの後で何かする 8 | 9 | ここまでタスクに焦点を当ててみてきた。タスクには他にインプットタスクというものがあって、これはユーザからの入力をシェル上で受け取る。 10 | 典型的な例としては `Compile / run` タスクがある。`scalastyle` タスクも実はインプットタスクだ。インプットタスクの詳細は [Input Task][Input-Tasks] 参照。 11 | 12 | ここで、`Compile / run` タスクの実行後にテスト用にブラウザを開く方法を考えてみる。 13 | 14 | #### src/main/scala/Greeting.scala 15 | 16 | ```scala 17 | object Greeting { 18 | def main(args: Array[String]): Unit = { 19 | println("hello " + args.toList) 20 | } 21 | } 22 | ``` 23 | 24 | #### build.sbt v1 25 | 26 | ```scala 27 | lazy val runopen = inputKey[Unit]("run and then open the browser") 28 | 29 | lazy val root = (project in file(".")) 30 | .settings( 31 | runopen := { 32 | (Compile / run).evaluated 33 | println("open browser!") 34 | } 35 | ) 36 | ``` 37 | 38 | ここでは、ブラウザを本当に開く代わりに副作用のある `println` で例示した。シェルからこのタスクを呼び出してみよう: 39 | 40 | ``` 41 | > runopen foo 42 | [info] Compiling 1 Scala source to /x/proj/... 43 | [info] Running Greeting foo 44 | hello List(foo) 45 | open browser! 46 | ``` 47 | 48 | #### build.sbt v2 49 | 50 | この新しいインプットタスクを `Compile / run` に再配線することで、実は `runopen` キーを外すことができる: 51 | 52 | ```scala 53 | lazy val root = (project in file(".")) 54 | .settings( 55 | Compile / run := { 56 | (Compile / run).evaluated 57 | println("open browser!") 58 | } 59 | ) 60 | ``` 61 | -------------------------------------------------------------------------------- /src/reference/ja/04-Howto/20-Howto-Sequencing/05-Howto-Sequence-using-Commands.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Howto-Sequence-using-Commands.html 3 | --- 4 | 5 | ### コマンドを用いた逐次実行 6 | 7 | 副作用にしか使っていなくて、人間がコマンドを打ち込んでいるのを真似したいだけならば、カスタムコマンドを作れば済むことかもしれない。これは例えば、リリース手順とかに役立つ。 8 | 9 | これは sbt そのもののビルドスクリプトから抜粋だ: 10 | 11 | ```scala 12 | commands += Command.command("releaseNightly") { state => 13 | "stampVersion" :: 14 | "clean" :: 15 | "compile" :: 16 | "publish" :: 17 | "bintrayRelease" :: 18 | state 19 | } 20 | ``` 21 | -------------------------------------------------------------------------------- /src/reference/ja/layouts/footer.md: -------------------------------------------------------------------------------- 1 |
2 | 20 |
21 | 22 | 23 | -------------------------------------------------------------------------------- /src/reference/ja/layouts/header.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 23 | 24 | 37 | -------------------------------------------------------------------------------- /src/reference/layouts/footer.md: -------------------------------------------------------------------------------- 1 |
2 | 20 |
21 | 22 | 23 | 24 | 31 | -------------------------------------------------------------------------------- /src/reference/recipes/hello-world.md: -------------------------------------------------------------------------------- 1 | How to write hello world 2 | ======================== 3 | 4 | Objective 5 | --------- 6 | 7 | I want to write a hello world program in Scala, and run it. 8 | 9 | Steps 10 | ----- 11 | 12 | 1. Create a fresh directory, like `hello_scala/` 13 | 2. Create a directory named `project/` under `hello_scala/`, and create `project/build.properties` with 14 | ``` 15 | sbt.version={{sbt_version}} 16 | ``` 17 | 3. Under `hello_scala/`, create `build.sbt`: 18 | ```scala 19 | scalaVersion := "{{scala3_example_version}}" 20 | ``` 21 | 4. Under `hello_scala/`, create `Hello.scala`: 22 | ```scala 23 | @main def main(args: String*): Unit = 24 | println(s"Hello ${args.mkString}") 25 | ``` 26 | 5. Navigate to `hello_scala/` from the terminal, and run `sbt`: 27 | ```bash 28 | $ sbt 29 | ``` 30 | 6. When the prompt appears, type `run`: 31 | ```scala 32 | sbt:hello_scala> run 33 | ``` 34 | 7. Type `exit` to exit the sbt shell: 35 | ```scala 36 | sbt:hello_scala> exit 37 | ``` 38 | 39 | Alternatives 40 | ------------ 41 | 42 | When you're in a hurry, you can run `sbt init` in a fresh directory, and select the first template. 43 | -------------------------------------------------------------------------------- /src/reference/recipes/index.md: -------------------------------------------------------------------------------- 1 | # Recipes 2 | -------------------------------------------------------------------------------- /src/reference/reference/index.md: -------------------------------------------------------------------------------- 1 | # Reference 2 | -------------------------------------------------------------------------------- /src/reference/reference/sbt-run.md: -------------------------------------------------------------------------------- 1 | sbt run 2 | ======= 3 | 4 | Synopsis 5 | -------- 6 | 7 | `sbt run` 8 | 9 | Description 10 | ----------- 11 | 12 | The `run` task provides a means for running the user program. 13 | 14 | In sbt 1.x and earlier, `run` task ran the user program in the same Java virtual machine (JVM) as the sbt server. sbt 2.x implements _client-side run_: the `run` task creates a sandbox environment that contains the program, sends the information back to sbtn, and sbtn launches the user program in a fresh JVM. 15 | 16 | ### Motivations 17 | 18 | There are several motivations for the client-side run. 19 | 20 | #### sys.exit 21 | 22 | User code can call `sys.exit`, which normally shuts down the JVM. 23 | In sbt 1.x, we needed to trap these `sys.exit` calls to prevent `run` from shutting down the sbt session, using the JDK SecurityManager; however, TrapExit was dropped in sbt 1.6.0 (2021) since JDK 17 deprecated SecurityManager feature. 24 | 25 | #### Isolation 26 | 27 | User code can also start threads, or otherwise allocate resources that can be left running after the main method returns. Running user code in a separate JVM gives isolation between the sbt server and the user code. 28 | 29 | #### sbt server availability 30 | 31 | Since the program will run outside of the sbt server, it can become available to the more requests by other clients, for example test or IDE integration. 32 | -------------------------------------------------------------------------------- /src/reference/template.properties: -------------------------------------------------------------------------------- 1 | app_version=1.9.8 2 | windows_app_version=1.9.8 3 | 4 | color_scheme=github 5 | example_scala_version=2.12.20 6 | example_scala213=2.13.16 7 | example_scala211=2.11.12 8 | example_scalacheck_version=1.18.1 9 | example_specs2_version=4.20.9 10 | example_scalatest_version=3.2.19 11 | example_akka_version=2.6.21 12 | example_scala_stm_version=0.9.1 13 | scala_binary_version=2.12 14 | scala_version=2.12.20 15 | global_base=\$HOME/.sbt/1.0 16 | global_plugins_base=\$HOME/.sbt/1.0/plugins/ 17 | global_plugin_sbt_file=\$HOME/.sbt/1.0/plugins/build.sbt 18 | global_shellprompt_scala=\$HOME/.sbt/1.0/plugins/ShellPrompt.scala 19 | global_sbt_file=\$HOME/.sbt/1.0/global.sbt 20 | sbt_native_package_base=https://github.com/sbt/sbt/releases/download 21 | sbt_deb_package_base=https://dl.bintray.com/sbt/debian/ 22 | sbt_rpm_package_base=https://dl.bintray.com/sbt/rpm/ 23 | launcher_release_base=https://repo1.maven.org/maven2/org/scala-sbt/sbt-launch/ 24 | typesafe_ivy_snapshots=https://repo.typesafe.com/typesafe/ivy-snapshots/ 25 | apidoc_base=https://www.scala-sbt.org/1.x 26 | layout.header=header.md 27 | layout.header.height=80px 28 | layout.footer=footer.md 29 | twitter=#sbt #scala 30 | pamflet.arrow=> 31 | 32 | languages=en,ja,zh-cn,es 33 | lang-zh-cn=中文 (简体) 34 | language=en 35 | -------------------------------------------------------------------------------- /src/reference/zh-cn/00-Getting-Started/00.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Getting-Started.html 3 | --- 4 | 5 | [Basic-Def]: Basic-Def.html 6 | [Scopes]: Scopes.html 7 | [More-About-Settings]: More-About-Settings.html 8 | 9 | sbt 入门 10 | ======================== 11 | 12 | sbt 使用少数的几个概念来支撑它灵活并且强大的构建定义。其实没有太多的概念,但是 sbt 并不完全像其他的构建体系,而且如果你没有看过文档的话,你偶尔 *将会* 遇到一些细节问题。 13 | 14 | 这篇入门指南覆盖了一些你在创建和维护一个 sbt 构建定义时需要知道的概念。 15 | 16 | *强烈建议*看完该入门指南! 17 | 18 | 如果你非常急切,你可以直接进入以下几小节了解最重要的概念背景 [.sbt 构建定义][Basic-Def],[scopes][Scopes],[更多关于设置][More-About-Settings]。 19 | 但是我们不保证跳过该指南中的其他小节是一个好的想法。 20 | 21 | 最好是按顺序阅读,因为该指南中后面的小节建立在前面介绍的概念的基础上。 22 | 23 | 感谢尝试 sbt 并且 *体验其中的乐趣* ! 24 | -------------------------------------------------------------------------------- /src/reference/zh-cn/00-Getting-Started/01-Setup/00.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Setup.html 3 | --- 4 | 5 | [Basic-Def]: Basic-Def.html 6 | [Hello]: Hello.html 7 | [Running]: Running.html 8 | [Setup-Notes]: ../docs/Setup-Notes.html 9 | [Mac]: Installing-sbt-on-Mac.html 10 | [Windows]: Installing-sbt-on-Windows.html 11 | [Linux]: Installing-sbt-on-Linux.html 12 | 13 | 安装 sbt 14 | -------------- 15 | 16 | 创建一个 sbt 工程,你需要经过以下几步: 17 | 18 | - 安装 JDK (建议使用 Eclipse Adoptium Temurin JDK 8, 11, 或 17)。 19 | - 安装 sbt 并且创建脚本来运行它。 20 | - 建立一个简单的 [hello world][Hello] 工程 21 | - 创建一个工程目录并且将源文件放在其中。 22 | - 创建你的构建定义。 23 | - 继续前往 [运行 sbt][Running] 学习怎么运行 sbt。 24 | - 然后前往 [.sbt 构建定义][Basic-Def] 学习更多关于构建的定义。 25 | 26 | 27 | 最后,安装步骤就简化为一个 Jar 文件和一个 Shell 脚本,但是取决于你的平台,我们提供了好几种方式来使得步骤不是那么单调。 [macOS][Mac],[Windows][Windows],或[Linux][Linux] 提供了相应的安装步骤。 28 | 29 | ### 提示和技巧 30 | 31 | 如果你在运行 sbt 时遇到任何问题,查看 [安装建议][Setup-Notes] 中的终端编码(terminal encoding),HTTP 代理,JVM 参数。 32 | -------------------------------------------------------------------------------- /src/reference/zh-cn/00-Getting-Started/01-Setup/a.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Installing-sbt-on-Mac.html 3 | --- 4 | 5 | [MSI]: $sbt_native_package_base$/v$app_version$/sbt-$windows_app_version$.msi 6 | [ZIP]: $sbt_native_package_base$/v$app_version$/sbt-$app_version$.zip 7 | [TGZ]: $sbt_native_package_base$/v$app_version$/sbt-$app_version$.tgz 8 | [Manual-Installation]: Manual-Installation.html 9 | 10 | 在 macOS 上安装 sbt 11 | --------------------- 12 | 13 | ### Install sbt with **cs setup** 14 | 15 | Follow [Install](https://www.scala-lang.org/download/) page, and install Scala using Coursier. This should install the latest stable version of `sbt`. 16 | 17 | ### Install JDK 18 | 19 | Follow the link to install [JDK 8 or 11][AdoptOpenJDK], or use SDKMAN! 20 | 21 | #### 通过 [SDKMAN!](https://sdkman.io/) 安装 22 | 23 | @@snip [install.sh]($root$/src/includes/install.sh) {} 24 | 25 | ### 通过通用的包安装 26 | 27 | 下载 [ZIP][ZIP] 或者 [TGZ][TGZ] 包并解压。 28 | 29 | ### 通过第三方的包安装 30 | 31 | > **注意:** 第三方的包可能没有提供最新的版本,请记得将任何问题反馈给这些包相关的维护者。 32 | 33 | #### 通过 [Homebrew](https://brew.sh/) 安装 34 | 35 | ``` 36 | \$ brew install sbt 37 | ``` 38 | -------------------------------------------------------------------------------- /src/reference/zh-cn/00-Getting-Started/01-Setup/b.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Installing-sbt-on-Windows.html 3 | --- 4 | 5 | [MSI]: $sbt_native_package_base$/v$app_version$/sbt-$windows_app_version$.msi 6 | [ZIP]: $sbt_native_package_base$/v$app_version$/sbt-$app_version$.zip 7 | [TGZ]: $sbt_native_package_base$/v$app_version$/sbt-$app_version$.tgz 8 | 9 | 在 Windows 上安装 sbt 10 | ------------------------- 11 | 12 | ### Install sbt with **cs setup** 13 | 14 | Follow [Install](https://www.scala-lang.org/download/) page, and install Scala using Coursier. This should install the latest stable version of `sbt`. 15 | 16 | ### 通过通用的安装包安装 17 | 18 | 下载 [ZIP][ZIP] 或者 [TGZ][TGZ] 包并解压。 19 | 20 | ### 通过 Windows 安装包安装 21 | 22 | 下载 [msi 安装包][MSI] 并安装。 23 | 24 | ### 通过第三方的包安装 25 | 26 | > **注意:** 第三方的包可能没有提供最新的版本,请记得将任何问题反馈给这些包相关的维护者。 27 | 28 | #### 通过 [Scoop](https://scoop.sh/) 安装 29 | 30 | ``` 31 | \$ scoop install sbt 32 | ``` 33 | -------------------------------------------------------------------------------- /src/reference/zh-cn/00-Getting-Started/02-Hello.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Hello.html 3 | --- 4 | 5 | [Basic-Def]: Basic-Def.html 6 | [Setup]: Setup.html 7 | 8 | Hello, World 9 | ------------ 10 | 11 | 这一小节假设你已经 [安装 sbt][Setup] 了。 12 | 13 | ### 创建一个有源码的项目目录 14 | 15 | 一个合法的 sbt 项目可以是一个包含单个源码文件的目录。 16 | 尝试创建一个 `hello` 目录,包含内容如下的源码文件 `hw.scala`: 17 | 18 | ```scala 19 | object Hi { 20 | def main(args: Array[String]) = println("Hi!") 21 | } 22 | ``` 23 | 24 | 现在在 `hello` 目录下启动 sbt,然后执行 `run` 命令进入到 sbt 的交互式命令行。在 Linux 或者 OS X 上的命令可能是这样: 25 | 26 | ``` 27 | \$ mkdir hello 28 | \$ cd hello 29 | \$ echo 'object Hi { def main(args: Array[String]) = println("Hi!") }' > hw.scala 30 | \$ sbt 31 | ... 32 | > run 33 | ... 34 | Hi! 35 | ``` 36 | 37 | 在这个例子中,sbt 完全按照约定工作。sbt 将会自动找到以下内容: 38 | 39 | - 项目根目录下的源文件 40 | - `src/main/scala` 或 `src/main/java` 中的源文件 41 | - `src/test/scala` 或 `src/test/java` 中的测试文件 42 | - `src/main/resources` 或 `src/test/resources` 中的数据文件 43 | - `lib` 中的 jar 文件 44 | 45 | 默认情况下,sbt 会用和启动自身相同版本的 Scala 来构建项目。 46 | 你可以通过执行 `sbt run` 来运行项目或者通过 `sbt console` 进入 [Scala REPL](http://www.scala-lang.org/node/2097)。`sbt console` 已经帮你 47 | 设置好项目的 classpath,所以你可以根据项目的代码尝试实际的 Scala 示例。 48 | 49 | ### 构建定义 50 | 51 | 大多数项目需要一些手动设置。基本的构建设置都放在项目根目录的 `build.sbt` 文件里。 52 | 例如,如果你的项目放在 `hello` 下,在 `hello/build.sbt` 中可以这样写: 53 | 54 | ```scala 55 | lazy val root = (project in file(".")) 56 | .settings( 57 | name := "hello", 58 | version := "1.0", 59 | scalaVersion := "$example_scala_version$" 60 | ) 61 | ``` 62 | 63 | 在 [.sbt 构建定义][Basic-Def] 这节中你将会学到更多关于 64 | 如何编写 `build.sbt` 脚本的东西。 65 | 66 | 如果你准备将你的项目打包成一个 jar 包,在 `build.sbt` 中至少要写上 name 和 version。 67 | 68 | ### 设置 sbt 版本 69 | 70 | 你可以通过创建 `hello/project/build.properties` 文件强制指定一个版本的 sbt。在这个文件里,编写如下内容来强制使用 $app_version$: 71 | 72 | ``` 73 | sbt.version=$app_version$ 74 | ``` 75 | 76 | sbt 在不同的 release 版本中是 99% 兼容的。但是在 `project/build.properties` 文件中设置 sbt 的版本仍然能避免一些潜在的混淆。 77 | -------------------------------------------------------------------------------- /src/reference/zh-cn/00-Getting-Started/03-Directories.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Directories.html 3 | --- 4 | 5 | [Hello]: Hello.html 6 | [Setup]: Setup.html 7 | [Organizing-Build]: Organizing-Build.html 8 | 9 | 目录结构 10 | ------------------- 11 | 12 | 这一小节假设你已经 [安装 sbt][Setup] 并且已经阅读过 [Hello, World][Hello] 了。 13 | 14 | ### 基础目录 15 | 16 | 在 sbt 的术语里,“基础目录”是包含项目的目录。所以,如果你创建了一个和 [Hello, World][Hello] 一样的项目 `hello` ,包含 `hello/build.sbt` 和 `hello/hw.scala`, `hello` 就是基础目录。 17 | 18 | ### 源代码 19 | 20 | 源代码可以像 `hello/hw.scala` 一样的放在项目的基础目录中。然而,大多数人不会在真实的项目中这样做,因为太杂乱了。 21 | sbt 和 [Maven](https://maven.apache.org/) 的默认的源文件的目录结构是一样的(所有的路径都是相对于基础目录的): 22 | 23 | ``` 24 | src/ 25 | main/ 26 | resources/ 27 | 28 | scala/ 29 |
30 | scala-2.12/ 31 |
32 | java/ 33 |
34 | test/ 35 | resources 36 | 37 | scala/ 38 | 39 | scala-2.12/ 40 | 41 | java/ 42 | 43 | ``` 44 | 45 | `src/` 中其他的目录将被忽略。而且,所有的隐藏目录也会被忽略。 46 | 47 | ### sbt 构建定义文件 48 | 49 | 你已经在项目的基础目录中看到了 `build.sbt`。其他的 sbt 文件在 `project` 子目录中。 50 | `project` 目录可以包含 `.scala` 文件,这些文件最后会和 `.sbt` 文件合并共同构成完整的构建定义。想知道更多请参见 [组织构建][Organizing-Build]。 51 | 52 | ``` 53 | build.sbt 54 | project/ 55 | Build.scala 56 | ``` 57 | 58 | 你可能在 `project/` 中也看到了 `.sbt` 文件,但是它不等同于项目基础目录中的 `.sbt` 文件。这将在 [稍后][Organizing-Build] 解释,因为首先你需要一些背景知识。 59 | 60 | ### 构建产品 61 | 62 | 构建出来的文件(编译的 classes,打包的 jars,托管文件,caches 和文档)默认写在 `target` 目录中。 63 | 64 | ### 配置版本管理 65 | 66 | 你的 `.gitignore` 文件(或者其他版本控制系统等同的文件)应该包含: 67 | 68 | ``` 69 | target/ 70 | ``` 71 | 72 | 注意:这里后面需要跟一个 `/` (只匹配目录)且前面不能有 `/` (除了匹配普通的 `target/` 还匹配 `project/target/` )。 -------------------------------------------------------------------------------- /src/reference/zh-cn/00-Getting-Started/07B-Appending-Values.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Appending-Values.html 3 | --- 4 | 5 | [Basic-Def]: Basic-Def.html 6 | [Scopes]: Scopes.html 7 | 8 | 追加值 9 | ----- 10 | 11 | ### 追加值: `+=` 和 `++=` 12 | 13 | 通过 `:=` 方法赋值是最简单的转换,但是 key 也有很多其他的方法。如果 `SettingKey[T]` 中的 `T` 是一个列表,例如,一个 key 的值的类型是 sequence,你就可以往列表中追加而不是替换。 14 | 15 | - `+=` 会追加单个元素到列表中。 16 | - `++=` 会连接两个列表。 17 | 18 | 例如,一个 key `Compile / sourceDirectories` 的值是 `Seq[File]`。默认情况下该 key 的值会包含 `src/main/scala`。如果你也想编译叫做 source 的目录下的源代码(因为你不得不成为非标准的),你可以添加该目录: 19 | 20 | ```scala 21 | Compile / sourceDirectories += new File("source") 22 | ``` 23 | 24 | 或者,遵循约定使用 sbt 包中的 `file()` 函数: 25 | 26 | ```scala 27 | Compile / sourceDirectories += file("source") 28 | ``` 29 | 30 | (`file()` 只是创建了一个新的`File`。) 31 | 32 | 你可以用 `++=` 一次添加多个目录: 33 | 34 | ```scala 35 | Compile / sourceDirectories ++= Seq(file("sources1"), file("sources2")) 36 | ``` 37 | 38 | `Seq(a, b, c, ...)` 是 Scala 用来构建列表的标准语法。 39 | 40 | 要完全替换默认的 source 目录,当然可以使用 `:=` 方法: 41 | 42 | ```scala 43 | Compile / sourceDirectories := Seq(file("sources1"), file("sources2")) 44 | ``` 45 | 46 | #### 当设置未定义时 47 | 48 | 无论何时一个设置用 `:=`,`+=` 或者 `++=` 时依赖于自己或者另一个 key 的值,它依赖的值必须存在。如果不存在,sbt 就会抱怨。例如,它可能会说 *“引用了未定义的设置”*。 49 | 当这发生时,确认一下你使用的 key 在 [scope][Scopes] 中并且已经定义了。 50 | 51 | 在sbt中创建循环引用是可能的,这是错误的;如果你循环引用了,sbt 会告诉你。 52 | 53 | #### 依赖于其他 key 的值的 task 54 | 55 | 你可以计算一些 task 或者 setting 的值来定义另一个 task 或者为另一个 task 追加值。通过使用 `Def.task` 作为`:=`, `+=` 或者 `++=`的参数可以做到。 56 | 57 | 作为第一个例子,考虑追加一个使用项目基目录和编译 classpath 的 source generator。 58 | 59 | ```scala 60 | Compile / sourceGenerators += Def.task { 61 | myGenerator(baseDirectory.value, (Compile / managedClasspath).value) 62 | } 63 | ``` 64 | 65 | ### 追加依赖:`+=` 和 `++=` 66 | 67 | 当追加到一个已经存在的 setting 或者 task 时可以使用另一些 key,就像它们可以通过 `:=` 赋值一样。例如,比方说你有一个以项目名称命名的覆盖率报告,而且你想在每次清除文件的时候都清除它: 68 | 69 | ```scala 70 | cleanFiles += file("coverage-report-" + name.value + ".txt") 71 | ``` 72 | -------------------------------------------------------------------------------- /src/reference/zh-cn/00-Getting-Started/13-Summary.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: Summary.html 3 | --- 4 | 5 | [Basic-Def]: Basic-Def.html 6 | [Scopes]: Scopes.html 7 | [Using-Plugins]: Using-Plugins.html 8 | [getting-help]: ../docs/faq.html#getting-help 9 | 10 | 总结 11 | ----------------------- 12 | 13 | 这一节将入门指南总结一下。 14 | 15 | 为了使用 sbt,有一些概念你必须理解。这有一些学习曲线,但是乐观的讲, *除了* 这些概念对于 sbt 并不多。sbt 用一小部分核心概念来使得它工作。 16 | 17 | 如果你已经阅读过所有的入门指南,现在你知道了你需要知道什么。 18 | 19 | ### sbt: 核心概念 20 | 21 | - Scala 基础。不可否认,熟悉 Scala 语法非常有帮助。[Programming in Scala](https://www.artima.com/shop/programming_in_scala_3ed),Scala 的作者写的非常好的介绍。 22 | - [.sbt 构建定义][Basic-Def] 23 | - 你的构建定义是一个大的 `Setting` 对象列表,sbt 使用 `Setting` 转换之后的键值对执行 task。 24 | - 为了创建 `Setting`,在一个 key 上调用其中的一个方法:`:=`,`+=` 或者 `++=`。 25 | - 没有可变的状态,至于转换;例如,一个 `Setting` 将 sbt 的键值对集合转换成一个新的集合。不会就地改变任何代码。 26 | - 每一个设置都有一个特定类型的值,由 key 决定。 27 | - *tasks* 是特殊的设置,通过 key 产生 value 的计算在每次出发 task 的时候都会重新执行。Non-task 计算只会在构建定义的第一次加载时执行。 28 | - [Scopes][Scopes] 29 | - 每一个 key 都可能有多个 value,按照 scope 划分。 30 | - scope 会用三个轴:configuration,project,task。 31 | - scope 允许你按项目、按 task、按 configuration 有不同的行为。 32 | - 一个 configuration 是一种类型的构建,例如 `Compile` 或者 `Test`。 33 | - project 轴也支持 "构建全局" scope。 34 | - scopes 回滚或 *代理* 到更通用的 scope。 35 | - 将大部分配置放在 `build.sbt` 中,但是用 `.scala` 构建定义文件定义类和更大的 task 实现。 36 | - 构建定义是一个 sbt 项目,来自于项目目录。 37 | - [插件][Using-Plugins]是对构建定义的扩展 38 | - 通过在 `addSbtPlugin` 方法在 `project/plugins.sbt` 中添加插件。(不是在项目基目录下的 `build.sbt` 中)。 39 | 40 | 如果你怀疑这些细枝末节中的任何一个,请[寻求帮助][getting-help],返回重新阅读或者在 sbt 的交互式命令行中做实验。 41 | 42 | 祝你好运! 43 | 44 | ### 附录 45 | 46 | 因为 sbt 是一个开源项目,别忘记签出项目[源代码](https://github.com/sbt/sbt)! 47 | -------------------------------------------------------------------------------- /src/reference/zh-cn/00.md: -------------------------------------------------------------------------------- 1 | --- 2 | out: index.html 3 | --- 4 | 5 | sbt Reference Manual 6 | ==================== 7 | -------------------------------------------------------------------------------- /src/reference/zh-cn/layouts/footer.md: -------------------------------------------------------------------------------- 1 |
2 | 20 |
21 | 22 | 23 | -------------------------------------------------------------------------------- /src/reference/zh-cn/layouts/header.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 23 | 24 | 37 | -------------------------------------------------------------------------------- /src/sbt-test/ref/bare/build.sbt: -------------------------------------------------------------------------------- 1 | scalaVersion := "3.3.3" 2 | name := "Hello" -------------------------------------------------------------------------------- /src/sbt-test/ref/bare/test: -------------------------------------------------------------------------------- 1 | > about 2 | -------------------------------------------------------------------------------- /src/sbt-test/ref/basic/build.sbt: -------------------------------------------------------------------------------- 1 | lazy val root = (project in file(".")) 2 | .settings( 3 | scalaVersion := "3.3.3", 4 | name := "Hello", 5 | ) 6 | -------------------------------------------------------------------------------- /src/sbt-test/ref/basic/test: -------------------------------------------------------------------------------- 1 | > name 2 | -------------------------------------------------------------------------------- /src/sbt-test/ref/caching-file-function/README.md: -------------------------------------------------------------------------------- 1 | test 2 | -------------------------------------------------------------------------------- /src/sbt-test/ref/caching-file-function/build.sbt: -------------------------------------------------------------------------------- 1 | lazy val countInput = taskKey[Seq[File]]("") 2 | lazy val countFiles = taskKey[Seq[File]]("") 3 | 4 | def doCount(in: Set[File], outDir: File): Set[File] = 5 | in map { source => 6 | val out = outDir / source.getName 7 | val c = IO.readLines(source).size 8 | IO.write(out, c + "\n") 9 | out 10 | } 11 | 12 | lazy val root = (project in file(".")) 13 | .settings( 14 | countInput := 15 | sbt.nio.file.FileTreeView.default 16 | .list(Glob(baseDirectory.value + "/*.md")) 17 | .map(_._1.toFile), 18 | countFiles := { 19 | val s = streams.value 20 | val in = countInput.value 21 | val t = crossTarget.value 22 | 23 | // wraps a function doCount in an up-to-date check 24 | val cachedFun = FileFunction.cached(s.cacheDirectory / "count") { (in: Set[File]) => 25 | doCount(in, t): Set[File] 26 | } 27 | // Applies the cached function to the inputs files 28 | cachedFun(in.toSet).toSeq.sorted 29 | }, 30 | ) 31 | -------------------------------------------------------------------------------- /src/sbt-test/ref/caching-file-function/test: -------------------------------------------------------------------------------- 1 | > countFiles 2 | -------------------------------------------------------------------------------- /src/sbt-test/ref/custom-config/build.sbt: -------------------------------------------------------------------------------- 1 | ThisBuild / scalaVersion := "2.13.4" 2 | ThisBuild / version := "0.1.0-SNAPSHOT" 3 | 4 | lazy val root = (project in file(".")) 5 | .configs(Fuzz) 6 | .enablePlugins(FuzzPlugin, ScalafmtCliPlugin) 7 | .settings( 8 | name := "use", 9 | ) 10 | -------------------------------------------------------------------------------- /src/sbt-test/ref/custom-config/project/FuzzPlugin.scala: -------------------------------------------------------------------------------- 1 | package com.example.sbtfuzz 2 | 3 | import sbt._ 4 | 5 | object FuzzPlugin extends AutoPlugin { 6 | object autoImport { 7 | lazy val Fuzz = config("fuzz") 8 | } 9 | import autoImport._ 10 | override lazy val projectSettings = 11 | inConfig(Fuzz)(Defaults.configSettings) 12 | } 13 | -------------------------------------------------------------------------------- /src/sbt-test/ref/custom-config/project/ScalafmtPlugin.scala: -------------------------------------------------------------------------------- 1 | package com.example 2 | 3 | import sbt._ 4 | import Keys._ 5 | 6 | object ScalafmtCliPlugin extends AutoPlugin { 7 | object autoImport { 8 | lazy val ScalafmtSandbox = config("scalafmt").hide 9 | lazy val scalafmt = inputKey[Unit]("") 10 | } 11 | import autoImport._ 12 | override lazy val projectSettings = Seq( 13 | ivyConfigurations += ScalafmtSandbox, 14 | libraryDependencies += "org.scalameta" %% "scalafmt-cli" % "2.7.5" % ScalafmtSandbox, 15 | scalafmt := (ScalafmtSandbox / run).evaluated 16 | ) ++ inConfig(ScalafmtSandbox)( 17 | Seq( 18 | run := Defaults.runTask(managedClasspath, run / mainClass, run / runner) 19 | .evaluated, 20 | managedClasspath := Classpaths.managedJars( 21 | ScalafmtSandbox, 22 | classpathTypes.value, 23 | update.value, 24 | ) 25 | ) ++ 26 | inTask(run)( 27 | Seq( 28 | mainClass := Some("org.scalafmt.cli.Cli"), 29 | fork := true, // to avoid exit 30 | ) ++ Defaults.runnerSettings 31 | ) 32 | ) 33 | } 34 | -------------------------------------------------------------------------------- /src/sbt-test/ref/custom-config/test: -------------------------------------------------------------------------------- 1 | > scalafmt 2 | -------------------------------------------------------------------------------- /src/sbt-test/ref/example-custom-config/test: -------------------------------------------------------------------------------- 1 | > name 2 | -------------------------------------------------------------------------------- /src/sbt-test/ref/example-library/build.sbt: -------------------------------------------------------------------------------- 1 | scalaVersion := "3.3.3" 2 | organization := "com.example" 3 | name := "Hello" 4 | libraryDependencies ++= Seq( 5 | "org.scala-lang" %% "toolkit" % "0.1.7", 6 | "org.scala-lang" %% "toolkit-test" % "0.1.7" % Test, 7 | ) 8 | -------------------------------------------------------------------------------- /src/sbt-test/ref/example-library/test: -------------------------------------------------------------------------------- 1 | > Test/compile 2 | -------------------------------------------------------------------------------- /src/sbt-test/ref/example-name/build.sbt: -------------------------------------------------------------------------------- 1 | scalaVersion := "3.3.3" 2 | organization := "com.example" 3 | name := "Hello" 4 | -------------------------------------------------------------------------------- /src/sbt-test/ref/example-name/test: -------------------------------------------------------------------------------- 1 | > name 2 | -------------------------------------------------------------------------------- /src/sbt-test/ref/example-sub1/build.sbt: -------------------------------------------------------------------------------- 1 | scalaVersion := "3.3.3" 2 | organization := "com.example" 3 | 4 | lazy val hello = project 5 | .in(file(".")) 6 | .settings( 7 | name := "Hello", 8 | libraryDependencies ++= Seq( 9 | "org.scala-lang" %% "toolkit" % "0.1.7", 10 | "org.scala-lang" %% "toolkit-test" % "0.1.7" % Test 11 | ) 12 | ) 13 | 14 | lazy val helloCore = project 15 | .in(file("core")) 16 | .settings( 17 | name := "Hello Core" 18 | ) 19 | -------------------------------------------------------------------------------- /src/sbt-test/ref/example-sub1/test: -------------------------------------------------------------------------------- 1 | > helloCore/compile 2 | -------------------------------------------------------------------------------- /src/sbt-test/ref/example-sub2/build.sbt: -------------------------------------------------------------------------------- 1 | scalaVersion := "3.3.3" 2 | organization := "com.example" 3 | 4 | val toolkitTest = "org.scala-lang" %% "toolkit-test" % "0.1.7" 5 | 6 | lazy val hello = project 7 | .in(file(".")) 8 | .settings( 9 | name := "Hello", 10 | libraryDependencies ++= Seq( 11 | "org.scala-lang" %% "toolkit" % "0.1.7", 12 | toolkitTest % Test 13 | ) 14 | ) 15 | 16 | lazy val helloCore = project 17 | .in(file("core")) 18 | .settings( 19 | name := "Hello Core", 20 | libraryDependencies += toolkitTest % Test 21 | ) 22 | -------------------------------------------------------------------------------- /src/sbt-test/ref/example-sub2/test: -------------------------------------------------------------------------------- 1 | > helloCore/test 2 | -------------------------------------------------------------------------------- /src/sbt-test/ref/example-sub3/build.sbt: -------------------------------------------------------------------------------- 1 | scalaVersion := "3.3.3" 2 | organization := "com.example" 3 | 4 | val toolkitTest = "org.scala-lang" %% "toolkit-test" % "0.1.7" 5 | 6 | lazy val hello = project 7 | .in(file(".")) 8 | .aggregate(helloCore) 9 | .settings( 10 | name := "Hello", 11 | libraryDependencies ++= Seq( 12 | "org.scala-lang" %% "toolkit" % "0.1.7", 13 | toolkitTest % Test 14 | ) 15 | ) 16 | 17 | lazy val helloCore = project 18 | .in(file("core")) 19 | .settings( 20 | name := "Hello Core", 21 | libraryDependencies += toolkitTest % Test 22 | ) 23 | -------------------------------------------------------------------------------- /src/sbt-test/ref/example-sub3/test: -------------------------------------------------------------------------------- 1 | > testQuick 2 | -------------------------------------------------------------------------------- /src/sbt-test/ref/example-sub4/build.sbt: -------------------------------------------------------------------------------- 1 | scalaVersion := "3.3.3" 2 | organization := "com.example" 3 | 4 | val toolkitTest = "org.scala-lang" %% "toolkit-test" % "0.1.7" 5 | 6 | lazy val hello = project 7 | .in(file(".")) 8 | .aggregate(helloCore) 9 | .dependsOn(helloCore) 10 | .settings( 11 | name := "Hello", 12 | libraryDependencies += toolkitTest % Test 13 | ) 14 | 15 | lazy val helloCore = project 16 | .in(file("core")) 17 | .settings( 18 | name := "Hello Core", 19 | libraryDependencies += "org.scala-lang" %% "toolkit" % "0.1.7", 20 | libraryDependencies += toolkitTest % Test 21 | ) 22 | -------------------------------------------------------------------------------- /src/sbt-test/ref/example-sub4/test: -------------------------------------------------------------------------------- 1 | > Test/compile 2 | -------------------------------------------------------------------------------- /src/sbt-test/ref/example-test/build.sbt: -------------------------------------------------------------------------------- 1 | scalaVersion := "3.3.3" 2 | organization := "com.example" 3 | name := "Hello" 4 | libraryDependencies += "org.scala-lang" %% "toolkit-test" % "0.1.7" % Test 5 | -------------------------------------------------------------------------------- /src/sbt-test/ref/example-test/changes/HelloSuite.scala: -------------------------------------------------------------------------------- 1 | package example 2 | 3 | class HelloSuite extends munit.FunSuite: 4 | test("Hello should start with H") { 5 | assert("Hello".startsWith("H")) 6 | } 7 | end HelloSuite 8 | -------------------------------------------------------------------------------- /src/sbt-test/ref/example-test/src/test/scala/example/HelloSuite.scala: -------------------------------------------------------------------------------- 1 | package example 2 | 3 | class HelloSuite extends munit.FunSuite: 4 | test("Hello should start with H") { 5 | assert("hello".startsWith("H")) 6 | } 7 | end HelloSuite 8 | -------------------------------------------------------------------------------- /src/sbt-test/ref/example-test/test: -------------------------------------------------------------------------------- 1 | > compile 2 | -> testQuick 3 | $copy-file changes/HelloSuite.scala src/test/scala/example/HelloSuite.scala 4 | > testQuick 5 | -------------------------------------------------------------------------------- /src/sbt-test/ref/example-weather/build.sbt: -------------------------------------------------------------------------------- 1 | ThisBuild / scalaVersion := "2.13.12" 2 | ThisBuild / organization := "com.example" 3 | 4 | val toolkitTest = "org.scala-lang" %% "toolkit-test" % "0.1.7" 5 | 6 | lazy val hello = project 7 | .in(file(".")) 8 | .aggregate(helloCore) 9 | .dependsOn(helloCore) 10 | .settings( 11 | name := "Hello", 12 | libraryDependencies += toolkitTest % Test 13 | ) 14 | 15 | lazy val helloCore = project 16 | .in(file("core")) 17 | .settings( 18 | name := "Hello Core", 19 | libraryDependencies += "org.scala-lang" %% "toolkit" % "0.1.7", 20 | libraryDependencies += toolkitTest % Test 21 | ) 22 | -------------------------------------------------------------------------------- /src/sbt-test/ref/example-weather/changes/build.sbt: -------------------------------------------------------------------------------- 1 | ThisBuild / scalaVersion := "2.13.12" 2 | ThisBuild / organization := "com.example" 3 | 4 | val toolkitTest = "org.scala-lang" %% "toolkit-test" % "0.1.7" 5 | 6 | lazy val hello = project 7 | .in(file(".")) 8 | .aggregate(helloCore) 9 | .dependsOn(helloCore) 10 | .enablePlugins(JavaAppPackaging) 11 | .settings( 12 | name := "Hello", 13 | libraryDependencies += toolkitTest % Test, 14 | maintainer := "A Scala Dev!" 15 | ) 16 | 17 | lazy val helloCore = project 18 | .in(file("core")) 19 | .settings( 20 | name := "Hello Core", 21 | libraryDependencies += "org.scala-lang" %% "toolkit" % "0.1.7", 22 | libraryDependencies += toolkitTest % Test 23 | ) 24 | -------------------------------------------------------------------------------- /src/sbt-test/ref/example-weather/changes/build3.sbt: -------------------------------------------------------------------------------- 1 | ThisBuild / version := "0.1.0" 2 | ThisBuild / scalaVersion := "2.13.12" 3 | ThisBuild / organization := "com.example" 4 | 5 | val toolkitTest = "org.scala-lang" %% "toolkit-test" % "0.1.7" 6 | 7 | lazy val hello = project 8 | .in(file(".")) 9 | .aggregate(helloCore) 10 | .dependsOn(helloCore) 11 | .enablePlugins(JavaAppPackaging) 12 | .settings( 13 | name := "Hello", 14 | libraryDependencies += toolkitTest % Test, 15 | maintainer := "A Scala Dev!" 16 | ) 17 | 18 | lazy val helloCore = project 19 | .in(file("core")) 20 | .settings( 21 | name := "Hello Core", 22 | libraryDependencies += "org.scala-lang" %% "toolkit" % "0.1.7", 23 | libraryDependencies += toolkitTest % Test 24 | ) 25 | -------------------------------------------------------------------------------- /src/sbt-test/ref/example-weather/changes/plugins.sbt: -------------------------------------------------------------------------------- 1 | addSbtPlugin("com.github.sbt" % "sbt-native-packager" % "1.9.4") 2 | -------------------------------------------------------------------------------- /src/sbt-test/ref/example-weather/core/src/main/scala/example/core/Weather.scala: -------------------------------------------------------------------------------- 1 | package example.core 2 | 3 | import sttp.client4.quick._ 4 | import sttp.client4.Response 5 | 6 | object Weather { 7 | def weather() = { 8 | val response: Response[String] = quickRequest 9 | .get( 10 | uri"https://api.open-meteo.com/v1/forecast?latitude=$newYorkLatitude&longitude=$newYorkLongitude¤t_weather=true" 11 | ) 12 | .send() 13 | val json = ujson.read(response.body) 14 | json.obj("current_weather")("temperature").num 15 | } 16 | 17 | private val newYorkLatitude: Double = 40.7143 18 | private val newYorkLongitude: Double = -74.006 19 | } 20 | -------------------------------------------------------------------------------- /src/sbt-test/ref/example-weather/src/main/scala/example/Hello.scala: -------------------------------------------------------------------------------- 1 | package example 2 | 3 | import example.core.Weather 4 | 5 | object Hello { 6 | def main(args: Array[String]): Unit = { 7 | val temp = Weather.weather() 8 | println(s"Hello! The current temperature in New York is $temp C.") 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /src/sbt-test/ref/example-weather/test: -------------------------------------------------------------------------------- 1 | > run 2 | $ copy-file changes/plugins.sbt project/plugins.sbt 3 | $ copy-file changes/build.sbt build.sbt 4 | > reload 5 | > dist 6 | $ copy-file changes/build3.sbt build.sbt 7 | > reload 8 | -------------------------------------------------------------------------------- /src/sbt-test/ref/plugins-hello/project/HelloPlugin.scala: -------------------------------------------------------------------------------- 1 | package sbthello 2 | 3 | import sbt._ 4 | import Keys._ 5 | 6 | object HelloPlugin extends AutoPlugin { 7 | override def trigger = allRequirements 8 | 9 | object autoImport { 10 | val helloGreeting = settingKey[String]("greeting") 11 | val hello = taskKey[Unit]("say hello") 12 | } 13 | 14 | import autoImport._ 15 | override lazy val globalSettings: Seq[Setting[_]] = Seq( 16 | helloGreeting := "hi", 17 | ) 18 | 19 | override lazy val projectSettings: Seq[Setting[_]] = Seq( 20 | hello := { 21 | val s = streams.value 22 | val g = helloGreeting.value 23 | s.log.info(g) 24 | } 25 | ) 26 | } 27 | -------------------------------------------------------------------------------- /src/sbt-test/ref/plugins-hello/test: -------------------------------------------------------------------------------- 1 | > hello 2 | -------------------------------------------------------------------------------- /src/sbt-test/ref/plugins-obfuscate/build.sbt: -------------------------------------------------------------------------------- 1 | ThisBuild / version := "0.1.0-SNAPSHOT" 2 | ThisBuild / organization := "com.example" 3 | ThisBuild / homepage := Some(url("https://github.com/sbt/sbt-obfuscate")) 4 | 5 | lazy val root = (project in file(".")) 6 | .enablePlugins(SbtPlugin) 7 | .settings( 8 | name := "sbt-obfuscate", 9 | pluginCrossBuild / sbtVersion := { 10 | scalaBinaryVersion.value match { 11 | case "2.12" => "1.2.8" // set minimum sbt version 12 | } 13 | } 14 | ) 15 | -------------------------------------------------------------------------------- /src/sbt-test/ref/plugins-obfuscate/test: -------------------------------------------------------------------------------- 1 | > compile 2 | -------------------------------------------------------------------------------- /src/sbt-test/ref/scope-delegation/build.sbt: -------------------------------------------------------------------------------- 1 | lazy val x = project 2 | -------------------------------------------------------------------------------- /src/sbt-test/ref/scope-delegation/pending: -------------------------------------------------------------------------------- 1 | > x/foo 2 | -------------------------------------------------------------------------------- /src/sbt-test/ref/scope-delegation/x/build.sbt: -------------------------------------------------------------------------------- 1 | // #fig1 2 | lazy val foo = settingKey[Int]("") 3 | lazy val bar = settingKey[Int]("") 4 | 5 | lazy val projX = (project in file("x")) 6 | .settings( 7 | foo := { 8 | (Test / bar).value + 1 9 | }, 10 | Compile / bar := 1 11 | ) 12 | // #fig1 13 | 14 | // #fig_c 15 | ThisBuild / packageBin / scalaVersion := "2.12.2" 16 | 17 | lazy val projC = (project in file("c")) 18 | .settings( 19 | name := { 20 | "foo-" + (packageBin / scalaVersion).value 21 | }, 22 | scalaVersion := "2.11.11" 23 | ) 24 | // #fig_c 25 | 26 | // #fig_d 27 | ThisBuild / scalacOptions += "-Ywarn-unused-import" 28 | 29 | lazy val projD = (project in file("d")) 30 | .settings( 31 | test := { 32 | println((Compile / console / scalacOptions).value) 33 | }, 34 | console / scalacOptions -= "-Ywarn-unused-import", 35 | Compile / scalacOptions := scalacOptions.value // added by sbt 36 | ) 37 | // #fig_d 38 | -------------------------------------------------------------------------------- /src/sbt-test/ref/scopes/build.sbt: -------------------------------------------------------------------------------- 1 | // #unscoped 2 | organization := name.value 3 | // #unscoped 4 | 5 | // #confScoped 6 | Compile / name := "hello" 7 | // #confScoped 8 | 9 | // #taskScoped 10 | packageBin / name := "hello" 11 | // #taskScoped 12 | 13 | // #confAndTaskScoped 14 | Compile / packageBin / name := "hello" 15 | // #confAndTaskScoped 16 | 17 | // #global 18 | // same as Zero / Zero / Zero / concurrentRestrictions 19 | Global / concurrentRestrictions := Seq( 20 | Tags.limitAll(1) 21 | ) 22 | // #global 23 | -------------------------------------------------------------------------------- /src/sbt-test/ref/scopes/test: -------------------------------------------------------------------------------- 1 | > name 2 | -------------------------------------------------------------------------------- /static/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/.nojekyll -------------------------------------------------------------------------------- /static/.well-known/atproto-did: -------------------------------------------------------------------------------- 1 | did:plc:cbicwmnsngxpzvehrpx2n6ul 2 | -------------------------------------------------------------------------------- /static/assets/arc.js: -------------------------------------------------------------------------------- 1 | $(function () { 2 | var os_name = 'Unknown'; 3 | var ua = navigator.userAgent; 4 | if (ua.match('Win')) os_name = 'Windows'; 5 | if (ua.match('Mac')) os_name = 'MacOS'; 6 | if (ua.match('X11')) os_name = 'UNIX'; 7 | if (ua.match('Linux')) os_name = 'Linux'; 8 | 9 | if (os_name !== 'MacOS') { 10 | $('div.arc_mac').hide(); 11 | } // if 12 | if (os_name !== 'Windows') { 13 | $('div.arc_windows').hide(); 14 | } 15 | if (os_name !== 'Linux') { 16 | $('div.arc_linux').hide(); 17 | } 18 | }); 19 | -------------------------------------------------------------------------------- /static/assets/artifactory_black_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/assets/artifactory_black_green.png -------------------------------------------------------------------------------- /static/assets/community-support.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/assets/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/assets/favicon-16x16.png -------------------------------------------------------------------------------- /static/assets/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/assets/favicon-32x32.png -------------------------------------------------------------------------------- /static/assets/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/assets/favicon-96x96.png -------------------------------------------------------------------------------- /static/assets/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/assets/favicon.ico -------------------------------------------------------------------------------- /static/assets/github-logo-teal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /static/assets/github-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/assets/github-logo.png -------------------------------------------------------------------------------- /static/assets/github-theme.css: -------------------------------------------------------------------------------- 1 | pre, 2 | pre code, 3 | tt { 4 | font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Courier, monospace; 5 | } 6 | 7 | code.prettyprint span.str { 8 | color: #dd1144 9 | } 10 | code.prettyprint span.kwd { 11 | color: #000000; 12 | font-weight: bold; 13 | } 14 | code.prettyprint span.com { 15 | color: #999988; 16 | font-style: italic; 17 | } 18 | code.prettyprint span.typ { 19 | color: #445588; 20 | font-weight: bold; 21 | } 22 | code.prettyprint span.lit { 23 | color: #009999 24 | } 25 | code.prettyprint span.pun { 26 | color: #000000; 27 | font-weight: bold; 28 | } 29 | code.prettyprint span.pln { 30 | color: #000000 31 | } 32 | code.prettyprint span.tag { 33 | color: navy 34 | } 35 | code.prettyprint span.atn { 36 | color: teal 37 | } 38 | code.prettyprint span.atv { 39 | color: #dd1144 40 | } 41 | code.prettyprint span.dec { 42 | color: #990000 43 | } 44 | code.prettyprint span.var { 45 | color: #000000 46 | } 47 | code.prettyprint span.fun { 48 | color: #990000 49 | } 50 | -------------------------------------------------------------------------------- /static/assets/polygon-alter.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/assets/polygon-alter.jpg -------------------------------------------------------------------------------- /static/assets/ryoanji-2000x548.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/assets/ryoanji-2000x548.jpg -------------------------------------------------------------------------------- /static/assets/ryoanji-progress.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/assets/ryoanji-progress.jpg -------------------------------------------------------------------------------- /static/assets/ryoanji.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/assets/ryoanji.jpg -------------------------------------------------------------------------------- /static/assets/sbt-logo-100x56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/assets/sbt-logo-100x56.png -------------------------------------------------------------------------------- /static/assets/twitter-logo-teal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /static/assets/twitter-logo-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/assets/twitter-logo-white.png -------------------------------------------------------------------------------- /static/assets/versions.js: -------------------------------------------------------------------------------- 1 | var availableDocumentationVersions = ['1.x', '0.13', '0.12.4', '0.7.7'] 2 | -------------------------------------------------------------------------------- /static/assets/wrench-1000-center-navy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/assets/wrench-1000-center-navy.png -------------------------------------------------------------------------------- /static/img/bintray-include-my-package.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/bintray-include-my-package.png -------------------------------------------------------------------------------- /static/img/bintray-include-package-form.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/bintray-include-package-form.png -------------------------------------------------------------------------------- /static/img/bintray-link-plugin-search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/bintray-link-plugin-search.png -------------------------------------------------------------------------------- /static/img/bintray-new-repo-dialog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/bintray-new-repo-dialog.png -------------------------------------------------------------------------------- /static/img/bintray-new-repo-link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/bintray-new-repo-link.png -------------------------------------------------------------------------------- /static/img/bintray-org-member-link-button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/bintray-org-member-link-button.png -------------------------------------------------------------------------------- /static/img/bintray-org-member-link-dialog.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/bintray-org-member-link-dialog.png -------------------------------------------------------------------------------- /static/img/bintray-repo-link.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/bintray-repo-link.png -------------------------------------------------------------------------------- /static/img/bintray-signup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/bintray-signup.png -------------------------------------------------------------------------------- /static/img/cached-resolution.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/cached-resolution.png -------------------------------------------------------------------------------- /static/img/classloaders.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/classloaders.png -------------------------------------------------------------------------------- /static/img/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/favicon-16x16.png -------------------------------------------------------------------------------- /static/img/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/favicon-32x32.png -------------------------------------------------------------------------------- /static/img/favicon-96x96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/favicon-96x96.png -------------------------------------------------------------------------------- /static/img/github-logo-teal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /static/img/github-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/github-logo.png -------------------------------------------------------------------------------- /static/img/intellij1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/intellij1.png -------------------------------------------------------------------------------- /static/img/intellij10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/intellij10.png -------------------------------------------------------------------------------- /static/img/intellij11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/intellij11.png -------------------------------------------------------------------------------- /static/img/intellij12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/intellij12.png -------------------------------------------------------------------------------- /static/img/intellij2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/intellij2.png -------------------------------------------------------------------------------- /static/img/intellij3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/intellij3.png -------------------------------------------------------------------------------- /static/img/intellij4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/intellij4.png -------------------------------------------------------------------------------- /static/img/intellij5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/intellij5.png -------------------------------------------------------------------------------- /static/img/intellij6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/intellij6.png -------------------------------------------------------------------------------- /static/img/intellij7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/intellij7.png -------------------------------------------------------------------------------- /static/img/intellij8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/intellij8.png -------------------------------------------------------------------------------- /static/img/intellij9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/intellij9.png -------------------------------------------------------------------------------- /static/img/lightbend-icon-reverse.svg: -------------------------------------------------------------------------------- 1 | lightbend-icon -------------------------------------------------------------------------------- /static/img/lightbend-icon_reverse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/lightbend-icon_reverse.png -------------------------------------------------------------------------------- /static/img/lightbend_reverse.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/lightbend_reverse.png -------------------------------------------------------------------------------- /static/img/metals-completion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/metals-completion.png -------------------------------------------------------------------------------- /static/img/metals-switch-build-server.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/metals-switch-build-server.png -------------------------------------------------------------------------------- /static/img/metals0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/metals0.png -------------------------------------------------------------------------------- /static/img/metals2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/metals2.png -------------------------------------------------------------------------------- /static/img/metals3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/metals3.png -------------------------------------------------------------------------------- /static/img/metals4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/metals4.png -------------------------------------------------------------------------------- /static/img/metals5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/metals5.png -------------------------------------------------------------------------------- /static/img/metals6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/metals6.png -------------------------------------------------------------------------------- /static/img/module-diagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/module-diagram.png -------------------------------------------------------------------------------- /static/img/nvim0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/nvim0.png -------------------------------------------------------------------------------- /static/img/nvim1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/nvim1.png -------------------------------------------------------------------------------- /static/img/nvim2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/nvim2.png -------------------------------------------------------------------------------- /static/img/nvim3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/nvim3.png -------------------------------------------------------------------------------- /static/img/nvim4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/nvim4.png -------------------------------------------------------------------------------- /static/img/nvim5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/nvim5.png -------------------------------------------------------------------------------- /static/img/nvim6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/nvim6.png -------------------------------------------------------------------------------- /static/img/nvim7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/nvim7.png -------------------------------------------------------------------------------- /static/img/nvim8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/nvim8.png -------------------------------------------------------------------------------- /static/img/octicon-pencil.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | pencil 5 | Created with Sketch. 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /static/img/overview-setting-example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/overview-setting-example.png -------------------------------------------------------------------------------- /static/img/proxy-cloud-setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/proxy-cloud-setup.png -------------------------------------------------------------------------------- /static/img/proxy-ivy-mvn-setup.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/proxy-ivy-mvn-setup.png -------------------------------------------------------------------------------- /static/img/rgb_color_solid_cube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/rgb_color_solid_cube.png -------------------------------------------------------------------------------- /static/img/sbt-configurations.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/sbt-configurations.png -------------------------------------------------------------------------------- /static/img/sbt-logo-100x56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/sbt-logo-100x56.png -------------------------------------------------------------------------------- /static/img/setting-expression.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/setting-expression.png -------------------------------------------------------------------------------- /static/img/settings-initialization-load-ordering.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/settings-initialization-load-ordering.png -------------------------------------------------------------------------------- /static/img/task-dependency00.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/task-dependency00.png -------------------------------------------------------------------------------- /static/img/task-dependency01.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/task-dependency01.png -------------------------------------------------------------------------------- /static/img/task-dependency02.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/task-dependency02.png -------------------------------------------------------------------------------- /static/img/twitter-logo-teal.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /static/img/twitter-logo-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/twitter-logo-white.png -------------------------------------------------------------------------------- /static/img/typesafe_sbt_reverse-pride.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/typesafe_sbt_reverse-pride.png -------------------------------------------------------------------------------- /static/img/typesafe_sbt_reverse_png.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/typesafe_sbt_reverse_png.png -------------------------------------------------------------------------------- /static/img/typesafe_sbt_reverse_svg.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/img/typesafe_sbt_svg.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /static/img/ubuntu-sources.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/ubuntu-sources.png -------------------------------------------------------------------------------- /static/img/ubuntu-synaptic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/static/img/ubuntu-synaptic.png -------------------------------------------------------------------------------- /static/sbt-rpm.repo: -------------------------------------------------------------------------------- 1 | [sbt-rpm] 2 | name=sbt-rpm 3 | baseurl=https://repo.scala-sbt.org/scalasbt/rpm 4 | gpgcheck=0 5 | repo_gpgcheck=0 6 | enabled=1 7 | -------------------------------------------------------------------------------- /theme/fonts/Inconsolata[wdth,wght].ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/theme/fonts/Inconsolata[wdth,wght].ttf -------------------------------------------------------------------------------- /theme/fonts/LinBiolinum_R.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/theme/fonts/LinBiolinum_R.otf -------------------------------------------------------------------------------- /theme/fonts/LinBiolinum_RB.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/theme/fonts/LinBiolinum_RB.otf -------------------------------------------------------------------------------- /theme/fonts/LinBiolinum_RI.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/theme/fonts/LinBiolinum_RI.otf -------------------------------------------------------------------------------- /theme/fonts/Lora-Italic[wght].ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/theme/fonts/Lora-Italic[wght].ttf -------------------------------------------------------------------------------- /theme/fonts/Lora[wght].ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/theme/fonts/Lora[wght].ttf -------------------------------------------------------------------------------- /theme/fonts/NotoSerifCJK-wght-400-900.ttf.ttc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sbt/website/04d81bf33e96f4b84962bdd5d1f390e0e8078f5d/theme/fonts/NotoSerifCJK-wght-400-900.ttf.ttc -------------------------------------------------------------------------------- /theme/language-picker.css: -------------------------------------------------------------------------------- 1 | #language-list { 2 | left: auto; 3 | right: 10px; 4 | } 5 | 6 | [dir="rtl"] #language-list { 7 | left: 10px; 8 | right: auto; 9 | } 10 | 11 | #language-list a { 12 | color: inherit; 13 | } 14 | --------------------------------------------------------------------------------