FYI Dan

I switched awhile back from Eclipse (I was a long-time user) to IntelliJ and I love it. It takes a bit getting used to the key mappings but the refactoring capabilities are just awesome. I'm also amazed at the things it can catch from analyzing code. And even better, JetBrains offers free open source licenses so you can pick one up if you like it.

Jim

On Jun 10, 2006, at 2:44 PM, Daniel Kulp wrote:

Jeremy,


Dan, what's the Eclipse issue with ruleset? Is it a Eclipse extension
thing or something that would impact the main build?

The eclipse PMD plugin has some strange "design flaws" (IMO) that make it harder to use than it really should be. The main restriction is that there isn't really a way to set a "global" ruleset that can be referenced by the project. For example, with the Checkstyle plugin, in our workspace we can create a named set of checkstyle rules called "Tuscany Checks" that points to the tuscany-checkstyle.xml file. The ".checkstyle" file in each project is
then very small, it just says "use Tuscany Checks".   That way, if the
tuscany-checkstyle.xml changes, then all projects get the changes.

PMD, on the otherhand, cannot do that. It only sets rules in one of two
ways:
1) In the project, there is a ".ruleset" file that defines all the rules for
that project.   This means the .ruleset file needs to be copied to ALL
directories and if you want to change the PMD rules, you need to re- copy to all directories. (although that does allow different directories to have
different rules)

2) You configure a bunch of rules in the workspace, but each project then specifies which of those rules to use in their .pmd file. Thus, if you want to add a new rule, you need to modify the .pmd file in each directory. That
sucks just as bad.

The PMD maven plugin doesn't suffer the problem. It can use a single file
defined elsewhere (in the buildtools jar) for all the projects.   The
workaround I mentioned was to create a "setup.eclipse" profile that unpacks the file from that jar and creates the .ruleset file from it. Thus, each directory doesn't have the .ruleset file checked into svn. It's created only if you need it for eclipse. The cool thing is the "setup.eclipse" profile can also generate the .checkstyle and .pmd files at the same time so those don't get checked in. (just FYI: we are NOT doing this in celtix yet.
I just figured out how to do that workaround last week)

PMD has some other problems as well:
1) The MAVEN PMD plugin cannot check the test sources. It can ONLY be configured to test src/main/java. I've already logged a bug on that.

2) The ECLIPSE PMD plugin cannot be configured to NOT check the generated sources. This is a real killer for projects that have generated artifacts. In general, generated artifacts rarely meet all the .pmd requirements unless the .pmd requirements aren't very strict. For Celtix, we use very few PMD
rules so the JAXB generated code passes.

3) PMD is pretty slow. Checkstyle is about the same speed as Javac. If you configure a bunch of PMD rules, it can take a LONG time. However, because
of (2), we don't configure many rules so it's not too bad.


Anyway, those are all PMD issues, not Checkstyle. The checkstyle stuff works quite well. You can tell Checkstyle to check only ^src/**/*.java so the stuff in target/generated is ignored. You can use a "named" config file so each project doesn't need one. It's also relatively quick (compared to
PMD).


Or a somewhat related note, does anyone have any experience with the
Jetstyle IDEA plugin (or another way of integrating this with IDEA)?

Haven't tried it yet. I just started trying out IDEA on Wednesday. I'm investigating if it can help with some big "Celtix refactorings" that we're working on, but it hung when I tried to do a major refactor (change the package names for EVERYTHING). (That said, eclipse didn't fare much better)


--
J. Daniel Kulp
Principal Engineer
IONA
P: 781-902-8727    C: 508-380-7194   F:781-902-8001
[EMAIL PROTECTED]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to