Groups allow for better organization of dependencies and also enable easier
conflict resolution.
Let's consider a small example:
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:
|
source https://nuget.org/api/v2
nuget Newtonsoft.Json
nuget UnionArgParser
nuget FSharp.Core
github forki/FsUnit FsUnit.fs
github fsharp/FAKE src/app/FakeLib/Globbing/Globbing.fs
github fsprojects/Chessie src/Chessie/ErrorHandling.fs
group Build
source https://nuget.org/api/v2
nuget FAKE
nuget FSharp.Formatting
nuget ILRepack
github fsharp/FAKE modules/Octokit/Octokit.fsx
group Test
source https://nuget.org/api/v2
nuget NUnit.Runners
nuget NUnit
|
As you can see we have 3 different groups in the
paket.dependencies
file. The first one is the
default group (internally called Main
) and the other two groups contain
dependencies that are used for Build
and Test
.
Note: The indentation in groups is optional.
After paket install
the generated
paket.lock
file looks like this:
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:
|
NUGET
remote: https://nuget.org/api/v2
FSharp.Core (4.0.0.1)
Newtonsoft.Json (7.0.1)
UnionArgParser (0.6.3)
GITHUB
remote: forki/FsUnit
FsUnit.fs (81d27fd09575a32c4ed52eadb2eeac5f365b8348)
remote: fsharp/FAKE
src/app/FakeLib/Globbing/Globbing.fs (991bea743c5d5e8eec0defc7338a89281ed3f51a)
remote: fsprojects/Chessie
src/Chessie/ErrorHandling.fs (1f23b1caeb1f87e750abc96a25109376771dd090)
GROUP Build
NUGET
remote: https://nuget.org/api/v2
FAKE (4.3.1)
FSharp.Compiler.Service (1.4.0.1)
FSharp.Formatting (2.10.0)
FSharp.Compiler.Service (>= 0.0.87)
FSharpVSPowerTools.Core (1.8.0)
FSharpVSPowerTools.Core (1.8.0)
FSharp.Compiler.Service (>= 0.0.87)
ILRepack (2.0.5)
Microsoft.Bcl (1.1.10)
Microsoft.Bcl.Build (>= 1.0.14)
Microsoft.Bcl.Build (1.0.21)
Microsoft.Net.Http (2.2.29)
Microsoft.Bcl (>= 1.1.10)
Microsoft.Bcl.Build (>= 1.0.14)
Octokit (0.14.0)
Microsoft.Net.Http
GITHUB
remote: fsharp/FAKE
modules/Octokit/Octokit.fsx (991bea743c5d5e8eec0defc7338a89281ed3f51a)
Octokit
GROUP Test
NUGET
remote: https://nuget.org/api/v2
NUnit (2.6.4)
NUnit.Runners (2.6.4)
|
As you can see every group is listed separately and it's possible to let Paket
restore only specific groups.
If you want to reference dependencies from projects you can do this via the
following syntax in the paket.references
file.:
1:
2:
3:
4:
5:
|
FSharp.Core
group Test
NUnit
NUnit.Runners
|
Paket's group feature allows you to use multiple versions of the same package.
Let consider the following paket.dependencies
file:
1:
2:
3:
4:
5:
6:
7:
8:
|
source https://nuget.org/api/v2
nuget Newtonsoft.Json
group Legacy
source https://nuget.org/api/v2
nuget Newtonsoft.Json ~> 6
|
Every group will be resolved independently to the following
paket.lock
file:
1:
2:
3:
4:
5:
6:
7:
8:
|
NUGET
remote: https://nuget.org/api/v2
Newtonsoft.Json (7.0.1)
GROUP Legacy
NUGET
remote: https://nuget.org/api/v2
Newtonsoft.Json (6.0.8)
|
Paket is downloading both version. You will get packages/Newtonsoft.Json
with
version 7.0.1
and packages/legacy/Newtonsoft.Json
with the 6.0.8
libraries.
In your paket.references
files you can now decide
which version you want to use:
1:
2:
|
group Legacy
Newtonsoft.Json // Version 6.0.8
|