<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Just Java &#187; Java</title>
	<atom:link href="http://blog.cedarsoft.com/tag/java/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.cedarsoft.com</link>
	<description>A blog about Java and (related) Open Source tools...</description>
	<lastBuildDate>Wed, 25 Jan 2012 12:02:25 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Maven: Compiler Plugin configuration &#8211; showing compiler warnings on console</title>
		<link>http://blog.cedarsoft.com/2011/10/maven-compiler-plugin-configuration-showing-compiler-warnings-on-console/</link>
		<comments>http://blog.cedarsoft.com/2011/10/maven-compiler-plugin-configuration-showing-compiler-warnings-on-console/#comments</comments>
		<pubDate>Mon, 03 Oct 2011 22:03:18 +0000</pubDate>
		<dc:creator>Johannes Schneider</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[Hudson]]></category>
		<category><![CDATA[Jenkins]]></category>

		<guid isPermaLink="false">http://blog.cedarsoft.com/?p=469</guid>
		<description><![CDATA[The default compiler plugin configuration hides all warnings. To get all messages on the console, this configuration can be used:
&#60;plugin&#62;
  &#60;groupId&#62;org.apache.maven.plugins&#60;/groupId&#62;
  &#60;artifactId&#62;maven-compiler-plugin&#60;/artifactId&#62;
  &#60;version&#62;2.3.2&#60;/version&#62;
  &#60;configuration&#62;
    &#60;source&#62;1.6&#60;/source&#62;
    &#60;target&#62;1.6&#60;/target&#62;
    &#60;encoding&#62;${project.build.sourceEncoding}&#60;/encoding&#62;
    &#60;showWarnings&#62;true&#60;/showWarnings&#62;
    &#60;showDeprecation&#62;true&#60;/showDeprecation&#62;
    &#60;compilerArgument&#62;-Xlint:all&#60;/compilerArgument&#62;
  &#60;/configuration&#62;
&#60;/plugin&#62;
This configuration [...]]]></description>
			<content:encoded><![CDATA[<p>The default compiler plugin configuration hides all warnings. To get all messages on the console, this configuration can be used:</p>
<pre class="brush:xml">&lt;plugin&gt;
  &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;
  &lt;artifactId&gt;maven-compiler-plugin&lt;/artifactId&gt;
  &lt;version&gt;2.3.2&lt;/version&gt;
  &lt;configuration&gt;
    &lt;source&gt;1.6&lt;/source&gt;
    &lt;target&gt;1.6&lt;/target&gt;
    &lt;encoding&gt;${project.build.sourceEncoding}&lt;/encoding&gt;
    &lt;showWarnings&gt;true&lt;/showWarnings&gt;
    &lt;showDeprecation&gt;true&lt;/showDeprecation&gt;
    &lt;compilerArgument&gt;-Xlint:all&lt;/compilerArgument&gt;
  &lt;/configuration&gt;
&lt;/plugin&gt;</pre>
<p>This configuration is for example useful if you want to use &#8220;Compiler Warnings Plugin&#8221; for Jenkins/Hudson.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cedarsoft.com/2011/10/maven-compiler-plugin-configuration-showing-compiler-warnings-on-console/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Java: Units done right(!?)</title>
		<link>http://blog.cedarsoft.com/2010/11/java-units-done-right/</link>
		<comments>http://blog.cedarsoft.com/2010/11/java-units-done-right/#comments</comments>
		<pubDate>Thu, 04 Nov 2010 16:29:01 +0000</pubDate>
		<dc:creator>Johannes Schneider</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[annotations]]></category>
		<category><![CDATA[units]]></category>

		<guid isPermaLink="false">http://blog.cedarsoft.com/?p=461</guid>
		<description><![CDATA[Did you ever hear that sentence?
&#8220;Marks will be removed for missing units&#8221;
Probably yes. And there is a reason why teachers force their students to always use units.
But whatever API you look at, there is (almost) never any hints which unit one should use. Of course reading the Javadoc might give you the right hint &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p>Did you ever hear that sentence?<br />
&#8220;Marks will be removed for missing units&#8221;<br />
Probably yes. And there is a reason why teachers force their students to always use units.</p>
<p>But whatever API you look at, there is (almost) never any hints which unit one should use. Of course reading the Javadoc might give you the right hint &#8211; sometimes&#8230;<br />
And the results are well know. The most popular one is the<br />
<a href="http://en.wikipedia.org/wiki/Mars_Climate_Orbiter">Mars Climate Orbiter</a>.</p>
<h2>Solutions so far</h2>
<p>There have been several approaches so far. For example <a href="http://www.jcp.org/en/jsr/detail?id=108">JSR 108</a> with some very interesting ideas.</p>
<p>All those approaches wrap the value and the unit into a container object. This obviously has several disadvantages.<br />
The API will become cluttered. And therefore all those approaches have been dismissed sooner or later.</p>
<p>But not having any information about the unit is a bad idea either&#8230; So what to do?</p>
<h2>Why not using annotations?</h2>
<p>Annotations are (one more time) the answer to the question. Look at that sample code:</p>
<pre class="brush:java">@mm
public double pixelsToMm( @px int pixels, @dpi double resolution ) {
  return pixels / resolution * 25.4;
}</pre>
<p>Readable and comprehensible instantly. No magic. No problems with backwards compatibility. No additional objects, wrapping or other stuff. No loss of precision or performance penalty&#8230;</p>
<h2>Small library</h2>
<p>I have created a small library containing several predefined annotations. But of course it is just a matter of seconds to create your own.</p>
<p>Download manually from<br />
<a href="http://repo2.maven.org/maven2/com/cedarsoft/unit/1.0-beta1/">http://repo2.maven.org/maven2/com/cedarsoft/unit/1.0-beta1/</a></p>
<p>For Maven users:</p>
<pre class="brush:xml">&lt;dependency&gt;
  &lt;groupId&gt;com.cedarsoft&lt;/groupId&gt;
  &lt;artifactId&gt;unit&lt;/artifactId&gt;
  &lt;version&gt;1.0-beta1-SNAPSHOT&lt;/version&gt;
&lt;/dependency&gt;</pre>
<p>More informations can be found at <a href="http://cedarsoft.org/unit/">http://cedarsoft.org/unit/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cedarsoft.com/2010/11/java-units-done-right/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Setting &quot;java.library.path&quot; programmatically</title>
		<link>http://blog.cedarsoft.com/2010/11/setting-java-library-path-programmatically/</link>
		<comments>http://blog.cedarsoft.com/2010/11/setting-java-library-path-programmatically/#comments</comments>
		<pubDate>Tue, 02 Nov 2010 19:27:59 +0000</pubDate>
		<dc:creator>Johannes Schneider</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[classloader]]></category>
		<category><![CDATA[hack]]></category>
		<category><![CDATA[java.library.path]]></category>

		<guid isPermaLink="false">http://blog.cedarsoft.com/?p=454</guid>
		<description><![CDATA[When messing around with JNI, one have to set the &#8220;java.library.path&#8221; accordingly. Unfortunately the only way is to add a system property *before* the application is started:
java -Djava.library.path=/path/to/libs
Changing the system property later doesn&#8217;t have any effect, since the property is evaluated very early and cached.
But the guys over at jdic discovered a way how to [...]]]></description>
			<content:encoded><![CDATA[<p>When messing around with JNI, one have to set the &#8220;java.library.path&#8221; accordingly. Unfortunately the only way is to add a system property *before* the application is started:</p>
<p>java -Djava.library.path=/path/to/libs</p>
<p>Changing the system property later doesn&#8217;t have any effect, since the property is evaluated very early and cached.<br />
But the guys over at <a href="https://jdic.dev.java.net/">jdic</a> discovered a way how to work around it. It is a little bit dirty &#8211; but hey, those hacks are the reason we all love Java&#8230;</p>
<pre class="brush:java">System.setProperty( "java.library.path", "/path/to/libs" );

Field fieldSysPath = ClassLoader.class.getDeclaredField( "sys_paths" );
fieldSysPath.setAccessible( true );
fieldSysPath.set( null, null );</pre>
<h3>Explanation</h3>
<p>At first the system property is updated with the new value. This might be a relative path &#8211; or maybe you want to create that path dynamically.</p>
<p>The Classloader has a static field (sys_paths) that contains the paths. If that field is set to null, it is initialized automatically. Therefore forcing that field to null will result into the reevaluation of the library path as soon as loadLibrary() is called&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cedarsoft.com/2010/11/setting-java-library-path-programmatically/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>Hierarchical structures with Java Enums</title>
		<link>http://blog.cedarsoft.com/2010/10/hierarchical-structures-with-java-enums/</link>
		<comments>http://blog.cedarsoft.com/2010/10/hierarchical-structures-with-java-enums/#comments</comments>
		<pubDate>Sat, 09 Oct 2010 15:46:38 +0000</pubDate>
		<dc:creator>Johannes Schneider</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[enum]]></category>
		<category><![CDATA[hierarchy]]></category>

		<guid isPermaLink="false">http://blog.cedarsoft.com/?p=451</guid>
		<description><![CDATA[I love Enums. There are a lot of use cases, where they become really handy. Especially since I have learned that you can override methods in enums&#8230;
Some days ago Alexander Radzin came up with another nice idea: He created a hierarchical structure using enums. The idea is very simple: Just add a reference to the [...]]]></description>
			<content:encoded><![CDATA[<p>I love Enums. There are a lot of use cases, where they become really handy. Especially since I have learned that you can override methods in enums&#8230;</p>
<p>Some days ago Alexander Radzin came up with <a href="http://alexradzin.blogspot.com/2010/10/hierarchical-structures-with-java-enums_05.html">another nice idea</a>: He created a hierarchical structure using enums. The idea is very simple: Just add a reference to the parent to your enum.</p>
<p>While the idea is really nice, the implementation seems to be a little bit too complicated. I think using reflection is not a very nice thing at all. Therefore I have modified his implementation.</p>
<p>And this is the idea. That idea has a lot of potential &#8211; I am sure I will find a lot of nice use cases&#8230;</p>
<pre class="brush:java">public enum OsType {
OS(null),
Windows(OS),
WindowsNT(Windows),
WindowsNTWorkstation(WindowsNT),
WindowsNTServer(WindowsNT),
Windows2000(Windows),
Windows2000Server(Windows2000),
Windows2000Workstation(Windows2000),
WindowsXp(Windows),
WindowsVista(Windows),
Windows7(Windows),
Windows95(Windows),
Windows98(Windows),
Unix(OS) {
@Override
public boolean supportsXWindowSystem() {
return true;
}
},
Linux(Unix),
AIX(Unix),
HpUx(Unix),
SunOs(Unix),
;

private final OsType parent;
private final List children = new ArrayList();
private final List allChildren = new ArrayList();

OsType( OsType parent ) {
this.parent = parent;
if ( parent != null ) {
parent.addChild( this );
}
}

public OsType parent() {
return parent;
}

public boolean is( OsType other ) {
if ( other == null ) {
return false;
}

for ( OsType osType = this; osType != null; osType = osType.parent() ) {
if ( other == osType ) {
return true;
}
}
return false;
}

public List children() {
return Collections.unmodifiableList( children );
}

public List allChildren() {
return Collections.unmodifiableList( allChildren );
}

private void addChild( OsType child ) {
this.children.add( child );

List greatChildren = new ArrayList();
greatChildren.add( child );
greatChildren.addAll( child.allChildren() );

OsType currentAncestor = this;
while ( currentAncestor != null ) {
currentAncestor.allChildren.addAll( greatChildren );
currentAncestor = currentAncestor.parent;
}
}

public boolean supportsXWindowSystem() {
if ( parent == null ) {
return false;
}

return parent.supportsXWindowSystem();
}
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.cedarsoft.com/2010/10/hierarchical-structures-with-java-enums/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Code Generation done right&#8230;</title>
		<link>http://blog.cedarsoft.com/2010/08/code-generation-done-right/</link>
		<comments>http://blog.cedarsoft.com/2010/08/code-generation-done-right/#comments</comments>
		<pubDate>Fri, 06 Aug 2010 11:34:33 +0000</pubDate>
		<dc:creator>Johannes Schneider</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[codemodel]]></category>
		<category><![CDATA[generation]]></category>
		<category><![CDATA[mda]]></category>

		<guid isPermaLink="false">http://blog.cedarsoft.com/?p=381</guid>
		<description><![CDATA[Code Generation solves a lot of problems. And everybody uses it all the day: Ever generated Getters/Setters using your IDE? Or method stubs? Or constructors?
And sometimes complete classes are generated. One famous example is Hibernate that is able to generate Java classes from a database schema.
Most of the projects I have seen so far use [...]]]></description>
			<content:encoded><![CDATA[<p>Code Generation solves a lot of problems. And everybody uses it all the day: Ever generated Getters/Setters using your IDE? Or method stubs? Or constructors?</p>
<p>And sometimes complete classes are generated. One famous example is Hibernate that is able to generate Java classes from a database schema.</p>
<p>Most of the projects I have seen so far use a templating engine (<a href="http://freemarker.sourceforge.net/">FreeMarker</a> or <a href="http://velocity.apache.org/">Velocity</a>) to create the source files. Hibernate switched from Velocity to FreeMarker some years ago&#8230;</p>
<p>This approach is quite good for simple cases. Those can be solved quite fast using that approach.</p>
<h3>Complexity</h3>
<p>But things get worse, if you have to generate more sophisticated code. Of course FreeMarker supports conditions and you can do quite amazing things using complex model classes. On the other hand those templates start to get really complicated and hard to debug over time.<br />
And of course you always have two sources: The template file and your data model.</p>
<h3>Imports</h3>
<p>One thing special to Java source files are the imports. When you conditionally use a class somewhere, you also have to add the import statement conditionally&#8230; Nothing that can be solved easily using FreeMarker.</p>
<p>So sometimes one might wish to have a nice API that does all the dirty work for you&#8230;</p>
<h1>The alternative: Codemodel</h1>
<p>I have looked around to find such an API. And it took me quite a long time to find one.<br />
And that API is quite near beside you. Just a little bit hidden.</p>
<p>JAXB has a sub project called <a href="https://codemodel.dev.java.net/">codemodel</a>. This is an API that allows you to create Java classes by just using an API&#8230;</p>
<h2>How to use Codemodel</h2>
<p>There is no separate jar for codemodel. But the classes are shipped with every JAXB installation. So since JDK 1.6 the classes are just here and waiting to be used. But since they have renamed the package as &#8220;internal&#8221; I suggest to import the JAXB jar manually:</p>
<p>For Maven users this should be enough:</p>
<pre class="brush:xml">&lt;dependency&gt;
  &lt;groupId&gt;com.sun.xml.bind&lt;/groupId&gt;
  &lt;artifactId&gt;jaxb-xjc&lt;/artifactId&gt;
  &lt;version&gt;2.2.1&lt;/version&gt;
&lt;/dependency&gt;</pre>
<h3>A quick introduction</h3>
<p>The API is not perfect yet. And it is not documented very well. But it is nearly complete and I didn&#8217;t miss much.<br />
Here is a short example that should give you a fast start:</p>
<pre class="brush:java">JCodeModel codeModel = new JCodeModel();
JDefinedClass foo = codeModel._class( "a.b.c.Foo" ); //Creates a new class

JMethod method = foo.method( JMod.PUBLIC, Void.TYPE, "doFoo" ); //Adds a method to the class
method.body()._return( JExpr.lit( 42 ) ); //the return statement</pre>
<p>The code can be written to the file system. But it can also be written to a single output stream. This is great for testing:</p>
<pre class="brush:java">ByteArrayOutputStream out = new ByteArrayOutputStream();
codeModel.build( new SingleStreamCodeWriter( out ) );</pre>
<p>This code outputs that code:</p>
<pre class="brush:java">-----------------------------------a.b.c.Foo.java-----------------------------------

package a.b.c;

public class Foo {

public void doFoo() {
return 42;
}

}</pre>
<p>Great, isn&#8217;t it?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cedarsoft.com/2010/08/code-generation-done-right/feed/</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Java Surprise: Setters/Getters and Collections</title>
		<link>http://blog.cedarsoft.com/2010/08/java-surprise-settersgetters-and-collections/</link>
		<comments>http://blog.cedarsoft.com/2010/08/java-surprise-settersgetters-and-collections/#comments</comments>
		<pubDate>Thu, 05 Aug 2010 09:27:08 +0000</pubDate>
		<dc:creator>Johannes Schneider</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Collections]]></category>
		<category><![CDATA[puzzle]]></category>
		<category><![CDATA[surprise]]></category>

		<guid isPermaLink="false">http://blog.cedarsoft.com/?p=385</guid>
		<description><![CDATA[Inspired by the Java Killers series, I wanted to post a problem I stumbled across some years ago:
Imagine a bean containing a field.
class Car {
private final List tires = new ArrayList();

public void setTires( List tires ) {
this.tires.clear();
this.tires.addAll( tires );
}

public void addTire( Tire tires ) {
this.tires.add( tires );
}

public List getTires() {
return Collections.unmodifiableList( tires );
}
}
What is the [...]]]></description>
			<content:encoded><![CDATA[<p>Inspired by the Java Killers series, I wanted to post a problem I stumbled across some years ago:</p>
<p>Imagine a bean containing a field.</p>
<pre class="brush:java">class Car {
private final List tires = new ArrayList();

public void setTires( List tires ) {
this.tires.clear();
this.tires.addAll( tires );
}

public void addTire( Tire tires ) {
this.tires.add( tires );
}

public List getTires() {
return Collections.unmodifiableList( tires );
}
}</pre>
<p>What is the output of that code?</p>
<pre class="brush:java">Car car = new Car();
car.addTire( new Tire() );
car.addTire( new Tire() );

List carTires = car.getTires();
System.out.println( "before: " + carTires.size() );
car.setTires( carTires );
System.out.println( "after1: " + car.getTires().size() );
System.out.println( "after2: " + carTires.size() );</pre>
<p>The first part is easy:</p>
<pre>before: 2</pre>
<p>But the rest?</p>
<p><span id="more-386"></span></p>
<pre>before: 2
after1: 0
after2: 0</pre>
<p>We have managed to empty the collection accidentally &#8211; even if it is unmodifiable.<br />
The problem lies in the setter and how <em>Collections.unmodifiableList()</em> is implemented:</p>
<p>Collections.unmodifiableList returns a list that is backed by the original list. Every change to the original collections is reflected.<br />
Therefore the &#8220;clear&#8221; call empties also the unmodifiable list.</p>
<pre class="brush:java">public void setTires( List tires ) {
this.tires.clear(); //the list is cleared! But since the method parameter is a view of this.tires, it is emptied, too.
this.tires.addAll( tires ); //since tires is empty now, addAll doesn't do anything...
}</pre>
<p>So be careful with collections. They might change a really surprising moments&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cedarsoft.com/2010/08/java-surprise-settersgetters-and-collections/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>cedarsoft Serialization 1.0.0 released</title>
		<link>http://blog.cedarsoft.com/2010/01/cedarsoft-serialization-1-0-0-released/</link>
		<comments>http://blog.cedarsoft.com/2010/01/cedarsoft-serialization-1-0-0-released/#comments</comments>
		<pubDate>Mon, 25 Jan 2010 18:04:36 +0000</pubDate>
		<dc:creator>Johannes Schneider</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[serialization]]></category>

		<guid isPermaLink="false">http://blog.cedarsoft.com/?p=142</guid>
		<description><![CDATA[cedarsoft Serialization (GPL with Classpath Exception) offers version aware serialization of java object trees with maximum control. Its goal is to provide some simple classes (very small framework) that enables rapid development of versioned serialization.
Serialized XML contains version informations and might look like that:
&#60;?xml version="1.0" encoding="UTF-8"?&#62;
&#60;businessObject xmlns="http://yourcompany.com/path/2.0.1"&#62;
  &#60;name&#62;theName&#60;/name&#62;
  ...
&#60;/businessObject&#62;
It does not contain any [...]]]></description>
			<content:encoded><![CDATA[<p><a title="cedarsoft Serialization" href="http://serialization.cedarsoft.org/">cedarsoft Serialization</a> (GPL with Classpath Exception) offers version aware serialization of java object trees with maximum control. Its goal is to provide some simple classes (very small framework) that enables rapid development of versioned serialization.</p>
<p>Serialized XML contains version informations and might look like that:</p>
<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;businessObject xmlns="http://yourcompany.com/path/2.0.1"&gt;
  &lt;name&gt;theName&lt;/name&gt;
  ...
&lt;/businessObject&gt;</pre>
<p>It does not contain any &#8220;magic&#8221; code. It just offers plain and very fast serialization.</p>
<p>It follows those main ideas:</p>
<ul>
<li>Version support as first class citizen (Every serialized object gets its version information attached &#8211;&gt;necessary for stability)</li>
<li>Minimized boiler plate code (&#8211;&gt; fast results), but:</li>
<li>No magic (no bad surprises)</li>
<li>KISS</li>
<li>Performance, performance!</li>
<li>Flexibility and therefore stability: Serialized objects can be read with all future versions.</li>
</ul>
<p>Do not believe the wrong &#8220;everything can be done automatically&#8221; promise. Write that code that matters. And nothing more.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cedarsoft.com/2010/01/cedarsoft-serialization-1-0-0-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Splitting up your pom.xml into multiple files</title>
		<link>http://blog.cedarsoft.com/2007/09/splitting-up-your-pom-xml-into-multiple-files/</link>
		<comments>http://blog.cedarsoft.com/2007/09/splitting-up-your-pom-xml-into-multiple-files/#comments</comments>
		<pubDate>Mon, 10 Sep 2007 22:35:00 +0000</pubDate>
		<dc:creator>Johannes Schneider</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Maven]]></category>

		<guid isPermaLink="false">http://blog.cedarsoft.com/?p=3</guid>
		<description><![CDATA[Ever had to deal with a really, really huge pom.xml? As soon as you start not only to declare the dependencies but also to add informations about the distribution (repositories, site), mailinglists or developers, the pom.xml starts to become really huge.
It is hard to find the informations you search. And it is much harder to [...]]]></description>
			<content:encoded><![CDATA[<p>Ever had to deal with a really, really huge pom.xml? As soon as you start not only to declare the dependencies but also to add informations about the distribution (repositories, site), mailinglists or developers, the pom.xml starts to become really huge.</p>
<p>It is hard to find the informations you search. And it is much harder to find that revision a dependecy has changed if there is so much noise due to changes in other sections.<br />
Many applications with huge configuration files started to convert their files into directories over the last years. Apache now has its &#8220;conf.d&#8221; directory, crontab uses &#8220;cron.d&#8221; and so on.</p>
<p>Why not take the same step, too? Why not split up the pom.xml into several files that are placed within a directory called &#8220;pom.d&#8221;?<br />
So I have created a <a title=" Optional support for splitting up pom.xml in multiple files" href="http://docs.codehaus.org/display/MAVENUSER/Optional+support+for+splitting+up+pom.xml+in+multiple+files" target="_blank">proposal for Maven 2.1</a>.</p>
<p>What do you think?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.cedarsoft.com/2007/09/splitting-up-your-pom-xml-into-multiple-files/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

