blob: 29e9fa49d85800756a0cddd243382baaa1c5a8df [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--
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.
-->
<html>
<head>
<link type="text/css" rel="stylesheet" href="/resources/site.css">
<script src='/resources/space.js'></script>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8">
<meta name="keywords" content="business integration, EAI, SOA, Service Oriented Architecture, web services, SOAP, JBI, JMS, WSDL, XML, EDI, Electronic Data Interchange, standards support, integration standards, application integration, middleware, software, solutions, services, CXF, open source">
<meta name="description" content="Apache CXF, Services Framework - Connecting Maven, Eclipse, Checkstyle, and PMD">
<link type="text/css" rel="stylesheet" href="/resources/highlighter/styles/shCoreCXF.css">
<link type="text/css" rel="stylesheet" href="/resources/highlighter/styles/shThemeCXF.css">
<script src='/resources/highlighter/scripts/shCore.js'></script>
<script src='/resources/highlighter/scripts/shBrushXml.js'></script>
<script src='/resources/highlighter/scripts/shBrushJava.js'></script>
<script>
SyntaxHighlighter.defaults['toolbar'] = false;
SyntaxHighlighter.all();
</script>
<title>
Apache CXF -- Connecting Maven, Eclipse, Checkstyle, and PMD
</title>
</head>
<body onload="init()">
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td id="cell-0-0" colspan="2">&nbsp;</td>
<td id="cell-0-1">&nbsp;</td>
<td id="cell-0-2" colspan="2">&nbsp;</td>
</tr>
<tr>
<td id="cell-1-0">&nbsp;</td>
<td id="cell-1-1">&nbsp;</td>
<td id="cell-1-2">
<!-- Banner -->
<div class="banner" id="banner"><div><table border="0" cellpadding="0" cellspacing="0" width="100%"><tr><td align="left" colspan="1" nowrap>
<a shape="rect" href="http://cxf.apache.org/" title="Apache CXF"><span style="font-weight: bold; font-size: 170%; color: white">Apache CXF</span></a>
</td><td align="right" colspan="1" nowrap>
<a shape="rect" href="http://www.apache.org/" title="The Apache Software Foundation"><img width="214px" height="88" border="0" alt="ASF Logo" src="https://apache.org/img/asf_logo.png"></a>
</td></tr></table></div></div>
<!-- Banner -->
<div id="top-menu">
<table border="0" cellpadding="1" cellspacing="0" width="100%">
<tr>
<td>
<div align="left">
<!-- Breadcrumbs -->
<a href="index.html">Index</a>&nbsp;&gt;&nbsp;<a href="setting-up-eclipse.html">Setting up Eclipse</a>&nbsp;&gt;&nbsp;<a href="connecting-maven-eclipse-checkstyle-and-pmd.html">Connecting Maven, Eclipse, Checkstyle, and PMD</a>
<!-- Breadcrumbs -->
</div>
</td>
<td>
<div align="right">
<!-- Quicklinks -->
<div id="quicklinks"><p><a shape="rect" href="download.html">Download</a> | <a shape="rect" href="http://cxf.apache.org/docs/index.html">Documentation</a></p></div>
<!-- Quicklinks -->
</div>
</td>
</tr>
</table>
</div>
</td>
<td id="cell-1-3">&nbsp;</td>
<td id="cell-1-4">&nbsp;</td>
</tr>
<tr>
<td id="cell-2-0" colspan="2">&nbsp;</td>
<td id="cell-2-1">
<table>
<tr valign="top">
<td height="100%">
<div id="wrapper-menu-page-right">
<div id="wrapper-menu-page-top">
<div id="wrapper-menu-page-bottom">
<div id="menu-page">
<!-- NavigationBar -->
<div id="navigation"><h3 id="Navigation-ApacheCXF"><a shape="rect" href="index.html">Apache CXF</a></h3><ul class="alternate"><li><a shape="rect" href="index.html">Home</a></li><li><a shape="rect" href="download.html">Download</a></li><li><a shape="rect" href="people.html">People</a></li><li><a shape="rect" href="project-status.html">Project Status</a></li><li><a shape="rect" href="roadmap.html">Roadmap</a></li><li><a shape="rect" href="mailing-lists.html">Mailing Lists</a></li><li><a shape="rect" class="external-link" href="http://issues.apache.org/jira/browse/CXF">Issue Reporting</a></li><li><a shape="rect" href="special-thanks.html">Special Thanks</a></li><li><a shape="rect" class="external-link" href="http://www.apache.org/licenses/">License</a></li><li><a shape="rect" href="security-advisories.html">Security Advisories</a></li></ul><h3 id="Navigation-Users">Users</h3><ul class="alternate"><li><a shape="rect" href="http://cxf.apache.org/docs/index.html">User's Guide</a></li><li><a shape="rect" href="support.html">Support</a></li><li><a shape="rect" href="faq.html">FAQ</a></li><li><a shape="rect" href="resources-and-articles.html">Resources and Articles</a></li></ul><h3 id="Navigation-Search">Search</h3><form enctype="application/x-www-form-urlencoded" method="get" id="cse-search-box" action="http://www.google.com/cse"><div> <input type="hidden" name="cx" value="002890367768291051730:o99qiwa09y4"> <input type="hidden" name="ie" value="UTF-8"> <input type="text" name="q" size="21"> <input type="submit" name="sa" value="Search"> </div> </form> <script type="text/javascript" src="http://www.google.com/cse/brand?form=cse-search-box&amp;lang=en"></script> <h3 id="Navigation-Developers">Developers</h3><ul class="alternate"><li><a shape="rect" href="http://cxf.apache.org/docs/cxf-architecture.html">Architecture Guide</a></li><li><a shape="rect" href="source-repository.html">Source Repository</a></li><li><a shape="rect" href="building.html">Building</a></li><li><a shape="rect" href="automated-builds.html">Automated Builds</a></li><li><a shape="rect" href="testing-debugging.html">Testing-Debugging</a></li><li><a shape="rect" href="coding-guidelines.html">Coding Guidelines</a></li><li><a shape="rect" href="getting-involved.html">Getting Involved</a></li><li><a shape="rect" href="release-management.html">Release Management</a></li></ul><h3 id="Navigation-Subprojects">Subprojects</h3><ul class="alternate"><li><a shape="rect" href="distributed-osgi.html">Distributed OSGi</a></li><li><a shape="rect" href="xjc-utils.html">XJC Utils</a></li><li><a shape="rect" href="build-utils.html">Build Utils</a></li><li><a shape="rect" href="fediz.html">Fediz</a></li></ul><h3 id="Navigation-ASF"><a shape="rect" class="external-link" href="http://www.apache.org">ASF</a></h3><ul class="alternate"><li><a shape="rect" class="external-link" href="http://www.apache.org/foundation/how-it-works.html">How Apache Works</a></li><li><a shape="rect" class="external-link" href="http://www.apache.org/foundation/">Foundation</a></li><li><a shape="rect" class="external-link" href="http://www.apache.org/foundation/sponsorship.html">Sponsor Apache</a></li><li><a shape="rect" class="external-link" href="http://www.apache.org/foundation/thanks.html">Thanks</a></li><li><a shape="rect" class="external-link" href="http://www.apache.org/security/">Security</a></li></ul><p>&#160;</p><p><a shape="rect" class="external-link" href="http://www.apache.org/events/current-event.html"><span class="confluence-embedded-file-wrapper"><img class="confluence-embedded-image confluence-external-resource" src="http://www.apache.org/events/current-event-125x125.png" data-image-src="http://www.apache.org/events/current-event-125x125.png"></span></a></p></div>
<!-- NavigationBar -->
</div>
</div>
</div>
</div>
</td>
<td height="100%">
<!-- Content -->
<div class="wiki-content">
<div id="ConfluenceContent"><p>You want to check your Java code with PMD and Checkstyle.</p>
<p>You know what to do, you set up some rules files.</p>
<p>You build with maven 2.</p>
<p>You know what to do, you set up the plugins.</p>
<p>You type at Eclipse.</p>
<p>Now you have trouble. You need:</p>
<p>a) Your Eclipse code formatting style, warning, and cleanup to be consistent with your rules.<br clear="none">
b) Eclipse configuration for the Eclipse plugins for PMD and Checkstyle that are consistent with<br clear="none">
your rules.</p>
<p>If you start looking at this, you will get a headache.</p>
<p>Basically there are two ways to achive it:</p>
<ol><li>Manual setup: manually configure Eclipse checkstyle and pmd in your workspace</li><li>Automated maven setup: update Eclipse workspace automatically using maven profile</li></ol>
<p>Let discuss it in details</p>
<h5 id="ConnectingMaven,Eclipse,Checkstyle,andPMD-ManualSetup">Manual Setup</h5>
<p>CXF contains all actual configuration files for checkstyle and PMD in <a shape="rect" class="external-link" href="http://svn.apache.org/repos/asf/cxf/build-utils/trunk/buildtools">buildtools project </a>. You can install appropriate configurations manually using Eclipse Prefereneces/Checkstyle and Preferences/PMD dialogs.</p>
<h5 id="ConnectingMaven,Eclipse,Checkstyle,andPMD-AutomatedMavenSetup">Automated Maven Setup</h5>
<p>If you've done much Eclipse configuration, you know that pathnames are a pain. Relative pathnames<br clear="none">
can't cross Eclipse projects. Anything you can wire up via classpath is easier than anything <br clear="none">
wired by pathname. <br clear="none">
Luckily for you, Dan Kulp did a ton of work to make this work. You can see it in CXF, and adapt it<br clear="none">
to your own purposes.</p>
<p>Thus the following scheme.</p>
<p>1. A project to contain the common files.<br clear="none">
CXF has a 'cxf-buildtools' project. It contains files for the tools. For each tool, there<br clear="none">
are two files: the XML file that configures the tool (name ends with .xml), and the more-or-less<br clear="none">
XML file that Eclipse knows how to read to configure the Eclipse plugin. These files all live<br clear="none">
in src/main/resources. When the builttools project builds, it just copies them to target<br clear="none">
and bundles them into a JAR file.</p>
<p>2. Maven plugins use the files.<br clear="none">
The Maven plugins, of course, feed the same core XML files to the tools. By making the buildtools artifact<br clear="none">
a dependency of the Maven checkstyle and PMD plugins, the files become available by classpath.<br clear="none">
This happens in the parent POM (parent/pom.xml) so that it is set up for all of the projects.</p>
<p>3. Eclipse.<br clear="none">
Eclipse is configured via a collection of files that live in the .settings directories of the workspace and the individual projects. Each plugin defines the format of its settings. None of them are documented: it's all reverse engineering.</p>
<p>How to setup it step by step:<br clear="none">
Step 1: Check out CXF projects on the root level.<br clear="none">
Step 2: Create your Eclipse workspace. By default maven plugin assumes that workspace is located in ../workspace relative to root CXF source directory. To customize it, just add following xml fragment into your maven settings.xml:</p>
<div class="code panel pdl" style="border-width: 1px;"><div class="codeContent panelContent pdl">
<pre class="brush: java; gutter: false; theme: Default">
&lt;profiles&gt;
&lt;profile&gt;
&lt;id&gt;extra&lt;/id&gt;
&lt;properties&gt;
&lt;gpg.useagent&gt;true&lt;/gpg.useagent&gt;
&lt;eclipse.workspace&gt;ECLIPSE_WORKSPACE_NAME&lt;/eclipse.workspace&gt;
&lt;downloadSources&gt;true&lt;/downloadSources&gt;
&lt;eclipse.workspace.dir&gt;ECLIPSE_WORKSPACE_PATH&lt;/eclipse.workspace.dir&gt;
&lt;eclipse.output.directory&gt;${project.build.outputDirectory}&lt;/eclipse.output.directory&gt;
&lt;/properties&gt;
&lt;/profile&gt;
...
&lt;/profiles&gt;
</pre>
</div></div>
<p>Step 3: Run 'setup.eclipse' maven profile from CXF root source folder.<br clear="none">
The 'setup.eclipse' profile uses a combination of ant, xslt, and the 'copy' task to create all of the desired settings files. Some of them are created by copying or modifying templates in etc/eclipse.<br clear="none">
Running this profile from root CXF level will update your Eclipse workspace with necessary settings. If workspace was updated, you will be able to see cxf-checkstyle.xml and cxf-checkstyle-corba.xml files in root workspace directory.<br clear="none">
Once it happens, it will be enough to import CXF projects generated using eclipse:eclipse or m2e plugin into workspace. Checkstyle and PMD will be automatically activated.</p></div>
</div>
<!-- Content -->
</td>
</tr>
</table>
</td>
<td id="cell-2-2" colspan="2">&nbsp;</td>
</tr>
<tr>
<td id="cell-3-0">&nbsp;</td>
<td id="cell-3-1">&nbsp;</td>
<td id="cell-3-2">
<div id="footer">
<!-- Footer -->
<div id="site-footer">
<a href="http://cxf.apache.org/privacy-policy.html">Privacy Policy</a> -
(<a href="https://cwiki.apache.org/confluence/pages/editpage.action?pageId=105238">edit page</a>)
(<a href="https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=105238&amp;showComments=true&amp;showCommentArea=true#addcomment">add comment</a>)<br>
Apache CXF, CXF, Apache, the Apache feather logo are trademarks of The Apache Software Foundation.<br>
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</div>
<!-- Footer -->
</div>
</td>
<td id="cell-3-3">&nbsp;</td>
<td id="cell-3-4">&nbsp;</td>
</tr>
<tr>
<td id="cell-4-0" colspan="2">&nbsp;</td>
<td id="cell-4-1">&nbsp;</td>
<td id="cell-4-2" colspan="2">&nbsp;</td>
</tr>
</table>
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-4458903-1");
pageTracker._trackPageview();
} catch(err) {}</script>
</body>
</html>