Confused about purpose of Artifacts tabs in Module configuration window

I just haven't worked with the artifacts part of the module window before and am baffled by its defaults. I have a module I am jarring and putting somewhere. That's clear enough. However, in the "output layout" tab, there appears - without me having done anything- just everything but the kitchen sink. It appears to have piled in literally every jar in Community source. I don't really undersand what "layout" this tab is referring to anyways,  so I just left it alone figuring the defaults were probably there for a reason.

What is happening is all those jar are actually being included in my jar,. This is leading to problems when the program runs which aren't worth describing.  My question is- why does Community cram all this stuff in there as the default? What properly belongs there (what need does this tab serve?) Is it reckless to just remove everything except the module's classes you wanted to jar? What is the output layout tab about?  Are preprocessing and post processing tabs about anything other than running some ant target you may want to run before or after you make your module?


What do you mean by "without me having done anything"? How did you create an artifact?

"Output Layout" tree is used to specify what need to be included into the artifact output.

Nikolay Chashnikov
"Develop with pleasure!"


OK so I just re-created what I did.. I find that the default for the drop down is "all modules" instead of (the classes in) my module, i.e.  "myModule". OK so I see what I did wrong. Fixed.

I can reconstruct my thinking. It was something like this:

I am making a module that has to integrate with the Community platform. I suppose that means that I want my module to be seen by "all modules" in Community. It's the default that is shown me; so this must be the default case and this is what the drop down choice "all modules" means in this context. Any other choice, and *some part* of Community that actually picks up my code and runs it, finds it, checks it, loads it, calls it or otherwise "knows" about it  will not be able to find it. "All Modules" makes some sense when you look at it this way.

Any of those activities could be realized in classes which reside in any part of the Community code base. For all I know, security managers could get involved with my code for some reason, template managers,  part or all of pico container, fileloaders, Community utility classes... what do I know  what parts of Intellij "need to find " my code and what they do with them? I know nothing, or very little, (which is as it should be).

I actually selected that option many many Unsolved Community Mysteries ago, which is how we measure mental time around here, and had forgotten all about it. So my bad.

Still, maybe something useful is to be had here,  the reminder that user's minds just go places you'd never imagine, and not just because they're idiots, as programmers like to call each other (although they may be idiots too) . So it's best to over-provision documentation beyond what you think they'll  "reasonably" need. They go to these wrong places because they exist in an state space rich in  possibility, populated by many candidate branchings of meanings for each thing they encounter, branches  which just don't exist for the expert, who has already pruned all that stuff away and thereby gets to the right conclusions quickly and efficiently That reasoning gets unconsciously papered over by the expert with a false veneer of "logicalness" and "necessity" and "obviousness"  when in fact programs can be written any way to do anything, patterns and conventions notwithstanding.