<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" version="2.0">
  <channel>
    <title>ntldr - Java</title>
    <link>http://www.ntldr.com/</link>
    <description>Random thoughts from Jeffrey</description>
    <language>en-us</language>
    <copyright>Jeffrey Stults, Jr.</copyright>
    <lastBuildDate>Sat, 20 Mar 2010 22:48:42 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>stultsj@ntldr.net</managingEditor>
    <webMaster>stultsj@ntldr.net</webMaster>
    <item>
      <trackback:ping>http://www.ntldr.com/Trackback.aspx?guid=2d7091d5-264e-469e-bbe0-9035c3733d57</trackback:ping>
      <pingback:server>http://www.ntldr.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.ntldr.com/PermaLink,guid,2d7091d5-264e-469e-bbe0-9035c3733d57.aspx</pingback:target>
      <dc:creator>Jeffrey Stults, Jr.</dc:creator>
      <wfw:comment>http://www.ntldr.com/CommentView,guid,2d7091d5-264e-469e-bbe0-9035c3733d57.aspx</wfw:comment>
      <wfw:commentRss>http://www.ntldr.com/SyndicationService.asmx/GetEntryCommentsRss?guid=2d7091d5-264e-469e-bbe0-9035c3733d57</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Java EE lesson from this week:
</p>
        <p>
At least on WebSphere Application Server v6.1, ordering of elements matters in a .war
file's web.xml definition file.
</p>
        <p>
&lt;servlet-mapping&gt; definitions <em><strong>must</strong></em> occur after the
servlet being mapped has been defined. So this works:
</p>
        <pre class="csharpcode">
          <span class="kwrd">&lt;</span>
          <span class="html">servlet</span>
          <span class="attr">id</span>
          <span class="kwrd">="JAXWS_MyFirstService"</span>
          <span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;</span>
          <span class="html">description</span>
          <span class="kwrd">&gt;</span>My
first JAX-WS demo service<span class="kwrd">&lt;/</span><span class="html">description</span><span class="kwrd">&gt;</span><span class="kwrd">&lt;</span><span class="html">display-name</span><span class="kwrd">&gt;</span>JAX-WS:
My First Service<span class="kwrd">&lt;/</span><span class="html">display-name</span><span class="kwrd">&gt;</span><span class="kwrd">&lt;</span><span class="html">servlet-name</span><span class="kwrd">&gt;</span>com.ntldr.example.jaxws.MyFirstServiceSoap12PortImpl<span class="kwrd">&lt;/</span><span class="html">servlet-name</span><span class="kwrd">&gt;</span><span class="kwrd">&lt;</span><span class="html">servlet-class</span><span class="kwrd">&gt;</span>com.ntldr.example.jaxws.MyFirstServiceSoap12PortImpl<span class="kwrd">&lt;/</span><span class="html">servlet-class</span><span class="kwrd">&gt;</span><span class="kwrd">&lt;</span><span class="html">load-on-startup</span><span class="kwrd">&gt;</span>1<span class="kwrd">&lt;/</span><span class="html">load-on-startup</span><span class="kwrd">&gt;</span><span class="kwrd">&lt;/</span><span class="html">servlet</span><span class="kwrd">&gt;</span><span class="kwrd">&lt;</span><span class="html">servlate-mapping</span><span class="kwrd">&gt;</span><span class="kwrd">&lt;</span><span class="html">servlet-name</span><span class="kwrd">&gt;</span>com.ntldr.example.jaxws.MyFirstServiceSoap12PortImpl<span class="kwrd">&lt;/</span><span class="html">servlet-name</span><span class="kwrd">&gt;</span><span class="kwrd">&lt;</span><span class="html">url-pattern</span><span class="kwrd">&gt;</span>/MyFirstService/Soap12<span class="kwrd">&lt;/</span><span class="html">url-pattern</span><span class="kwrd">&gt;</span><span class="kwrd">&lt;/</span><span class="html">servlate-mapping</span><span class="kwrd">&gt;</span></pre>
        <style type="text/css">

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
        <p>
          <strong>(good!)</strong>
        </p>
        <p>
But this generates bizarre NullPointerException's during attempts to load the .ear
file:
</p>
        <pre class="csharpcode">
          <span class="kwrd">&lt;</span>
          <span class="html">servlate-mapping</span>
          <span class="kwrd">&gt;</span>
          <span class="kwrd">&lt;</span>
          <span class="html">servlet-name</span>
          <span class="kwrd">&gt;</span>com.ntldr.example.jaxws.MyFirstServiceSoap12PortImpl<span class="kwrd">&lt;/</span><span class="html">servlet-name</span><span class="kwrd">&gt;</span><span class="kwrd">&lt;</span><span class="html">url-pattern</span><span class="kwrd">&gt;</span>/MyFirstService/Soap12<span class="kwrd">&lt;/</span><span class="html">url-pattern</span><span class="kwrd">&gt;</span><span class="kwrd">&lt;/</span><span class="html">servlate-mapping</span><span class="kwrd">&gt;</span> ... <span class="kwrd">&lt;</span><span class="html">servlet</span><span class="attr">id</span><span class="kwrd">="JAXWS_MyFirstService"</span><span class="kwrd">&gt;</span><span class="kwrd">&lt;</span><span class="html">description</span><span class="kwrd">&gt;</span>My
first JAX-WS demo service<span class="kwrd">&lt;/</span><span class="html">description</span><span class="kwrd">&gt;</span><span class="kwrd">&lt;</span><span class="html">display-name</span><span class="kwrd">&gt;</span>JAX-WS:
My First Service<span class="kwrd">&lt;/</span><span class="html">display-name</span><span class="kwrd">&gt;</span><span class="kwrd">&lt;</span><span class="html">servlet-name</span><span class="kwrd">&gt;</span>com.ntldr.example.jaxws.MyFirstServiceSoap12PortImpl<span class="kwrd">&lt;/</span><span class="html">servlet-name</span><span class="kwrd">&gt;</span><span class="kwrd">&lt;</span><span class="html">servlet-class</span><span class="kwrd">&gt;</span>com.ntldr.example.jaxws.MyFirstServiceSoap12PortImpl<span class="kwrd">&lt;/</span><span class="html">servlet-class</span><span class="kwrd">&gt;</span><span class="kwrd">&lt;</span><span class="html">load-on-startup</span><span class="kwrd">&gt;</span>1<span class="kwrd">&lt;/</span><span class="html">load-on-startup</span><span class="kwrd">&gt;</span><span class="kwrd">&lt;/</span><span class="html">servlet</span><span class="kwrd">&gt;</span></pre>
        <p>
          <style type="text/css">

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
        </p>
        <p>
          <strong>(bad!)</strong>
        </p>
        <p>
Yes, I ran into this problem this week at work. And it took me forever to realize
that I'd made such a stupid mistake. So, keep in mind: servlet-mapping comes after
servlet!
</p>
        <p style="color: #7f7f7f; font-size: smaller">
Now playing: <a href="http://www.emmgryner.com/">Emm Gryner</a> – <a href="http://www.emmgryner.com/emmbassy/?q=node/763">Stray
Bullets</a> – 05 <em>Holiday</em></p>
        <img width="0" height="0" src="http://www.ntldr.com/aggbug.ashx?id=2d7091d5-264e-469e-bbe0-9035c3733d57" />
      </body>
      <title>web.xml Element Ordering</title>
      <guid isPermaLink="false">http://www.ntldr.com/PermaLink,guid,2d7091d5-264e-469e-bbe0-9035c3733d57.aspx</guid>
      <link>http://www.ntldr.com/2010/03/20/webxmlElementOrdering.aspx</link>
      <pubDate>Sat, 20 Mar 2010 22:48:42 GMT</pubDate>
      <description>&lt;p&gt;
Java EE lesson from this week:
&lt;/p&gt;
&lt;p&gt;
At least on WebSphere Application Server v6.1, ordering of elements matters in a .war
file's web.xml definition file.
&lt;/p&gt;
&lt;p&gt;
&amp;lt;servlet-mapping&amp;gt; definitions &lt;em&gt;&lt;strong&gt;must&lt;/strong&gt;&lt;/em&gt; occur after the
servlet being mapped has been defined. So this works:
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;servlet&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;JAXWS_MyFirstService&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;description&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;My
first JAX-WS demo service&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;description&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;display-name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;JAX-WS:
My First Service&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;display-name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;servlet-name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;com.ntldr.example.jaxws.MyFirstServiceSoap12PortImpl&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;servlet-name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;servlet-class&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;com.ntldr.example.jaxws.MyFirstServiceSoap12PortImpl&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;servlet-class&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;load-on-startup&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;load-on-startup&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;servlet&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;servlate-mapping&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;servlet-name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;com.ntldr.example.jaxws.MyFirstServiceSoap12PortImpl&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;servlet-name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;url-pattern&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;/MyFirstService/Soap12&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;url-pattern&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;servlate-mapping&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;p&gt;
&lt;strong&gt;(good!)&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
But this generates bizarre NullPointerException's during attempts to load the .ear
file:
&lt;/p&gt;
&lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;servlate-mapping&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;servlet-name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;com.ntldr.example.jaxws.MyFirstServiceSoap12PortImpl&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;servlet-name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;url-pattern&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;/MyFirstService/Soap12&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;url-pattern&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;servlate-mapping&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; ... &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;servlet&lt;/span&gt; &lt;span class="attr"&gt;id&lt;/span&gt;&lt;span class="kwrd"&gt;=&amp;quot;JAXWS_MyFirstService&amp;quot;&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;description&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;My
first JAX-WS demo service&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;description&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;display-name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;JAX-WS:
My First Service&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;display-name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;servlet-name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;com.ntldr.example.jaxws.MyFirstServiceSoap12PortImpl&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;servlet-name&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;servlet-class&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;com.ntldr.example.jaxws.MyFirstServiceSoap12PortImpl&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;servlet-class&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;&lt;/span&gt;&lt;span class="html"&gt;load-on-startup&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;1&lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;load-on-startup&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt; &lt;span class="kwrd"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="html"&gt;servlet&lt;/span&gt;&lt;span class="kwrd"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;
&lt;style type="text/css"&gt;

.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;(bad!)&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Yes, I ran into this problem this week at work. And it took me forever to realize
that I'd made such a stupid mistake. So, keep in mind: servlet-mapping comes after
servlet!
&lt;/p&gt;
&lt;p style="color: #7f7f7f; font-size: smaller"&gt;
Now playing: &lt;a href="http://www.emmgryner.com/"&gt;Emm Gryner&lt;/a&gt; – &lt;a href="http://www.emmgryner.com/emmbassy/?q=node/763"&gt;Stray
Bullets&lt;/a&gt; – 05 &lt;em&gt;Holiday&lt;/em&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ntldr.com/aggbug.ashx?id=2d7091d5-264e-469e-bbe0-9035c3733d57" /&gt;</description>
      <comments>http://www.ntldr.com/CommentView,guid,2d7091d5-264e-469e-bbe0-9035c3733d57.aspx</comments>
      <category>Java</category>
    </item>
    <item>
      <trackback:ping>http://www.ntldr.com/Trackback.aspx?guid=67173d75-36f1-42ec-99f6-e5448fbf8804</trackback:ping>
      <pingback:server>http://www.ntldr.com/pingback.aspx</pingback:server>
      <pingback:target>http://www.ntldr.com/PermaLink,guid,67173d75-36f1-42ec-99f6-e5448fbf8804.aspx</pingback:target>
      <dc:creator>Jeffrey Stults, Jr.</dc:creator>
      <wfw:comment>http://www.ntldr.com/CommentView,guid,67173d75-36f1-42ec-99f6-e5448fbf8804.aspx</wfw:comment>
      <wfw:commentRss>http://www.ntldr.com/SyndicationService.asmx/GetEntryCommentsRss?guid=67173d75-36f1-42ec-99f6-e5448fbf8804</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <div>
          <p>
At work, we use Maven to do builds for the project I work on. The Infrastructure IT
people also have helpfully configured it so that every user account has a home directory
conveniently located on a file server. Since we use Windows (Windows 2000 to be precise...),
that home directory is a UNC path of the form <a href="file://\\server\share\folder">\\server\share\folder</a>. 
</p>
          <p>
This, it turns out, is rather bad for Maven.
</p>
          <p>
See, Maven has a settings.xml file that allows you to configure it. Things like the
local repository location, proxy settings, remote repositories, etc. get configured
in that file. So it's kind of important. Maven looks for that file at &lt;home directory&gt;/.m2/settings.xml.
And there in lies the problem with having &lt;home directory&gt; be a UNC path: Maven
or Java or something just breaks, and that file isn't found/read.
</p>
          <p>
Now, apparently if you put the file in C:\server\share\folder\.m2, Maven will find
it. Sometimes. I didn't see consistent behaviour when trying that approach, and ended
up abandoning it last year. Part of the problem may have been that different Maven
things (mvn, Eclipse plugin) handled the exceptional situation differently, so builds
might work from inside Eclipse and then fail on the command line.
</p>
          <p>
So I began looking for a different approach, and took a look at the root cause of
the problem. Attempting to get the Infrastructure people to change their policies
and affect thousands of accounts as doomed to a slow failure, forcing me to try and
find a workaround that was specific to my computer.
</p>
          <p>
And at last! The grand unveiling! It's really quite simple in principle: if the home
directory path is causing a problem, lets just make Maven see a different path. Doing
so isn't quite that simple though.
</p>
          <p>
Here are the steps:
</p>
          <ol>
            <li>
First, a user specific HOME variable is created, pointing to the location the home
directory needs to be redirected to.</li>
            <li>
Then define a system wide JAVA_OPTS variable, with the value of "-Duser.home=%HOME%".
This isn't strictly necessary to get Maven itself to run, but is useful for creating
a consistent experience with Java applications and this home directory redirection
scheme.</li>
            <li>
Now, the magic Maven command-fu: create another system wide variable, MAVEN_OPTS.
Value is "-Duser.home=%HOME%". Yes, this is the same as the JAVA_OPTS value.
But mvn reads MAVEN_OPTS instead of JAVA_OPTS.</li>
            <li>
A bit of Eclipse integration: edit the eclipse.ini file and add the "-Duser.home=%HOME%"
(note that I think you have to expand the %HOME% to the actual value; I doubt Eclipse
uses Windows command prompt style variable referencing syntax) string after the -vmargs
option. Now Eclipse will use the redirected home directory during startup.</li>
            <li>
More Eclipse integration: plugin/feature support: Go to Window-&gt;Preferences-&gt;Java-&gt;Installed
JREs and edit any entries so they contain the VM argument "-Duser.home=%HOME%"
(again, have to expand that %HOME% yourself to what the value is).</li>
          </ol>
          <p>
Okay, that should be it for just Maven. In theory these steps could be applied to
other Java apps that have problems with finding settings in home directories. I've
been lucky enough not to run into any of those apps though.
</p>
          <p style="font-size:smaller;color:#7f7f7f">
Now playing: Basia Bulat – Oh, My Darling – 07 In The Night
</p>
        </div>
        <img width="0" height="0" src="http://www.ntldr.com/aggbug.ashx?id=67173d75-36f1-42ec-99f6-e5448fbf8804" />
      </body>
      <title>Maven with a UNC home directory</title>
      <guid isPermaLink="false">http://www.ntldr.com/PermaLink,guid,67173d75-36f1-42ec-99f6-e5448fbf8804.aspx</guid>
      <link>http://www.ntldr.com/2008/04/29/MavenWithAUNCHomeDirectory.aspx</link>
      <pubDate>Tue, 29 Apr 2008 04:38:38 GMT</pubDate>
      <description>
        &lt;div&gt;
&lt;p&gt;
At work, we use Maven to do builds for the project I work on. The Infrastructure IT
people also have helpfully configured it so that every user account has a home directory
conveniently located on a file server. Since we use Windows (Windows 2000 to be precise...),
that home directory is a UNC path of the form &lt;a href="file://\\server\share\folder"&gt;\\server\share\folder&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
This, it turns out, is rather bad for Maven.
&lt;/p&gt;
&lt;p&gt;
See, Maven has a settings.xml file that allows you to configure it. Things like the
local repository location, proxy settings, remote repositories, etc. get configured
in that file. So it's kind of important. Maven looks for that file at &amp;lt;home directory&amp;gt;/.m2/settings.xml.
And there in lies the problem with having &amp;lt;home directory&amp;gt; be a UNC path: Maven
or Java or something just breaks, and that file isn't found/read.
&lt;/p&gt;
&lt;p&gt;
Now, apparently if you put the file in C:\server\share\folder\.m2, Maven will find
it. Sometimes. I didn't see consistent behaviour when trying that approach, and ended
up abandoning it last year. Part of the problem may have been that different Maven
things (mvn, Eclipse plugin) handled the exceptional situation differently, so builds
might work from inside Eclipse and then fail on the command line.
&lt;/p&gt;
&lt;p&gt;
So I began looking for a different approach, and took a look at the root cause of
the problem. Attempting to get the Infrastructure people to change their policies
and affect thousands of accounts as doomed to a slow failure, forcing me to try and
find a workaround that was specific to my computer.
&lt;/p&gt;
&lt;p&gt;
And at last! The grand unveiling! It's really quite simple in principle: if the home
directory path is causing a problem, lets just make Maven see a different path. Doing
so isn't quite that simple though.
&lt;/p&gt;
&lt;p&gt;
Here are the steps:
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
First, a user specific HOME variable is created, pointing to the location the home
directory needs to be redirected to.&lt;/li&gt;
&lt;li&gt;
Then define a system wide JAVA_OPTS variable, with the value of &amp;quot;-Duser.home=%HOME%&amp;quot;.
This isn't strictly necessary to get Maven itself to run, but is useful for creating
a consistent experience with Java applications and this home directory redirection
scheme.&lt;/li&gt;
&lt;li&gt;
Now, the magic Maven command-fu: create another system wide variable, MAVEN_OPTS.
Value is &amp;quot;-Duser.home=%HOME%&amp;quot;. Yes, this is the same as the JAVA_OPTS value.
But mvn reads MAVEN_OPTS instead of JAVA_OPTS.&lt;/li&gt;
&lt;li&gt;
A bit of Eclipse integration: edit the eclipse.ini file and add the &amp;quot;-Duser.home=%HOME%&amp;quot;
(note that I think you have to expand the %HOME% to the actual value; I doubt Eclipse
uses Windows command prompt style variable referencing syntax) string after the -vmargs
option. Now Eclipse will use the redirected home directory during startup.&lt;/li&gt;
&lt;li&gt;
More Eclipse integration: plugin/feature support: Go to Window-&amp;gt;Preferences-&amp;gt;Java-&amp;gt;Installed
JREs and edit any entries so they contain the VM argument &amp;quot;-Duser.home=%HOME%&amp;quot;
(again, have to expand that %HOME% yourself to what the value is).&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Okay, that should be it for just Maven. In theory these steps could be applied to
other Java apps that have problems with finding settings in home directories. I've
been lucky enough not to run into any of those apps though.
&lt;/p&gt;
&lt;p style="font-size:smaller;color:#7f7f7f"&gt;
Now playing: Basia Bulat – Oh, My Darling – 07 In The Night
&lt;/p&gt;
&lt;/div&gt;
&lt;img width="0" height="0" src="http://www.ntldr.com/aggbug.ashx?id=67173d75-36f1-42ec-99f6-e5448fbf8804" /&gt;</description>
      <comments>http://www.ntldr.com/CommentView,guid,67173d75-36f1-42ec-99f6-e5448fbf8804.aspx</comments>
      <category>Java</category>
    </item>
  </channel>
</rss>