/
Advanced-Configurations-Example.html
180 lines (159 loc) · 13.8 KB
/
Advanced-Configurations-Example.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Advanced Configurations Example — sbt Documentation</title>
<link rel="stylesheet" href="../_static/style.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<link rel="stylesheet" href="../_static/issuetracker.css" type="text/css" />
<link rel="stylesheet" href="../_static/base.css" type="text/css" />
<link rel="stylesheet" href="../_static/docs.css" type="text/css" />
<link rel="stylesheet" href="../_static/syntax.css" type="text/css" />
<link rel="stylesheet" href="http://fonts.googleapis.com/css?family=Exo:300,400,600,700" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
VERSION: '0.12.2-RC2',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="../_static/jquery.js"></script>
<script type="text/javascript" src="../_static/underscore.js"></script>
<script type="text/javascript" src="../_static/doctools.js"></script>
<script type="text/javascript" src="../../../versions.js"></script>
<script type="text/javascript" src="../_static/set-versions.js"></script>
<link rel="top" title="sbt Documentation" href="../index.html" />
<link rel="up" title="Examples" href="index.html" />
<link rel="next" title="Full Configuration Example" href="Full-Configuration-Example.html" />
<link rel="prev" title="Advanced Command Example" href="Advanced-Command-Example.html" />
</head>
<body>
<div class="navbar">
<div class="navbar-inner">
<div class="container">
<ul class="nav">
<li><a href="http://www.scala-sbt.org/">Home</a></li>
<li><a href="../index.html">Documentation</a></li>
<li><a href="../Getting-Started/Setup.html">Download</a></li>
<li><a href="http://groups.google.com/group/simple-build-tool">Mailing List</a></li>
<li><a href="http://github.com/sbt/sbt">Project</a></li>
</ul>
</div>
</div>
</div>
<div class="main">
<div class="container">
<div class="page-title">Advanced Configurations Example</div>
<div class="search-box">
<form method="get" action="http://www.google.com/search" id="search">
<input type="search" placeholder="Search 0.12.2-RC2 on Google" name="q" results="10" size="29" id="search-input">
<input type="hidden" name="sitesearch" value="http://www.scala-sbt.org/release/docs/">
<input type="submit" id="submit-search">
</form>
</div>
</div>
<div class="main-container">
<div class="container">
<div class="row">
<div class="span12">
<ul class="breadcrumb">
<li>
<span class="divider">|</span> <a href="Full-Configuration-Example.html">Full Configuration Example</a> <span class="divider">»</span>
</li>
<li>
<span class="divider">></span><a href="index.html">Examples</a>
</li>
<li>
<a href="../index.html">Contents</a>
</li>
<li>
<span class="divider">«</span> <a href="Advanced-Command-Example.html">Advanced Command Example</a> <span class="divider">|</span>
</li>
<li>
<select id="versions"><option selected value="0.12.2-RC2">Version 0.12.2-RC2</option></select>
</li>
</ul>
</div>
</div>
<div class="row">
<div class="span9">
<div class="section" id="advanced-configurations-example">
<h1>Advanced Configurations Example<a class="headerlink" href="#advanced-configurations-example" title="Permalink to this headline">¶</a></h1>
<p>This is an example <a class="reference internal" href="../Getting-Started/Full-Def.html"><em>full build definition</em></a> that
demonstrates using Ivy configurations to group dependencies.</p>
<p>The <tt class="docutils literal"><span class="pre">utils</span></tt> module provides utilities for other modules. It uses Ivy
configurations to group dependencies so that a dependent project doesn't
have to pull in all dependencies if it only uses a subset of
functionality. This can be an alternative to having multiple utilities
modules (and consequently, multiple utilities jars).</p>
<p>In this example, consider a <tt class="docutils literal"><span class="pre">utils</span></tt> project that provides utilities
related to both Scalate and Saxon. It therefore needs both Scalate and
Saxon on the compilation classpath and a project that uses all of the
functionality of 'utils' will need these dependencies as well. However,
project <tt class="docutils literal"><span class="pre">a</span></tt> only needs the utilities related to Scalate, so it doesn't
need Saxon. By depending only on the <tt class="docutils literal"><span class="pre">scalate</span></tt> configuration of
<tt class="docutils literal"><span class="pre">utils</span></tt>, it only gets the Scalate-related dependencies.</p>
<div class="highlight-scala"><div class="highlight"><pre> <span class="k">import</span> <span class="nn">sbt._</span>
<span class="k">import</span> <span class="nn">Keys._</span>
<span class="k">object</span> <span class="nc">B</span> <span class="k">extends</span> <span class="nc">Build</span>
<span class="o">{</span>
<span class="cm">/********** Projects ************/</span>
<span class="c1">// An example project that only uses the Scalate utilities.</span>
<span class="k">lazy</span> <span class="k">val</span> <span class="n">a</span> <span class="k">=</span> <span class="nc">Project</span><span class="o">(</span><span class="s">"a"</span><span class="o">,</span> <span class="n">file</span><span class="o">(</span><span class="s">"a"</span><span class="o">))</span> <span class="n">dependsOn</span><span class="o">(</span><span class="n">utils</span> <span class="o">%</span> <span class="s">"compile->scalate"</span><span class="o">)</span>
<span class="c1">// An example project that uses the Scalate and Saxon utilities.</span>
<span class="c1">// For the configurations defined here, this is equivalent to doing dependsOn(utils),</span>
<span class="c1">// but if there were more configurations, it would select only the Scalate and Saxon</span>
<span class="c1">// dependencies.</span>
<span class="k">lazy</span> <span class="k">val</span> <span class="n">b</span> <span class="k">=</span> <span class="nc">Project</span><span class="o">(</span><span class="s">"b"</span><span class="o">,</span> <span class="n">file</span><span class="o">(</span><span class="s">"b"</span><span class="o">))</span> <span class="n">dependsOn</span><span class="o">(</span><span class="n">utils</span> <span class="o">%</span> <span class="s">"compile->scalate,saxon"</span><span class="o">)</span>
<span class="c1">// Defines the utilities project</span>
<span class="k">lazy</span> <span class="k">val</span> <span class="n">utils</span> <span class="k">=</span> <span class="nc">Project</span><span class="o">(</span><span class="s">"utils"</span><span class="o">,</span> <span class="n">file</span><span class="o">(</span><span class="s">"utils"</span><span class="o">))</span> <span class="n">settings</span><span class="o">(</span><span class="n">utilsSettings</span> <span class="k">:</span> <span class="k">_</span><span class="kt">*</span><span class="o">)</span>
<span class="k">def</span> <span class="n">utilsSettings</span><span class="k">:</span> <span class="kt">Seq</span><span class="o">[</span><span class="kt">Setting</span><span class="o">[</span><span class="k">_</span><span class="o">]]</span> <span class="k">=</span>
<span class="c1">// Add the src/common/scala/ compilation configuration.</span>
<span class="n">inConfig</span><span class="o">(</span><span class="nc">Common</span><span class="o">)(</span><span class="nc">Defaults</span><span class="o">.</span><span class="n">configSettings</span><span class="o">)</span> <span class="o">++</span>
<span class="c1">// Publish the common artifact</span>
<span class="n">addArtifact</span><span class="o">(</span><span class="n">artifact</span> <span class="n">in</span> <span class="o">(</span><span class="nc">Common</span><span class="o">,</span> <span class="n">packageBin</span><span class="o">),</span> <span class="n">packageBin</span> <span class="n">in</span> <span class="nc">Common</span><span class="o">)</span> <span class="o">++</span> <span class="nc">Seq</span><span class="o">(</span>
<span class="c1">// We want our Common sources to have access to all of the dependencies on the classpaths</span>
<span class="c1">// for compile and test, but when depended on, it should only require dependencies in 'common'</span>
<span class="n">classpathConfiguration</span> <span class="n">in</span> <span class="nc">Common</span> <span class="o">:=</span> <span class="nc">CustomCompile</span><span class="o">,</span>
<span class="c1">// Modify the default Ivy configurations.</span>
<span class="c1">// 'overrideConfigs' ensures that Compile is replaced by CustomCompile</span>
<span class="n">ivyConfigurations</span> <span class="o">~=</span> <span class="n">overrideConfigs</span><span class="o">(</span><span class="nc">Scalate</span><span class="o">,</span> <span class="nc">Saxon</span><span class="o">,</span> <span class="nc">Common</span><span class="o">,</span> <span class="nc">CustomCompile</span><span class="o">),</span>
<span class="c1">// Put all dependencies without an explicit configuration into Common (optional)</span>
<span class="n">defaultConfiguration</span> <span class="o">:=</span> <span class="nc">Some</span><span class="o">(</span><span class="nc">Common</span><span class="o">),</span>
<span class="c1">// Declare dependencies in the appropriate configurations</span>
<span class="n">libraryDependencies</span> <span class="o">++=</span> <span class="nc">Seq</span><span class="o">(</span>
<span class="s">"org.fusesource.scalate"</span> <span class="o">%</span> <span class="s">"scalate-core"</span> <span class="o">%</span> <span class="s">"1.5.0"</span> <span class="o">%</span> <span class="s">"scalate"</span><span class="o">,</span>
<span class="s">"org.squeryl"</span> <span class="o">%%</span> <span class="s">"squeryl"</span> <span class="o">%</span> <span class="s">"0.9.4"</span> <span class="o">%</span> <span class="s">"scalate"</span><span class="o">,</span>
<span class="s">"net.sf.saxon"</span> <span class="o">%</span> <span class="s">"saxon"</span> <span class="o">%</span> <span class="s">"8.7"</span> <span class="o">%</span> <span class="s">"saxon"</span>
<span class="o">)</span>
<span class="o">)</span>
<span class="cm">/********* Configurations *******/</span>
<span class="k">lazy</span> <span class="k">val</span> <span class="nc">Scalate</span> <span class="k">=</span> <span class="n">config</span><span class="o">(</span><span class="s">"scalate"</span><span class="o">)</span> <span class="n">extend</span><span class="o">(</span><span class="nc">Common</span><span class="o">)</span> <span class="n">describedAs</span><span class="o">(</span><span class="s">"Dependencies for using Scalate utilities."</span><span class="o">)</span>
<span class="k">lazy</span> <span class="k">val</span> <span class="nc">Common</span> <span class="k">=</span> <span class="n">config</span><span class="o">(</span><span class="s">"common"</span><span class="o">)</span> <span class="n">describedAs</span><span class="o">(</span><span class="s">"Dependencies required in all configurations."</span><span class="o">)</span>
<span class="k">lazy</span> <span class="k">val</span> <span class="nc">Saxon</span> <span class="k">=</span> <span class="n">config</span><span class="o">(</span><span class="s">"saxon"</span><span class="o">)</span> <span class="n">extend</span><span class="o">(</span><span class="nc">Common</span><span class="o">)</span> <span class="n">describedAs</span><span class="o">(</span><span class="s">"Dependencies for using Saxon utilities."</span><span class="o">)</span>
<span class="c1">// Define a customized compile configuration that includes</span>
<span class="c1">// dependencies defined in our other custom configurations</span>
<span class="k">lazy</span> <span class="k">val</span> <span class="nc">CustomCompile</span> <span class="k">=</span> <span class="n">config</span><span class="o">(</span><span class="s">"compile"</span><span class="o">)</span> <span class="n">extend</span><span class="o">(</span><span class="nc">Saxon</span><span class="o">,</span> <span class="nc">Common</span><span class="o">,</span> <span class="nc">Scalate</span><span class="o">)</span>
<span class="o">}</span>
</pre></div>
</div>
</div>
</div>
<div class="span3"><p class="contents-title">Contents</p>
<div id="scroller-anchor">
<div id="scroller">
<div id="toc"><ul>
<li><a class="reference internal" href="#">Advanced Configurations Example</a></li>
</ul>
</div>
</div>
</div></div>
</div>
</div>
</div>
</div>
</body>
</html>