2015-03-08 18:22:58 +08:00
<!DOCTYPE html SYSTEM "about:legacy-compat">
2017-07-04 02:53:13 +08:00
< html lang = "en" >
< head >
< META http-equiv = "Content-Type" content = "text/html; charset=iso-8859-15" >
< title > Apache JMeter
2015-03-08 18:22:58 +08:00
-
2017-07-04 02:53:13 +08:00
Building and Contributing to JMeter< / title >
< meta name = "viewport" content = "width=device-width, initial-scale=1" >
2018-01-30 15:49:14 +08:00
< link href = "https://fonts.googleapis.com/css?family=Merriweather:400normal" rel = "stylesheet" type = "text/css" >
2017-07-04 02:53:13 +08:00
< link href = "https://maxcdn.bootstrapcdn.com/font-awesome/4.6.1/css/font-awesome.min.css" rel = "stylesheet" type = "text/css" >
< link rel = "stylesheet" type = "text/css" href = "./css/new-style.css" >
< link rel = "apple-touch-icon-precomposed" href = "./images/apple-touch-icon.png" >
< link rel = "icon" href = "./images/favicon.png" >
< meta name = "msapplication-TileColor" content = "#ffffff" >
< meta name = "msapplication-TileImage" content = "./images/mstile-144x144.png" >
< meta name = "theme-color" content = "#ffffff" >
< / head >
< body role = "document" >
< a href = "#content" class = "hidden" > Main content< / a >
< div class = "header" >
<!--
2015-03-08 18:22:58 +08:00
APACHE LOGO
2017-07-04 02:53:13 +08:00
-->
< div >
2018-01-30 15:49:14 +08:00
< a href = "https://www.apache.org" > < img title = "Apache Software Foundation" class = "asf-logo logo" src = "./images/asf-logo.svg" alt = "Logo ASF" > < / a >
2017-07-04 02:53:13 +08:00
< / div >
<!--
2015-03-08 18:22:58 +08:00
PROJECT LOGO
2017-07-04 02:53:13 +08:00
-->
< div >
2018-01-30 15:49:14 +08:00
< a href = "https://jmeter.apache.org/" > < img class = "logo" src = "./images/logo.svg" alt = "Apache JMeter" > < / a >
2017-07-04 02:53:13 +08:00
< / div >
< div class = "banner" >
2018-01-30 15:49:14 +08:00
< a href = "https://www.apache.org/events/current-event.html" > < img src = "https://www.apache.org/events/current-event-234x60.png" alt = "Current Apache event teaser" > < / a >
2017-07-04 02:53:13 +08:00
< div class = "clear" > < / div >
< / div >
< / div >
< div class = "nav" >
< ul class = "menu" >
< li onClick = "return true" >
< div class = "menu-title" > About< / div >
< ul >
< li >
< a href = "./index.html" > Overview< / a >
< / li >
< li >
2018-01-30 15:49:14 +08:00
< a href = "https://www.apache.org/licenses/" > License< / a >
2017-07-04 02:53:13 +08:00
< / li >
< / ul >
< / li >
< / ul >
< ul class = "menu" >
< li onClick = "return true" >
< div class = "menu-title" > Download< / div >
< ul >
< li >
< a href = "./download_jmeter.cgi" > Download Releases< / a >
< / li >
< li >
< a href = "./changes.html" > Release Notes< / a >
< / li >
< / ul >
< / li >
< / ul >
< ul class = "menu" >
< li onClick = "return true" >
< div class = "menu-title" > Documentation< / div >
< ul >
< li >
< a href = "./usermanual/get-started.html" > Get Started< / a >
< / li >
< li >
< a href = "./usermanual/index.html" > User Manual< / a >
< / li >
< li >
< a href = "./usermanual/best-practices.html" > Best Practices< / a >
< / li >
< li >
< a href = "./usermanual/component_reference.html" > Component Reference< / a >
< / li >
< li >
< a href = "./usermanual/functions.html" > Functions Reference< / a >
< / li >
< li >
< a href = "./usermanual/properties_reference.html" > Properties Reference< / a >
< / li >
< li >
< a href = "./changes_history.html" > Change History< / a >
< / li >
< li >
< a href = "./api/index.html" > Javadocs< / a >
< / li >
< li >
2018-01-30 15:49:14 +08:00
< a href = "https://wiki.apache.org/jmeter" > JMeter Wiki< / a >
2017-07-04 02:53:13 +08:00
< / li >
< li >
2018-01-30 15:49:14 +08:00
< a href = "https://wiki.apache.org/jmeter/JMeterFAQ" > FAQ (Wiki)< / a >
2017-07-04 02:53:13 +08:00
< / li >
< / ul >
< / li >
< / ul >
< ul class = "menu" >
< li onClick = "return true" >
< div class = "menu-title" > Tutorials< / div >
< ul >
< li >
< a href = "./usermanual/jmeter_distributed_testing_step_by_step.html" > Distributed Testing< / a >
< / li >
< li >
< a href = "./usermanual/jmeter_proxy_step_by_step.html" > Recording Tests< / a >
< / li >
< li >
< a href = "./usermanual/junitsampler_tutorial.html" > JUnit Sampler< / a >
< / li >
< li >
< a href = "./usermanual/jmeter_accesslog_sampler_step_by_step.html" > Access Log Sampler< / a >
< / li >
< li >
< a href = "./usermanual/jmeter_tutorial.html" > Extending JMeter< / a >
< / li >
< / ul >
< / li >
< / ul >
< ul class = "menu" >
< li onClick = "return true" >
< div class = "menu-title" > Community< / div >
< ul >
< li >
< a href = "./issues.html" > Issue Tracking< / a >
< / li >
< li >
2018-01-30 15:49:14 +08:00
< a href = "https://www.apache.org/security/" > Security< / a >
2017-07-04 02:53:13 +08:00
< / li >
< li >
< a href = "./mail.html" > Mailing Lists< / a >
< / li >
< li >
< a href = "./svnindex.html" > Source Repositories< / a >
< / li >
< li >
< a href = "./building.html" > Building and Contributing< / a >
< / li >
< li >
< a href = "https://projects.apache.org/project.html?jmeter" > Project info at Apache< / a >
< / li >
< li >
2018-01-30 15:49:14 +08:00
< a href = "https://wiki.apache.org/jmeter/JMeterCommitters" > Contributors< / a >
2017-07-04 02:53:13 +08:00
< / li >
< / ul >
< / li >
< / ul >
< ul class = "menu" >
< li onClick = "return true" >
< div class = "menu-title" > Foundation< / div >
< ul >
< li >
2018-01-30 15:49:14 +08:00
< a href = "https://www.apache.org/" > The Apache Software Foundation (ASF)< / a >
2017-07-04 02:53:13 +08:00
< / li >
< li >
2018-01-30 15:49:14 +08:00
< a href = "https://www.apache.org/foundation/getinvolved.html" > Get Involved in the ASF< / a >
2017-07-04 02:53:13 +08:00
< / li >
< li >
2018-01-30 15:49:14 +08:00
< a href = "https://www.apache.org/foundation/sponsorship.html" > Sponsorship< / a >
2017-07-04 02:53:13 +08:00
< / li >
< li >
2018-01-30 15:49:14 +08:00
< a href = "https://www.apache.org/foundation/thanks.html" > Thanks< / a >
2017-07-04 02:53:13 +08:00
< / li >
< / ul >
< / li >
< / ul >
< / div >
< div class = "main" id = "content" >
< div class = "social-media" >
< ul class = "social-media-links" >
< li class = "twitter" >
< a href = "https://twitter.com/ApacheJMeter" title = "Follow us on Twitter" > < i class = "fa fa-twitter" aria-hidden = "true" > < / i > Twitter< / a >
< / li >
< li class = "github" >
< a href = "https://github.com/apache/jmeter" title = "Fork us on github" > < i class = "fa fa-github" aria-hidden = "true" > < / i > github< / a >
< / li >
< / ul >
< / div >
< div class = "section" >
< h1 > Building JMeter< / h1 >
Before you can compile JMeter, you will need a few things:
< ul >
< li > a Java 8 compatible JDK (Java Development Kit)< / li >
2018-01-28 16:38:53 +08:00
< li > a working installation of < a href = "http://ant.apache.org" > Ant< / a > (at least version 1.9.1)< / li >
2017-07-04 02:53:13 +08:00
< li > the JMeter sources as shown in the next section< / li >
< / ul >
2016-04-16 22:36:00 +08:00
< h3 > Acquiring the source< / h3 >
2017-07-04 02:53:13 +08:00
< p > The full source is distributed alongside the binary, and you can also find it < a href = "./svnindex.html" > in the source repositories.< / a >
< / p >
2009-05-10 06:57:45 +08:00
< p >
2016-04-16 22:36:00 +08:00
The source archive, SVN and GIT do not contain any of the required library files.
2015-03-09 02:55:21 +08:00
2016-04-16 22:36:00 +08:00
< h3 > Compiling and packaging JMeter using Eclipse< / h3 >
2017-07-04 02:53:13 +08:00
2016-04-16 22:36:00 +08:00
< 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:
2009-05-10 06:57:45 +08:00
2016-04-16 22:36:00 +08:00
< pre class = "source" > ant setup-eclipse-project< / pre >
You can then import the project using
< span class = "menuchoice" > < span class = "guimenuitem" > File< / span > → < span class = "guimenuitem" > Import< / span > → < span class = "guimenuitem" > Existing projects into Workspace< / span > < / span > 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 >
2017-07-04 02:53:13 +08:00
2016-04-16 22:36:00 +08:00
< pre class = "source" >
2010-07-08 18:39:18 +08:00
ant download_jars
< / pre >
2017-07-04 02:53:13 +08:00
2015-03-08 18:22:58 +08:00
< p > Or you can download the binary distribution archive for a release and unpack it into the same directory structure as the source.
2016-04-16 22:36:00 +08:00
This will ensure that the < span class = "code" > lib/< / span > directory contains the jar files needed for running JMeter.
2011-08-01 03:18:54 +08:00
There are a few additional jars that are needed to build JMeter, download these using:
2016-04-16 22:36:00 +08:00
< / p >
2017-07-04 02:53:13 +08:00
2016-04-16 22:36:00 +08:00
< pre class = "source" >
2011-08-01 03:18:54 +08:00
ant download_jars
< / pre >
2017-07-04 02:53:13 +08:00
2016-04-16 22:36:00 +08:00
< p >
2011-08-01 03:18:54 +08:00
This will retrieve any missing jars.
2009-05-10 06:57:45 +08:00
< / p >
2017-07-04 02:53:13 +08:00
< div class = "clear" > < / div >
< div class = "note" >
2017-04-01 22:01:02 +08:00
If you are behind a proxy, you can set a few build properties in < span class = "code" > build-local.properties< / span > for ant to use the proxy:
< pre class = "source" >
proxy.use=true
proxy.host=proxy.example.invalid
proxy.port=8080
proxy.user=your_user_name
proxy.pass=your_password
< / pre >
You might also want to skip some tests - that are failing without proper access to the internet - by adding some more
properties into < span class = "code" > build-local.properties< / span > :
< pre class = "source" >
skip.bug52310=true
skip.bug60607=true
skip.batchtest_Http4ImplPreemptiveBasicAuth=true
skip.batchtest_SlowCharsFeature=true
skip.batchtest_TestKeepAlive=true
skip.test_http=true
skip.test_TestDNSCacheManager.testWithCustomResolverAnd1Server=true
< / pre >
2017-07-04 02:53:13 +08:00
< / div >
< div class = "clear" > < / div >
2016-04-16 22:36:00 +08:00
< p >
Once you have downloaded the source from SVN or the release archives and run the ant < span class = "code" > download_jars< / span > target to
install the dependent jars, you can configure Eclipse. The easiest way to do this is to replace the Eclipse < span class = "code" > .classpath< / span >
file with the < span class = "code" > eclipse.classpath< / span > file provided with JMeter. This will set up the source-paths and most of the libraries.
< / p >
2017-07-04 02:53:13 +08:00
2016-04-16 22:36:00 +08:00
< p >
2016-11-14 02:05:08 +08:00
Ensure you read < span class = "code" > eclipse.md< / span > for project configuration.
2016-04-16 22:36:00 +08:00
< / p >
2017-07-04 02:53:13 +08:00
2015-03-08 18:22:58 +08:00
< h3 > Compiling and packaging JMeter using Ant< / h3 >
2017-07-04 02:53:13 +08:00
2009-05-10 06:57:45 +08:00
< p >
2011-08-01 03:18:54 +08:00
JMeter can be built entirely using Ant.
2016-04-16 22:36:00 +08:00
The basic command is:< / p >
2017-07-04 02:53:13 +08:00
2016-04-16 22:36:00 +08:00
< pre class = "source" >
2017-07-04 02:53:13 +08:00
ant install
2011-08-01 03:18:54 +08:00
< / pre >
2017-07-04 02:53:13 +08:00
2016-11-09 00:25:16 +08:00
< p >
2017-07-04 02:53:13 +08:00
See < span class = "code" > build.xml< / span > (or call < span class = "code" > ant -p< / span > ) for the other targets that can be used. Note that you can skip the word < span class = "code" > < em > install< / em > < / span > after < span class = "code" > ant< / span > as it is the default target.
2016-11-09 00:25:16 +08:00
< / p >
2017-07-04 02:53:13 +08:00
< / div >
< div class = "section" >
< h1 > Contributing to JMeter< / h1 >
2016-04-16 22:36:00 +08:00
< h2 > We love contribution< / h2 >
2017-07-04 02:53:13 +08:00
2016-11-09 00:25:16 +08:00
< p >
2016-04-16 22:36:00 +08:00
We are very grateful to you if you take some time to contribute to the project.
2016-11-05 22:26:10 +08:00
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 > .< br >
You can also contribute to translation, see < a href = "localising/index.html" > JMeter Localisation (Translator's Guide)< / a > .
2016-11-09 00:25:16 +08:00
< / p >
2016-04-16 22:36:00 +08:00
2017-07-04 02:53:13 +08:00
2016-04-16 22:36:00 +08:00
< h2 > Submitting a patch< / h2 >
2017-07-04 02:53:13 +08:00
2016-11-09 00:25:16 +08:00
< p >
2016-04-16 22:36:00 +08:00
If you want to contribute to JMeter for a bug fix or enhancement, here is the procedure to follow:
2016-11-09 00:25:16 +08:00
< / p >
2016-04-16 22:36:00 +08:00
2017-07-04 02:53:13 +08:00
2016-04-16 22:36:00 +08:00
< h3 > Check your patch< / h3 >
2017-07-04 02:53:13 +08:00
2016-11-09 00:25:16 +08:00
< p >
2016-04-16 22:36:00 +08:00
Before submitting your patch ensure you do the following:< br >
Check that patch compiles and follows Tab space policy by running:
2016-11-09 00:25:16 +08:00
< / p >
2017-07-04 02:53:13 +08:00
2016-04-16 22:36:00 +08:00
< pre class = "source" > ant package-and-check< / pre >
2017-07-04 02:53:13 +08:00
2016-11-09 00:25:16 +08:00
< p >
2016-04-16 22:36:00 +08:00
Check that patch does not break JUnit tests by running:
2016-11-09 00:25:16 +08:00
< / p >
2017-07-04 02:53:13 +08:00
2016-04-16 22:36:00 +08:00
< pre class = "source" > ant test< / pre >
2017-07-04 02:53:13 +08:00
2016-04-16 22:36:00 +08:00
< h3 > Create a PR using GIT< / h3 >
2017-07-04 02:53:13 +08:00
2016-04-16 22:36:00 +08:00
< ul >
2017-07-04 02:53:13 +08:00
< 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 : < pre class = "source" > git clone https://github.com/yourid/jmeter/< / pre >
< / li >
< li > Create a branch using for example bugzilla id: < pre class = "source" > git branch BUGID< / pre >
< / li >
< li > Checkout the new branch : < pre class = "source" > git checkout BUGID< / pre >
< / li >
< li > commit your fix there : < pre class = "source" > git commit -m 'Fix to BUGID' list of files< / pre >
< / li >
< li > Add JMeter repository as upstream : < pre class = "source" > git remote add upstream http://www.github.com/apache/jmeter< / pre >
< / li >
< li > push it : < pre class = "source" > git push origin BUGID< / pre >
< / li >
< li > Create a PR and link it in the bugzilla issue< / li >
2016-04-16 22:36:00 +08:00
< / ul >
2017-07-04 02:53:13 +08:00
2016-04-16 22:36:00 +08:00
< h3 > Create a PR using Patch< / h3 >
2017-07-04 02:53:13 +08:00
2016-04-16 22:36:00 +08:00
< ul >
2017-07-04 02:53:13 +08:00
< 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
< span class = "menuchoice" > < span class = "guimenuitem" > Team< / span > → < span class = "guimenuitem" > Create Patch … < / span > < / span >
< / li >
< li > Attach your patch to the bugzilla issue< / li >
< / ul >
< / div >
< div class = "section" >
< h1 > Automated builds< / h1 >
2016-04-28 04:48:47 +08:00
< h2 > Automated (nightly) builds< / h2 >
2017-07-04 02:53:13 +08:00
2016-04-28 04:48:47 +08:00
< 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 >
2017-07-04 02:53:13 +08:00
2016-04-28 04:48:47 +08:00
< 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 >
2017-07-04 02:53:13 +08:00
< / div >
< div class = "section" >
< h1 > Building Add-Ons< / h1 >
2016-04-16 22:36:00 +08:00
< h2 > Building Add-Ons< / h2 >
2017-07-04 02:53:13 +08:00
2009-05-10 06:57:45 +08:00
< p >
2016-04-16 22:36:00 +08:00
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.
2009-05-10 06:57:45 +08:00
< / p >
2017-07-04 02:53:13 +08:00
2016-04-16 22:36:00 +08:00
< p > See the < span class = "code" > extras/addons*< / span > files in the source tree for some suggestions< / p >
2017-07-04 02:53:13 +08:00
< / div >
< div class = "share-links" >
2016-04-28 04:48:47 +08:00
Share this page:
2017-07-04 02:53:13 +08:00
< ul >
< li class = "fb" >
< a data-social-url = "https://facebook.com/sharer/sharer.php?u=" title = "Share on facebook" > < i class = "fa fa-facebook" aria-hidden = "true" > < / i > share< / a >
< / li >
< li class = "twitter" >
< a data-social-url = "https://twitter.com/intent/tweet?url=" title = "Tweet on twitter" > < i class = "fa fa-twitter" aria-hidden = "true" > < / i > tweet< / a >
< / li >
< li class = "gplus" >
< a data-social-url = "https://plus.google.com/share?url=" title = "Share on Google+" > < i class = "fa fa-google-plus" aria-hidden = "true" > < / i > share< / a >
< / li >
< / ul >
< / div >
< / div >
< div class = "footer" >
< div class = "copyright" >
2015-03-08 18:22:58 +08:00
Copyright ©
1999 –
2018-01-28 16:38:53 +08:00
2018
2015-03-08 18:22:58 +08:00
, Apache Software Foundation
2017-07-04 02:53:13 +08:00
< / div >
< div class = "trademarks" > Apache, Apache JMeter, JMeter, the Apache
2015-03-08 18:22:58 +08:00
feather, and the Apache JMeter logo are
trademarks of the
Apache Software Foundation.
2017-07-04 02:53:13 +08:00
< / div >
< / div >
< script > ( f u n c t i o n ( ) {
2016-04-28 04:48:47 +08:00
// fill in the current location into social links on this page.
"use strict";
var as = document.getElementsByTagName('a');
var loc = document.location.href;
if (!loc.toLowerCase().startsWith('http')) {
return;
}
for (var i=0; i< as.length ; i + + ) {
var href = as[i].getAttribute('data-social-url');
if (href !== null) {
as[i].href = href + encodeURIComponent(loc);
}
}
2017-07-04 02:53:13 +08:00
})();< / script >
< / body >
< / html >