dev@glassfish.java.net

Re: maven2 directory layout questions

From: Bill Shannon <bill.shannon_at_sun.com>
Date: Mon, 28 Jan 2008 13:19:47 -0800

Following up on this discussion we started last November...

With a lot of help from Jerome, I was able to rearrange the JavaMail
workspace and get it to build using maven. Here's what I ended up
with. If anyone has any comments or further advice about the
structure of the workspace, I'd appreciate it.

Note that the overview.html files are still in the java directory,
not the resources directory, and that seems to be working fine.

If anyone would like to review the pom.xml files for me (Jerome has
already looked them over), let me know and I'll send them to you.
The pom.xml files are still bigger than the ant build.xml file. :-(
The whole repository will be published as soon as we have an external
mercurial hosting site available.

Thanks much!

-----

First, the main maven module, including the assembly descriptor used
to build the distribution zip file.

        assembly.xml
        pom.xml

Then, some files left over from the ant build.

        ant-common.xml
        build.properties
        build.xml
        mbox.xml
        project.properties
        project.xml

Finally, some files for checking that the API signatures match the
spec (not yet integrated into the build).

        mail.sig
        siggen
        sigtest

The main JavaMail source code module, containing all the code that
goes into mail.jar.

        mail/pom.xml
        mail/src/main/java/com/sun/mail/handlers/image_gif.java
        ...
        mail/src/main/java/com/sun/mail/util/UUEncoderStream.java
        mail/src/main/java/javax/mail/Address.java
        ...
        mail/src/main/java/javax/mail/util/package.html
        mail/src/main/java/overview.html
        mail/src/main/resources/META-INF/MANIFEST.MF
        mail/src/main/resources/META-INF/javamail.charset.map
        mail/src/main/resources/META-INF/javamail.default.address.map
        mail/src/main/resources/META-INF/javamail.default.providers
        mail/src/main/resources/META-INF/mailcap
        mail/src/oldtest/java/javax/mail/internet/addrlist
        ...
        mail/src/oldtest/java/javax/mail/internet/tokenlist

Several modules containing demo source code. They're buildable to make
sure they do build before shipping them, but they're shipped only as
source code. Note the embedded README.txt files. Where should they
really come from? I can put them in another location, but that would
just complicate the assembly descriptor.

        demo/pom.xml
        demo/src/main/java/CRLFOutputStream.java
        demo/src/main/java/NewlineOutputStream.java
        demo/src/main/java/README.txt
        demo/src/main/java/copier.java
        demo/src/main/java/folderlist.java
        demo/src/main/java/internal/...
        demo/src/main/java/monitor.java
        demo/src/main/java/mover.java
        demo/src/main/java/msgmultisendsample.java
        demo/src/main/java/msgsend.java
        demo/src/main/java/msgsendsample.java
        demo/src/main/java/msgshow.java
        demo/src/main/java/namespace.java
        demo/src/main/java/populate.java
        demo/src/main/java/registry.java
        demo/src/main/java/search.java
        demo/src/main/java/sendfile.java
        demo/src/main/java/sendhtml.java
        demo/src/main/java/smtpsend.java
        demo/src/main/java/transport.java
        demo/src/main/java/uidmsgshow.java
        client/pom.xml
        client/src/main/java/ComponentFrame.java
        client/src/main/java/FolderModel.java
        client/src/main/java/FolderTreeNode.java
        client/src/main/java/FolderViewer.java
        client/src/main/java/MessageViewer.java
        client/src/main/java/MultipartViewer.java
        client/src/main/java/README.txt
        client/src/main/java/SimpleAuthenticator.java
        client/src/main/java/SimpleClient.java
        client/src/main/java/StoreTreeNode.java
        client/src/main/java/TextViewer.java
        client/src/main/java/simple.mailcap
        servlet/pom.xml
        servlet/src/main/java/JavaMail.html
        servlet/src/main/java/JavaMailServlet.java
        servlet/src/main/java/README.txt
        webapp/build.bat
        webapp/build.sh
        webapp/pom.xml
        webapp/src/main/java/demo/AttachmentServlet.java
        webapp/src/main/java/demo/FilterServlet.java
        webapp/src/main/java/demo/MailUserBean.java
        webapp/src/main/webapp/WEB-INF/web.xml
        webapp/src/main/webapp/compose.jsp
        webapp/src/main/webapp/errordetails.jsp
        webapp/src/main/webapp/errorpage.jsp
        webapp/src/main/webapp/folders.jsp
        webapp/src/main/webapp/index.html
        webapp/src/main/webapp/login.jsp
        webapp/src/main/webapp/logout.jsp
        webapp/src/main/webapp/messagecontent.jsp
        webapp/src/main/webapp/messageheaders.jsp
        webapp/src/main/webapp/send.jsp
        webapp/webapp.README.txt
        taglib/pom.xml
        taglib/src/main/java/demo/AttachmentInfo.java
        taglib/src/main/java/demo/ListAttachmentsTEI.java
        taglib/src/main/java/demo/ListAttachmentsTag.java
        taglib/src/main/java/demo/ListMessagesTEI.java
        taglib/src/main/java/demo/ListMessagesTag.java
        taglib/src/main/java/demo/MessageInfo.java
        taglib/src/main/java/demo/MessageTEI.java
        taglib/src/main/java/demo/MessageTag.java
        taglib/src/main/java/demo/SendTag.java
        taglib/src/main/resources/META-INF/taglib.tld

Several modules that extract subsets of the mail.jar file to build
other jar files. The source code for each of these jar files could
be moved into these modules, and then mail.jar could be constructed
by combining all these jar files. I did it this way because I like
having all the source code in one place, but it's probably less
maven-like.

        mailapi/pom.xml
        imap/pom.xml
        imap/src/main/resources/META-INF/MANIFEST.MF
        imap/src/main/resources/META-INF/javamail.providers
        pop3/pom.xml
        pop3/src/main/resources/META-INF/MANIFEST.MF
        pop3/src/main/resources/META-INF/javamail.providers
        smtp/pom.xml
        smtp/src/main/resources/META-INF/MANIFEST.MF
        smtp/src/main/resources/META-INF/javamail.address.map
        smtp/src/main/resources/META-INF/javamail.providers

A module to act as parent of the imap, pop3, and smtp modules to allow
sharing of some common rules.

        parent-distrib/pom.xml

A module that contains only the Delivery Status Notification support.
I moved all the source code here because none of this appears in mail.jar.

        dsn/pom.xml
        dsn/src/main/java/com/sun/mail/dsn/DeliveryStatus.java
        dsn/src/main/java/com/sun/mail/dsn/MessageHeaders.java
        dsn/src/main/java/com/sun/mail/dsn/MultipartReport.java
        dsn/src/main/java/com/sun/mail/dsn/message_deliverystatus.java
        dsn/src/main/java/com/sun/mail/dsn/multipart_report.java
        dsn/src/main/java/com/sun/mail/dsn/package.html
        dsn/src/main/java/com/sun/mail/dsn/text_rfc822headers.java
        dsn/src/main/resources/META-INF/MANIFEST.MF
        dsn/src/main/resources/META-INF/mailcap

The mbox protocol provider module. Again, source code moved here because
none of this appears in mail.jar. Also includes a submodule to build the
native code (even though the native source code is in the upper module;
is that too weird?), and a submodule to build a distribution zip file
containing all of the mbox provider. Possibly this should be inverted so
that the distribution module is the top level module and the java and
native modules are submodules.

        mbox/pom.xml
        mbox/src/main/cpp/com/sun/mail/mbox/UNIXFile.c
        mbox/src/main/cpp/com/sun/mail/mbox/UNIXInbox.c
        mbox/src/main/java/com/sun/mail/mbox/ContentLengthCounter.java
        ...
        mbox/src/main/java/com/sun/mail/mbox/UNIXInbox.java
        mbox/src/main/java/com/sun/mail/remote/POP3RemoteStore.java
        mbox/src/main/java/com/sun/mail/remote/RemoteDefaultFolder.java
        mbox/src/main/java/com/sun/mail/remote/RemoteInbox.java
        mbox/src/main/java/com/sun/mail/remote/RemoteStore.java
        mbox/src/main/resources/META-INF/MANIFEST.MF
        mbox/src/main/resources/META-INF/javamail.providers
        mbox/native/pom.xml
        mbox/dist/assembly.xml
        mbox/dist/pom.xml

A module just for building the javadocs. Putting these rules in the parent
pom.xml just didn't work so I moved them here.

        javadoc/pom.xml

Finally, the documentation. Not a module, but most of it is included
in the distribution zip file.

        doc/release/ApacheJServ.html
        doc/release/BLURB
        doc/release/CHANGES.txt
        doc/release/COMPAT.txt
        doc/release/JavaWebServer.html
        doc/release/LICENSE.txt
        doc/release/NOTES.txt
        doc/release/README.txt
        doc/release/SSLNOTES.txt
        doc/release/Tomcat.html
        doc/release/classpath-NT.html
        doc/release/distributionREADME.txt
        doc/release/iPlanet.html
        doc/release/images/direct-classpath.jpg
        doc/release/images/indirect-classpath.jpg
        doc/spec/JavaMail-1.1-changes.txt
        doc/spec/JavaMail-1.2-changes.txt
        doc/spec/JavaMail-1.3-changes.txt
        doc/spec/JavaMail-1.4-changes.txt