You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@maven.apache.org by Ashley Williams <ag...@mac.com> on 2005/09/21 18:51:58 UTC
[m2] first attempt at maven with single-source
I believe with just a few pom.xml tweaks I've managed to get
something of a single source project to work with maven. It could be
that a few bug fixes since Maven alpha have helped since the last
time I tried but here's what I did.
1. Designed a bogus project consisting of a gui artifact that depends
on a util artifact each with a single class: Main.java and Util.java
respectively. Additionally the gui component uses a resource file
called gui.properties. I then arranged this project into the
following directory structure:
com
--------acme [pom.xml]
----------------util [Util.java, pom.xml]
----------------gui [Main.java, pom.xml]
------------------------resources [gui.properties]
2. The gui and util poms only declare the acme/pom as a parent and
don't even have their own build section. The acme/pom.xml parent
contains the necessary tweaks that the child poms inherit, namely
inside the build section:
acme/pom.xml:
<project>
<modelVersion>4.0.0</modelVersion>
<groupId>com.acme</groupId>
<artifactId>app</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<name>Acme Application</name>
<modules>
<module>util</module>
<module>gui</module>
</modules>
<build>
<sourceDirectory>.</sourceDirectory>
<resources>
<resource>
<directory>resources</directory>
</resource>
</resources>
</build>
</project>
~
In other words the java files and resources/ directory are to be
found in the same directory as the pom.xml file for any given
artifact project.
3. I ran the install phase as follows:
> cd com/acme
> m2 install
which caused the target directories to be generated also at the same
level as each pom - for example com/acme/util/target and com/acme/gui/
target.
4. I examined the jar files in each target directory for example "jar
tvf com/acme/gui/target/gui-1.0-SNAPSHOT.jar" resulted in:
META-INF/
META-INF/MANIFEST.MF
META-INF/maven/
META-INF/maven/com.acme/
META-INF/maven/com.acme/gui/
META-INF/maven/com.acme/gui/pom.xml
com/
com/acme/
com/acme/gui/
com/acme/gui/Main.class
gui.properties
META-INF/maven/com.acme/gui/pom.properties
which looks fine. I also ran "m2 site:site" as a random goal and that
seemed to work too, ie a target/site directory was created with all
the files correctly generated underneath.
***************************
My conclusions are that it seems too easy so far and that I've missed
a howler - if somebody could point it out?? Also in the acme/pom.xml
file I would still need to add the equivalent test tags, eg
<testResourceDirectory>.
Would it be possible to encapsulate these tweaks and any others that
become apparent into a plugin so I could do something like the
following in any application (root) pom:
<build>
<plugins>
<plugin>
<groupId>com.maven.plugins</groupId>
<artifactId>project-structure</artifactId>
<version>1.0</version>
<configuration>
<method>one-tree</method>
</configuration>
</plugin>
</plugins>
</build>
Thanks
AW
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org
Re: [m2] first attempt at maven with single-source
Posted by John Casey <jd...@commonjava.org>.
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
What about a plugin that generates those pom files somehow? you'd need a
map of interdependencies, I guess...but rather than instantiating a
bunch of 'ghost' POMs on the fly, a generator plugin could give you
something to put in version control and track history on...
Just a thought.
- -john
Ashley Williams wrote:
| I believe with just a few pom.xml tweaks I've managed to get something
| of a single source project to work with maven. It could be that a few
| bug fixes since Maven alpha have helped since the last time I tried but
| here's what I did.
|
| 1. Designed a bogus project consisting of a gui artifact that depends
| on a util artifact each with a single class: Main.java and Util.java
| respectively. Additionally the gui component uses a resource file
| called gui.properties. I then arranged this project into the following
| directory structure:
|
| com
| --------acme [pom.xml]
| ----------------util [Util.java, pom.xml]
| ----------------gui [Main.java, pom.xml]
| ------------------------resources [gui.properties]
|
|
| 2. The gui and util poms only declare the acme/pom as a parent and
| don't even have their own build section. The acme/pom.xml parent
| contains the necessary tweaks that the child poms inherit, namely
| inside the build section:
|
| acme/pom.xml:
|
| <project>
| <modelVersion>4.0.0</modelVersion>
| <groupId>com.acme</groupId>
| <artifactId>app</artifactId>
| <packaging>pom</packaging>
| <version>1.0-SNAPSHOT</version>
| <name>Acme Application</name>
| <modules>
| <module>util</module>
| <module>gui</module>
| </modules>
| <build>
| <sourceDirectory>.</sourceDirectory>
| <resources>
| <resource>
| <directory>resources</directory>
| </resource>
| </resources>
| </build>
| </project>
| ~
|
| In other words the java files and resources/ directory are to be found
| in the same directory as the pom.xml file for any given artifact project.
|
| 3. I ran the install phase as follows:
|
| > cd com/acme
| > m2 install
|
| which caused the target directories to be generated also at the same
| level as each pom - for example com/acme/util/target and com/acme/gui/
| target.
|
| 4. I examined the jar files in each target directory for example "jar
| tvf com/acme/gui/target/gui-1.0-SNAPSHOT.jar" resulted in:
|
| META-INF/
| META-INF/MANIFEST.MF
| META-INF/maven/
| META-INF/maven/com.acme/
| META-INF/maven/com.acme/gui/
| META-INF/maven/com.acme/gui/pom.xml
| com/
| com/acme/
| com/acme/gui/
| com/acme/gui/Main.class
| gui.properties
| META-INF/maven/com.acme/gui/pom.properties
|
| which looks fine. I also ran "m2 site:site" as a random goal and that
| seemed to work too, ie a target/site directory was created with all the
| files correctly generated underneath.
|
| ***************************
|
| My conclusions are that it seems too easy so far and that I've missed a
| howler - if somebody could point it out?? Also in the acme/pom.xml file
| I would still need to add the equivalent test tags, eg
| <testResourceDirectory>.
|
| Would it be possible to encapsulate these tweaks and any others that
| become apparent into a plugin so I could do something like the
| following in any application (root) pom:
|
| <build>
| <plugins>
| <plugin>
| <groupId>com.maven.plugins</groupId>
| <artifactId>project-structure</artifactId>
| <version>1.0</version>
| <configuration>
| <method>one-tree</method>
| </configuration>
| </plugin>
| </plugins>
| </build>
|
| Thanks
| AW
|
| ---------------------------------------------------------------------
| To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
| For additional commands, e-mail: users-help@maven.apache.org
|
|
|
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.6 (GNU/Linux)
iD8DBQFDMZCeK3h2CZwO/4URAkF8AJ9f2rxxfq+da4VUDlnkI8fWMm+0UgCggFeg
MdvAC60sLpKhVf1+qQuqqB0=
=C8AE
-----END PGP SIGNATURE-----
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org