blob: 0c216edafd8d2a7689d7d0d9e325fa4bd8e08042 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<meta name="keywords" content="extensionsassembly, dev docs">
<title>Che Assemblies | Eclipse Che Documentation</title>
<link rel="stylesheet" href="css/syntax.css">
<link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" crossorigin="anonymous">
<!--<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">-->
<link rel="stylesheet" href="css/modern-business.css">
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<link rel="stylesheet" href="css/customstyles.css">
<link rel="stylesheet" href="css/boxshadowproperties.css">
<!-- most color styles are extracted out to here -->
<link rel="stylesheet" href="css/theme-che.css">
<link rel="stylesheet" href="/css/coderay.css" media="screen" type="text/css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js" crossorigin="anonymous"></script>
<script src="js/jquery.navgoco.min.js"></script>
<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<!-- Anchor.js -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/anchor-js/2.0.0/anchor.min.js" crossorigin="anonymous"></script>
<script src="js/toc.js"></script>
<script src="js/customscripts.js"></script>
<link rel="shortcut icon" href="che/docs/images/favicon.ico">
<!-- HTML5 Shim and Respond.js IE8 support of HTML5 elements and media queries -->
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/libs/html5shiv/3.7.0/html5shiv.js"></script>
<script src="https://oss.maxcdn.com/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
<link rel="alternate" type="application/rss+xml" title="che" href="http://0.0.0.0:4000/feed.xml">
<script>
$(document).ready(function() {
// Initialize navgoco with default options
$("#mysidebar").navgoco({
caretHtml: '',
accordion: true,
openClass: 'active', // open
save: false, // leave false or nav highlighting doesn't work right
cookie: {
name: 'navgoco',
expires: false,
path: '/'
},
slide: {
duration: 400,
easing: 'swing'
}
});
$("#collapseAll").click(function(e) {
e.preventDefault();
$("#mysidebar").navgoco('toggle', false);
});
$("#expandAll").click(function(e) {
e.preventDefault();
$("#mysidebar").navgoco('toggle', true);
});
});
</script>
<script>
$(function () {
$('[data-toggle="tooltip"]').tooltip()
})
</script>
<script>
$(document).ready(function() {
$("#tg-sb-link").click(function() {
$("#tg-sb-sidebar").toggle();
$("#tg-sb-content").toggleClass('col-md-9');
$("#tg-sb-content").toggleClass('col-md-12');
$("#tg-sb-icon").toggleClass('fa-toggle-on');
$("#tg-sb-icon").toggleClass('fa-toggle-off');
});
});
</script>
</head>
<body>
<!-- Navigation -->
<nav class="navbar navbar-inverse navbar-static-top">
<div class="container topnavlinks">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="fa fa-home fa-lg navbar-brand" href="index.html">&nbsp;<span class="projectTitle"> Eclipse Che Documentation</span></a>
</div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav navbar-right">
<!-- toggle sidebar button -->
<li><a id="tg-sb-link" href="#"><i id="tg-sb-icon" class="fa fa-toggle-on"></i> Nav</a></li>
<!-- entries without drop-downs appear here -->
<li><a href="https://medium.com/eclipse-che-blog/" target="_blank">Blog</a></li>
<li><a href="https://github.com/eclipse/che" target="_blank">Source Code</a></li>
<!-- entries with drop-downs appear here -->
<!-- conditional logic to control which topnav appears for the audience defined in the configuration file.-->
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">Get Support<b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="https://github.com/eclipse/che/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc+label%3Akind%2Fbug" target="_blank">Known Bugs</a></li>
<li><a href="https://github.com/eclipse/che/issues/new" target="_blank">File an Issue</a></li>
<li><a href="https://stackoverflow.com/questions/tagged/eclipse-che" target="_blank">Che on StackOverflow</a></li>
</ul>
</li>
<!--
<li>
<a class="email" title="Submit feedback" href="#" onclick="javascript:window.location='mailto:?subject= feedback&body=I have some feedback about the Che Assemblies page: ' + window.location.href;"><i class="fa fa-envelope-o"></i> Feedback</a>
</li>
-->
<!--comment out this block if you want to hide search-->
<li>
<!--start search-->
<div id="search-demo-container">
<input type="text" id="search-input" placeholder="search...">
<ul id="results-container"></ul>
</div>
<script src="js/jekyll-search.js" type="text/javascript"></script>
<script type="text/javascript">
SimpleJekyllSearch.init({
searchInput: document.getElementById('search-input'),
resultsContainer: document.getElementById('results-container'),
dataSource: 'search.json',
searchResultTemplate: '<li><a href="{url}" title="Che Assemblies">{title}</a></li>',
noResultsText: 'No results found.',
limit: 10,
fuzzy: true,
})
</script>
<!--end search-->
</li>
</ul>
</div>
</div>
<!-- /.container -->
</nav>
<!-- Page Content -->
<div class="container">
<div id="main">
<!-- Content Row -->
<div class="row">
<!-- Sidebar Column -->
<div class="col-md-3" id="tg-sb-sidebar">
<ul id="mysidebar" class="nav">
<li class="sidebarTitle"> </li>
<li>
<a href="#">Overview</a>
<ul>
<li><a href="index.html">Introduction</a></li>
<li><a href="quick-start.html">Getting Started</a></li>
<li><a href="single-multi-user.html">Single and Multi-User Flavors</a></li>
<li><a href="infra-support.html">Supported Infrastructures</a></li>
</ul>
</li>
<li>
<a href="#">Che on Docker</a>
<ul>
<li><a href="docker-single-user.html">Docker - Single User</a></li>
<li><a href="docker-multi-user.html">Docker - Multi User</a></li>
<li><a href="docker-config.html">Docker - Configuration</a></li>
<li><a href="docker-cli.html">Docker - CLI Reference</a></li>
</ul>
</li>
<li>
<a href="#">Che on Kubernetes</a>
<ul>
<li><a href="kubernetes-single-user.html">Kubernetes - Single User</a></li>
<li><a href="kubernetes-multi-user.html">Kubernetes - Multi User</a></li>
<li><a href="kubernetes-config.html">Kubernetes - Configuration</a></li>
<li><a href="kubernetes-admin-guide.html">Kubernetes - Admin Guide</a></li>
</ul>
</li>
<li>
<a href="#">Che on OpenShift</a>
<ul>
<li><a href="openshift-single-user.html">OpenShift - Single User</a></li>
<li><a href="openshift-multi-user.html">OpenShift - Multi User</a></li>
<li><a href="openshift-config.html">OpenShift - Configuration</a></li>
<li><a href="openshift-admin-guide.html">OpenShift - Admin Guide</a></li>
</ul>
</li>
<li>
<a href="#">User Management</a>
<ul>
<li><a href="user-management.html">Authentication and Authorization</a></li>
<li><a href="authentication.html">Security Model</a></li>
<li><a href="permissions.html">Permissions</a></li>
<li><a href="organizations.html">Organizations in UD</a></li>
<li><a href="resource-management.html">Resource Management</a></li>
</ul>
</li>
<li>
<a href="#">User Guides</a>
<ul>
<li><a href="creating-starting-workspaces.html">Creating and starting Workspaces</a></li>
<li><a href="ide-projects.html">Projects</a></li>
<li><a href="editor-code-assistance.html">Editor and Code-Assistance</a></li>
<li><a href="dependency-management.html">Dependency Management</a></li>
<li><a href="commands-ide-macro.html">Commands and IDE Macros</a></li>
<li><a href="version-control.html">Version Control</a></li>
<li><a href="debug.html">Debug</a></li>
</ul>
</li>
<li>
<a href="#">Workspace Administration</a>
<ul>
<li><a href="what-are-workspaces.html">Workspace Overview</a></li>
<li><a href="stacks.html">Workspace - Stacks</a></li>
<li><a href="recipes.html">Workspace - Recipes</a></li>
<li><a href="servers.html">Workspace - Servers</a></li>
<li><a href="installers.html">Workspace - Installers</a></li>
<li><a href="volumes.html">Workspace - Volumes Mount</a></li>
<li><a href="env-variables.html">Workspace - Environment Variables</a></li>
<li><a href="projects.html">Workspace - Projects</a></li>
<li><a href="workspaces-troubleshooting.html">Workspace - Troubleshooting</a></li>
<li><a href="workspace-data-model.html">Workspace Data Model</a></li>
</ul>
</li>
<li>
<a href="#">Portable Workspaces</a>
<ul>
<li><a href="chedir-getting-started.html">Chedir - Getting Started</a></li>
<li><a href="why-chedir.html">Chedir - Why Chedir?</a></li>
<li><a href="chedir-installation.html">Chedir - Installation</a></li>
<li><a href="chedir-project-setup.html">Chedir - Project Setup</a></li>
<li><a href="chedir-up-and-down.html">Chedir - Up and Down</a></li>
<li><a href="chefile.html">Chedir - Chefile</a></li>
<li><a href="chedir-ssh.html">Chedir - SSH</a></li>
<li><a href="factories-getting-started.html">Factory - Getting Started</a></li>
<li><a href="creating-factories.html">Factory - Creating</a></li>
<li><a href="factories_json_reference.html">Factory - JSON Reference</a></li>
</ul>
</li>
<li>
<a href="#">Developer Guides</a>
<ul>
<li><a href="framework-overview.html">Overview</a></li>
<li><a href="rest-api.html">SDK - REST API</a></li>
<li><a href="che-in-che-quickstart.html">SDK - Your First Plugin</a></li>
<li><a href="build-reqs.html">SDK - Building Che</a></li>
<li class="active"><a href="assemblies.html">SDK - Assemblies</a></li>
<li><a href="logging.html">SDK - Logging</a></li>
<li><a href="ide-extensions-gwt.html">SDK - GWT IDE Extensions</a></li>
<li><a href="server-side-extensions.html">SDK - Server Side Extensions</a></li>
<li><a href="custom-installers.html">SDK - Installers</a></li>
<li><a href="project-types.html">SDK - Project Types</a></li>
<li><a href="language-servers.html">SDK - Language Support</a></li>
<li><a href="parts.html">IDE UI&#58 Parts</a></li>
<li><a href="actions.html">IDE UI&#58 Actions</a></li>
</ul>
</li>
<li>
<a href="#">Dev Essentials</a>
<ul>
<li><a href="guice.html">Dependency Injection</a></li>
<li><a href="dto.html">Transport&#58 DTO</a></li>
<li><a href="json-rpc.html">Communication&#58 JSON-RPC</a></li>
<li><a href="handling-projects-in-plugins.html">Handling Projects in Plugins</a></li>
<li><a href="dao.html">Persistence, DAO</a></li>
<li><a href="properties.html">Properties</a></li>
</ul>
</li>
<li>
<a href="#">Infrastructure and SPI</a>
<ul>
<li><a href="spi_overview.html">Overview</a></li>
<li><a href="spi-implementation.html">Implementation Notes</a></li>
</ul>
</li>
<!-- if you aren't using the accordion, uncomment this block:
<p class="external">
<a href="#" id="collapseAll">Collapse All</a> | <a href="#" id="expandAll">Expand All</a>
</p>
-->
</ul>
<!-- this highlights the active parent class in the navgoco sidebar. this is critical so that the parent expands when you're viewing a page. This must appear below the sidebar code above. Otherwise, if placed inside customscripts.js, the script runs before the sidebar code runs and the class never gets inserted.-->
<script>$("li.active").parents('li').toggleClass("active");</script>
</div>
<!-- Content Column -->
<div class="col-md-9" id="tg-sb-content">
<div class="post-header">
<h1 class="post-title-main">Che Assemblies</h1>
</div>
<div class="post-content">
<!-- this handles the automatic toc. use ## for subheads to auto-generate the on-page minitoc. if you use html tags, you must supply an ID for the heading element in order for it to appear in the minitoc. -->
<script>
$( document ).ready(function() {
// Handler for .ready() called.
$('#toc').toc({ minimumHeaders: 0, listType: 'ul', showSpeed: 0, headers: 'h2' });
/* this offset helps account for the space taken up by the floating toolbar. */
$('#toc').on('click', 'a', function() {
var target = $(this.getAttribute('href'))
, scroll_target = target.offset().top
$(window).scrollTop(scroll_target - 10);
return false
})
});
</script>
<div id="toc"></div>
<!--
-->
<div class="sect1">
<h2 id="what-is-a-che-assembly">What Is a Che Assembly?</h2>
<div class="sectionbody">
<div class="paragraph">
<p>An assembly is a Maven module that produces a build artifact. In case of <a href="https://github.com/eclipse/che/tree/master/assembly">Eclipse Che</a>, this is either a <code>.war</code> with <code>jars</code> in it, or a Tomcat assembly, which is a Tomcat web server with custom configuration and artifacts, copied to <code>webapps</code>. The following are Eclipse Che assemblies:</p>
</div>
<table class="tableblock frame-all grid-all stretch">
<colgroup>
<col style="width: 61%;">
<col style="width: 39%;">
</colgroup>
<thead>
<tr>
<th class="tableblock halign-left valign-top">Che Assembly</th>
<th class="tableblock halign-left valign-top">What Is Included</th>
</tr>
</thead>
<tbody>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>assembly-ide-war</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">GWT plugins that will be compiled into a new browser IDE as JavaScript</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>assembly-wsagent-war</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Java plugins that will run within a workspace agent, deployed as <code>.war</code> artifact with numerous jars in it</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>assembly-wsagent-server</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Packages workspace agent into a Tomcat that is then launched in a machine</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>assembly-wsmaster-war</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Java plugins that will run within Che core server - master</p></td>
</tr>
<tr>
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>assembly-main</code></p></td>
<td class="tableblock halign-left valign-top"><p class="tableblock">Packages all Che modules (including those listed above) into a final Tomcat bundle</p></td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="sect1">
<h2 id="assembly-ide-war">assembly-ide-war</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Successful build of this module produces <code>ide.war</code> that is then deployed with Tomcat (produced by <code>assembly-main</code>) as <code>ROOT.war</code> that contains a handful or jars as dependencies and what’s more important - <code>_app</code> directory with JavaScript, CSS and other resources that are loaded into <code>IDE.html</code> when IDE is initialized.</p>
</div>
<div class="paragraph">
<p>This module inherits <a href="https://github.com/eclipse/che/blob/da18cd1867210f87a6071ed65930fb47fb8bb775/ide/che-ide-gwt-app/pom.xml"><code>che-ide-gwt-app</code></a> that it its turn has <a href="https://github.com/eclipse/che/blob/5a6d3910b268feb3c4e67c2ff9aa5640410bf777/ide/che-ide-full/pom.xml"><code>che-ide-full</code></a> in dependencies. So, <code>che-ide-full</code> is where all of the client side plugin dependencies are declared.</p>
</div>
<div class="paragraph">
<p>However, if you build a custom assembly and your plugin provides client side changes, it is root pom.xml of <strong>assembly-ide-war</strong> that dependencies should be added to. See: <a href="ide-extensions-gwt.html">IDE Extensions</a>.</p>
</div>
<div class="paragraph">
<p>This is the module that is most often extended with custom plugins.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="assembly-wsagent-war">assembly-wsagent-war</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Build artifact of this module contains all server side plugins components packaged as jars. Root <code>pom.xml</code> contains dependencies to all plugins that get deployed with the workspace agent, and this is where dependencies to custom plugins should be added. Once built, <code>assembly-wsagent-war</code> is copied to <code>webapps</code> of ws-agent Tomcat as <code>ROOT.war</code>. This is the module that is most often extended with custom plugins.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="assembly-wsagent-server">assembly-wsagent-server</h2>
<div class="sectionbody">
<div class="paragraph">
<p>This module packages <code>ROOT.war</code> into Tomcat’s <code>webapps</code> and adds configuration files. This tomcat is packaged as tar.gz archive that is then placed into main Tomcat produced by <code>assembly-main</code> build.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="assembly-wsmaster-war">assembly-wsmaster-war</h2>
<div class="sectionbody">
<div class="paragraph">
<p>The core of Che platform as a workspace server that includes <a href="rest-api.html">workspace API</a>, user profile and settings, <a href="spi-implementation.html">implementation of runtime infrastructure</a>. Usually used as a dependency in custom assemblies, however, it is possible to extend it, for example, by providing support of a new infrastructure.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="assembly-main">assembly-main</h2>
<div class="sectionbody">
<div class="paragraph">
<p>This module’s name speaks for itself - this is the main assembly that packages all Che components into a Tomcat server. These components include wsmaster as <code>api.war</code>, User Dashboard as <code>dashboard.war</code>, documentation - <code>docs.war</code> and Swagger UI - <code>swagger.war</code>, agents like terminal and ws-agent (those are packaged into <code>lib</code> directory in the root of the resulting archive where Che master picks them up and serves, thus making them downloadable for <a href="installers.html">installers</a>).</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="custom-assemblies">Custom Assemblies</h2>
<div class="sectionbody">
<div class="paragraph">
<p>You may build own custom assembly of Che. To do so, there’s no need to clone/copy the entire Che source code. All artifacts can be used as dependencies. Moreover, unlike assemblies in Che source code, custom assemblies can use minimal artifacts for server and client side.</p>
</div>
<div class="paragraph">
<p>Here’s an <a href="https://github.com/che-samples/che-ide-server-extension">example</a> of a custom Che assembly that brings in two plugins - server- and client-side. You may clone this repository and use it as a basis for your custom Che assembly.</p>
</div>
<div class="paragraph">
<p>Note that this example uses core artifacts as dependencies both for <a href="https://github.com/che-samples/che-ide-server-extension/blob/master/assembly/assembly-ide-war/pom.xml#L31-L35">client</a>:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
<span class="tag">&lt;groupId&gt;</span>org.eclipse.che.core<span class="tag">&lt;/groupId&gt;</span>
<span class="tag">&lt;artifactId&gt;</span>che-ide-core<span class="tag">&lt;/artifactId&gt;</span>
<span class="tag">&lt;type&gt;</span>gwt-lib<span class="tag">&lt;/type&gt;</span>
<span class="tag">&lt;/dependency&gt;</span></code></pre>
</div>
</div>
<div class="paragraph">
<p>and <a href="https://github.com/che-samples/che-ide-server-extension/blob/master/assembly/assembly-wsagent-war/pom.xml#L22-L26">server side</a></p>
</div>
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
<span class="tag">&lt;groupId&gt;</span>org.eclipse.che.core<span class="tag">&lt;/groupId&gt;</span>
<span class="tag">&lt;artifactId&gt;</span>che-wsagent-core<span class="tag">&lt;/artifactId&gt;</span>
<span class="tag">&lt;type&gt;</span>war<span class="tag">&lt;/type&gt;</span>
<span class="tag">&lt;/dependency&gt;</span></code></pre>
</div>
</div>
<div class="paragraph">
<p>Core artifacts contain a bare minimum set of platform components and plugins to be able to create and start a workspace, create or import a project, open and edit files in the editor.</p>
</div>
<div class="paragraph">
<p>You may use full artifacts that include all standard Che plugins:</p>
</div>
<div class="paragraph">
<p>Client side:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
<span class="tag">&lt;groupId&gt;</span>org.eclipse.che.core<span class="tag">&lt;/groupId&gt;</span>
<span class="tag">&lt;artifactId&gt;</span>che-ide-full<span class="tag">&lt;/artifactId&gt;</span>
<span class="tag">&lt;type&gt;</span>gwt-lib<span class="tag">&lt;/type&gt;</span>
<span class="tag">&lt;/dependency&gt;</span></code></pre>
</div>
</div>
<div class="paragraph">
<p>You may include a full IDE artifact and exclude a particular plugin:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependencies&gt;</span>
<span class="tag">&lt;dependency&gt;</span>
<span class="tag">&lt;groupId&gt;</span>org.eclipse.che.core<span class="tag">&lt;/groupId&gt;</span>
<span class="tag">&lt;artifactId&gt;</span>che-ide-full<span class="tag">&lt;/artifactId&gt;</span>
<span class="tag">&lt;exclusions&gt;</span>
<span class="tag">&lt;exclusion&gt;</span>
<span class="tag">&lt;artifactId&gt;</span>che-plugin-product-info<span class="tag">&lt;/artifactId&gt;</span>
<span class="tag">&lt;groupId&gt;</span>org.eclipse.che.plugin<span class="tag">&lt;/groupId&gt;</span>
<span class="tag">&lt;/exclusion&gt;</span>
<span class="tag">&lt;/exclusions&gt;</span>
<span class="tag">&lt;/dependency&gt;</span>
<span class="tag">&lt;/dependencies&gt;</span>
<span class="tag">&lt;build&gt;</span>
<span class="tag">&lt;plugins&gt;</span>
<span class="tag">&lt;plugin&gt;</span>
<span class="tag">&lt;groupId&gt;</span>org.eclipse.che.core<span class="tag">&lt;/groupId&gt;</span>
<span class="tag">&lt;artifactId&gt;</span>che-core-gwt-maven-plugin<span class="tag">&lt;/artifactId&gt;</span>
<span class="tag">&lt;version&gt;</span>${project.version}<span class="tag">&lt;/version&gt;</span>
<span class="tag">&lt;executions&gt;</span>
<span class="tag">&lt;execution&gt;</span>
<span class="tag">&lt;goals&gt;</span>
<span class="tag">&lt;goal&gt;</span>process-excludes<span class="tag">&lt;/goal&gt;</span>
<span class="tag">&lt;/goals&gt;</span>
<span class="tag">&lt;/execution&gt;</span>
<span class="tag">&lt;/executions&gt;</span>
<span class="tag">&lt;/plugin&gt;</span>
<span class="tag">&lt;/plugins&gt;</span>
<span class="tag">&lt;/build&gt;</span></code></pre>
</div>
</div>
<div class="paragraph">
<p>Server side:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
<span class="tag">&lt;groupId&gt;</span>org.eclipse.che<span class="tag">&lt;/groupId&gt;</span>
<span class="tag">&lt;artifactId&gt;</span>assembly-wsagent-war<span class="tag">&lt;/artifactId&gt;</span>
<span class="tag">&lt;type&gt;</span>war<span class="tag">&lt;/type&gt;</span>
<span class="tag">&lt;/dependency&gt;</span></code></pre>
</div>
</div>
<div class="paragraph">
<p>These two <code>pom.xml</code> files are entrypoints to adding custom plugins. This assembly includes two plugins that are declared in:</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://github.com/che-samples/che-ide-server-extension/blob/master/pom.xml#L54-L64">root pom.xml</a> - artifact version defaults to project version. These dependencies need to be declared to follow dependency convergence rules in Che (i.e. all dependencies have to be declared either in Che <code>maven-depmgt-pom</code> or in a root pom of an assembly). What <code>maven-depmgt-pom</code> parent brings is a set of enforcer plugins, like formatting, dependency management, source validation etc.</p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
<span class="tag">&lt;groupId&gt;</span>org.eclipse.che.sample<span class="tag">&lt;/groupId&gt;</span>
<span class="tag">&lt;artifactId&gt;</span>plugin-serverservice-server<span class="tag">&lt;/artifactId&gt;</span>
<span class="tag">&lt;version&gt;</span>${project.version}<span class="tag">&lt;/version&gt;</span>
<span class="tag">&lt;/dependency&gt;</span></code></pre>
</div>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://github.com/che-samples/che-ide-server-extension/blob/master/assembly/assembly-ide-war/pom.xml#L36-L40">assembly-ide-war pom</a>:</p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
<span class="tag">&lt;groupId&gt;</span>org.eclipse.che.sample<span class="tag">&lt;/groupId&gt;</span>
<span class="tag">&lt;artifactId&gt;</span>plugin-serverservice-ide<span class="tag">&lt;/artifactId&gt;</span>
<span class="tag">&lt;type&gt;</span>gwt-lib<span class="tag">&lt;/type&gt;</span>
<span class="tag">&lt;/dependency&gt;</span></code></pre>
</div>
</div>
<div class="paragraph">
<p>This way, your client side plugin is included into <code>ide.war</code>. We use <a href="https://maven.apache.org/plugins/maven-war-plugin/overlays.html">Maven’s overlays feature</a> to package custom plugins into the resulting artifact.</p>
</div>
<div class="ulist">
<ul>
<li>
<p><a href="https://github.com/che-samples/che-ide-server-extension/blob/master/assembly/assembly-wsagent-war/pom.xml#L27-L30">assembly-wsmaster-war pom</a>:</p>
</li>
</ul>
</div>
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;dependency&gt;</span>
<span class="tag">&lt;groupId&gt;</span>org.eclipse.che.sample<span class="tag">&lt;/groupId&gt;</span>
<span class="tag">&lt;artifactId&gt;</span>plugin-serverservice-server<span class="tag">&lt;/artifactId&gt;</span>
<span class="tag">&lt;/dependency&gt;</span></code></pre>
</div>
</div>
<div class="paragraph">
<p>Your custom plugin packaged as jar is automatically added to inherited <code>wsagent</code> artifact if both are declared as dependencies in <code>pom.xml</code>. As a result, the final <code>.war</code> artifact will contain a custom jar.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="update-assembly">Update Assembly</h2>
<div class="sectionbody">
<div class="paragraph">
<p>In a <code>pom.xml</code> update both:</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;parent&gt;</span>
<span class="tag">&lt;artifactId&gt;</span>maven-depmgt-pom<span class="tag">&lt;/artifactId&gt;</span>
<span class="tag">&lt;groupId&gt;</span>org.eclipse.che.depmgt<span class="tag">&lt;/groupId&gt;</span>
<span class="tag">&lt;version&gt;</span>6.0.0-M4<span class="tag">&lt;/version&gt;</span>
<span class="tag">&lt;/parent&gt;</span></code></pre>
</div>
</div>
<div class="paragraph">
<p>and</p>
</div>
<div class="listingblock">
<div class="content">
<pre class="CodeRay highlight"><code data-lang="xml"><span class="tag">&lt;properties&gt;</span>
<span class="tag">&lt;che.version&gt;</span>6.0.0-M4<span class="tag">&lt;/che.version&gt;</span>
<span class="tag">&lt;/properties&gt;</span></code></pre>
</div>
</div>
<div class="paragraph">
<p>It is important to keep those versions consistent to avoid build failures and incompatibilities. It is also recommended to keep versions of own artifacts aligned with a parent version.</p>
</div>
</div>
</div>
<div class="sect1">
<h2 id="next-steps">Next Steps</h2>
<div class="sectionbody">
<div class="paragraph">
<p>Now that you have got some knowledge about Che assemblies and own cloned a sample assembly, let’s take a closer look at Eclipse Che <a href="ide-extensions-gwt.html">client</a> and <a href="server-side-extensions.html">server-side</a> plugins.</p>
</div>
</div>
</div>
<div class="tags">
<b>Tags: </b>
<a href="tag_extensions.html" class="btn btn-default navbar-btn cursorNorm" role="button">extensions</a>
<a href="tag_assembly.html" class="btn btn-default navbar-btn cursorNorm" role="button">assembly</a>
</div>
<!--
-->
</div>
<hr class="shaded"/>
<footer>
<div class="row">
<div class="col-lg-12 footer">
Eclipse Che - Documentation <br/>
Site last generated: Sep 13, 2018 <br/>
<hr>
<a href="http://www.eclipse.org" target="_blank">Eclipse Foundation</a><br/>
<a href="http://www.eclipse.org/legal/privacy.php" target="_blank">Privacy Policy</a><br/>
<a href="http://www.eclipse.org/legal/termsofuse.php" target="_blank">Terms of Use</a><br/>
<a href="https://www.eclipse.org/legal/epl-2.0/" target="_blank">Eclipse Public License</a><br/>
<a href="http://www.eclipse.org/legal" target="_blank">Legal Resources</a><br/>
</div>
</div>
</footer>
<!-- /.row -->
</div>
<!-- /.container -->
</div>
<!-- /#main -->
</div>
</body>
</html>