--- title: Installing Commercial Vaadin Add-on License order: 5 layout: page --- [[addons.cval]] = Installing Commercial Vaadin Add-on License The commercial Vaadin add-ons require installing a license key before using them. The license keys are development licenses and checked during widget set compilation, or in Vaadin TestBench when executing tests, so you do not need them when deploying the application. [[addons.cval.obtaining]] == Obtaining License Keys You can purchase add-ons or obtain a free trial key from the Vaadin website. You need to register in the website to obtain a key. You can get license keys from link:https://vaadin.com/pro/licenses[vaadin.com/pro/licenses]. . On the Vaadin website, click on your profile in the top right, then select "My Services > Licenses". + image::img/cval-pro-licenses-4.png[width=80%, scaledwidth=100%] . Click on a license key to obtain the purchased or trial key. + image::img/cval-pro-licenses-code-2.png[width=80%, scaledwidth=100%] [[addons.cval.installing]] == Installing License Key in License File To install the license key in a development workstation, you can copy and paste it verbatim to a file in your home directory. License for each product has a separate license file as follows: Vaadin Charts:: [filename]#.vaadin.charts.developer.license# Vaadin Spreadsheet:: [filename]#.vaadin.spreadsheet.developer.license# Vaadin TestBench:: [filename]#.vaadin.testbench.developer.license# Vaadin TouchKit:: [filename]#.vaadin.touchkit.developer.license# For example, in Linux and OS X: [subs="normal"] ---- [prompt]#$# [command]#echo# "[replaceable]#L1cen5e-c0de#" > [parameter]#~/.vaadin.[replaceable]+++#+++<product>+++#+++.developer.license# ---- [[addons.cval.systemproperty]] == Passing License Key as System Property You can also pass the key as a system property to the widget set compiler, usually with a [literal]#++-D++# option. For example, on the command-line: [subs="normal"] ---- [prompt]#$# [command]#java# -Dvaadin.[replaceable]####.developer.license=[replaceable]#L1cen5e-c0de# ... ---- where the [literal]`` is the product ID, such as `charts`, `spreadsheet`, `designer`, or `testbench`. [[addons.cval.systemproperty.environments]] === Passing License Key in Different Environments How you actually pass the parameter to the widget set compiler depends on the development environment and the build system that you use to compile the widget set. Below are listed a few typical environments: Eclipse IDE:: To install the license key for all projects, select "Window > Preferences" and navigate to the "Java > Installed JREs" section. Select the JRE version that you use for the application and click [guibutton]#Edit#. In the [guilabel]#Default VM arguments#, give the [parameter]#-D# expression as shown above. Apache Ant:: If compiling the project with Apache Ant, you could set the key in the Ant script as follows: + [subs="normal"] ---- <sysproperty key="vaadin.[replaceable]#<product>#.developer.license" value="**L1cen5e-c0de**"/> ---- + However, you should never store license keys in a source repository, so if the Ant script is stored in a source repository, you should pass the license key to Ant as a property that you then use in the script for the value argument of the [literal]#++++# as follows: + [subs="normal"] ---- <sysproperty key="vaadin.[replaceable]#<product>#.developer.license" value="**${vaadin.[replaceable]#<product>#.developer.license}**"/> ---- + When invoking Ant from the command-line, you can pass the property with a [parameter]#-D# parameter to Ant. Apache Maven:: If building the project with Apache Maven, you can pass the license key with a [literal]#++-D++# parameter to Maven: + [subs="normal"] ---- [prompt]#$# [command]#mvn# -Dvaadin.[replaceable]##<product>##.developer.license=[replaceable]##L1cen5e-c0de## package ---- + where the [literal]`` is the product ID, such as `charts`, `spreadsheet`, `designer`, or `testbench`. Continuous Integration Systems:: In CIS systems, you can pass the license key to build runners as a system property in the build configuration. However, this only passes it to a runner. As described above, Ant does not pass it to sub-processes implicitly, so you need to forward it explicitly as described earlier.