<?xml version="1.0"?>
<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at
 
       http://www.apache.org/licenses/LICENSE-2.0
 
   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<!DOCTYPE document
[
<!ENTITY hellip   "&#x02026;" >
]>
<document>
  <properties>
    <title>Building and Contributing to JMeter</title>
  </properties>
<body>
<section name="Building JMeter" >
<h3>Acquiring the source</h3>
<p>The full source is distributed alongside the binary, and you can also find source repositories <a href="./svnindex.html">here</a> .</p>
<p>
The source archive, SVN and GIT do not contain any of the required library files.

<h3>Compiling and packaging JMeter using Eclipse</h3>
<h4>Option 1 : Setting up Eclipse project with Ant task</h4>
Once you have downloaded the sources using git or svn, you can setup the Eclipse project by running:

<source>ant setup-eclipse-project</source>

You can then import the project using 
<menuchoice>
    <guimenuitem>File</guimenuitem>
    <guimenuitem>Import</guimenuitem>
    <guimenuitem>Existing projects into Workspace</guimenuitem>
</menuchoice> and select the folder containing JMeter sources.

<h4>Option 2 : Setting up Eclipse project manually</h4> 
The first step is to download dependencies by running the Ant command:</p>
<source>
ant download_jars
</source>
<p>Or you can download the binary distribution archive for a release and unpack it into the same directory structure as the source.
This will ensure that the <code>lib/</code> directory contains the jar files needed for running JMeter.
There are a few additional jars that are needed to build JMeter, download these using:
</p>
<source>
ant download_jars
</source>
<p>
This will retrieve any missing jars.
</p>

<p>
Once you have downloaded the source from SVN or the release archives and run the ant <code>download_jars</code> target to
install the dependent jars, you can configure Eclipse. The easiest way to do this is to replace the Eclipse <code>.classpath</code>
file with the <code>eclipse.classpath</code> file provided with JMeter. This will set up the source-paths and most of the libraries.
</p>
<p>
Ensure you read <code>eclipse.readme</code> for project configuration.
</p>


<h3>Compiling and packaging JMeter using Ant</h3>
<p>
JMeter can be built entirely using Ant.
The basic command is:</p>
<source>
ant [install]
</source>
See <code>build.xml</code> (or call <code>ant -p</code>) for the other targets that can be used.

</section>

<section name="Contributing to JMeter">
<h2>We love contribution</h2>
We are very grateful to you if you take some time to contribute to the project.
If you have some time to spend on the project you can pick existing enhancement or bug from <a target="_blank" href="issues.html">Issues page</a>.

<h2>Submitting a patch</h2>

If you want to contribute to JMeter for a bug fix or enhancement, here is the procedure to follow:

<h3>Check your patch</h3>
Before submitting your patch ensure you do the following:<br/>

Check that patch compiles and follows Tab space policy by running:
<source>ant package-and-check</source>

Check that patch does not break JUnit tests by running:
<source>ant test</source>

<h3>Create a PR using GIT</h3>
<ul>
    <li>Open a bugzilla issue, see <a target="_blank" href="issues.html">Issues page</a></li>
    <li>Fork <a href="https://www.github.com/apache/jmeter" >Apache JMeter mirror</a></li>
    <li>Clone your forked repository locally : <source>git clone https://github.com/yourid/jmeter/</source></li>
    <li>Create a branch using for example bugzilla id: <source>git branch BUGID</source></li>
    <li>Checkout the new branch : <source>git checkout BUGID</source></li>
    <li>commit your fix there : <source>git commit -m 'Fix to BUGID' list of files</source></li>
    <li>Add JMeter repository as upstream : <source>git remote add upstream http://www.github.com/apache/jmeter</source></li>
    <li>push it : <source>git push origin BUGID</source></li>
    <li>Create a PR and link it in the bugzilla issue</li>
</ul>

<h3>Create a PR using Patch</h3>
<ul>
    <li>Open a bugzilla issue, see <a target="_blank" href="issues.html">Issues page</a></li>
    <li>Checkout Apache JMeter source</li>
    <li>Code your fix</li>
    <li>Create your patch by Right clicking on Eclipse project and select 
        <menuchoice>
            <guimenuitem>Team</guimenuitem>
            <guimenuitem>Create Patch &hellip;</guimenuitem>
        </menuchoice></li>
    <li>Attach your patch to the bugzilla issue</li>
</ul>
</section>

<section name="Automated builds">
<h2>Automated (nightly) builds</h2>
<p>
As part of the development process, the JMeter project has access to various Continuous Integration (CI) server builds.
The build output can be useful for testing recent changes to the code-base. 
</p>
<p>
Please note that the builds have not undergone any QA and should only be used for development testing.
For further information, see the <a href="nightly.html">Nightly builds for developers</a> page.
</p>
</section>

<section name="Building Add-Ons">
<h2>Building Add-Ons</h2>
<p>
There is no need to build JMeter if you just want to build an add-on.
Just download the binary archive and add the jars to the classpath or use Maven artifacts to build your add-ons.
You may want to also download the source so it can be used by the IDE.
</p>
<p>See the <code>extras/addons*</code> files in the source tree for some suggestions</p>
</section>
</body>
</document>
