You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@maven.apache.org by DavidCAIT <dz...@cait.org> on 2008/08/28 23:32:13 UTC

Copy Task in Maven 2

Hello,

I am trying to convert an ant script into a maven build and I am having
trouble building my webapps folder.

My directory structure:

src
--main
------java
------resources
------webapp

target
--classes
--jars

webapps
--default
----WEB-INF
--------lib

The ant script used to perform the following operations:

1. Compile all java code in src/main/java and output the result to
target/classes.
2. Create a jar containing all classes in target/classes and placed that jar
into the target/jars folder.
3. Checked out dependency jars from the maven repository into target/jars.
4. Copied src/main/webapp into webapps/default.
5. Copied target/jars into webapps/default/WEB-INF/lib

I have written a maven script which does everything except steps 3, 4, and
5:

1. Same as ant step #1.
2. Same as ant step #2, but the jar is deposited into the root of the target
directory and not the jars subfolder.
3. Maven script finishes.

I am very confused about how to get maven to copy its output from the target
folder into the webapps folders. Does anyone know of an equivalent for the
ant copy task? If not, is there a better way to accomplish this in maven?

So far, I have tried the following:

- Added an <outputdirectory> tag nested inside <build> and specifying the
webapps/default directory. This placed the Java class files in webapps, but
it did not copy the src/main/webapp folder or use the JAR file of compiled
classes.

- Using the resource tag added files to the JAR, but did not allow me to
perform my copy operations.

- Using the maven-antrun-plugin did not work and maven simply ignored my ant
statements.

- I tried using the Magon wagon-file plugin, but I could not find much
documentation about how to use it. I also couldn't see how to use relative
paths with the plugin.

Does anyone have any other suggestions?

Thanks!

For reference, here is my pom.xml file:

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>

    <groupId>org.myCompany</groupId>
    <artifactId>application</artifactId>
    <packaging>jar</packaging>
    <name>application</name>
    <version>1.0</version>

    <build>
        <!-- Failed attempt to use the outputdirectory tag:
               <outputDirectory>webapps/default</outputDirectory>
              Result: placed contents in webapps/default instead of target;
did not exclude .class files; did not copy src/main/webapp to
webapps/default/
              Is it possible to have multiple outputDirectory tags for each
resource? -->
        <defaultGoal>package</defaultGoal>
        <plugins>
            <plugin>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.0.2</version>
                <configuration>
                    <source>1.5</source>
                    <target>1.5</target>
                </configuration>
            </plugin>

	    <!-- Failed attempt to use ant -->
            <plugin>
            	<artifactId>maven-antrun-plugin</artifactId>
            	<executions>
            		<execution>
            			<phase>build</phase>
            			<goals>
	            			<goal>run</goal>
    	        		</goals>
        	    		<configuration>
            				<tasks>
            					<copy todir="webapps/default" preservelastmodified="true">
            						<fileset dir="src/main/webapp"/>
        						</copy>
        						<copy todir="webapps/default/WEB-INF/lib"
preservelastmodified="true">
         					   		<fileset dir="target/jars"/>
        						</copy>
            				</tasks>
            			</configuration>
            		</execution>
            	</executions>
            </plugin>
        </plugins>
        <!-- Failed attempt to use resources tag -->
        <!-- Placed all contents in the JAR file and did not populate
dependency JARs -->
        <!-- <resources>
              <resource>
                       <directory>src/main/webapp</directory>
                       <includes><include>**/*.*</include></includes>
              </resource>
             <resource>
                       <directory>target/jars</directory>
                       <includes><include>**/*.*</include></includes>
             </resource>
        </resources> -->
    </build>
</project>
<!-- Note: Dependencies were omitted to save space. -->
-- 
View this message in context: http://www.nabble.com/Copy-Task-in-Maven-2-tp19209588p19209588.html
Sent from the Maven - Users mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
For additional commands, e-mail: users-help@maven.apache.org


Re: Copy Task in Maven 2

Posted by Brett Porter <br...@gmail.com>.
The reason antrun is not running is you had phase = build, which is not a
valid phase.
Most of what you are doing here is not in line with the definition of the
elements. For example:
- resources are not for webapp resources, they are for classpath entries
- builds are intended to produce a single artifact (one jar, or one war),
and multiple projects put them together.

I would suggest reviewing examples on how to build a basic webapp with Maven
to see how it normally puts things together, then review the best migration
path for your ant build. While it is usually possible to replicate the exact
same set up, you'll find that if you stick to Maven's conventions you
drastically reduce the complexity of your build from what you have below
without giving up functionality.

HTH,
Brett

2008/8/29 DavidCAIT <dz...@cait.org>

>
> Hello,
>
> I am trying to convert an ant script into a maven build and I am having
> trouble building my webapps folder.
>
> My directory structure:
>
> src
> --main
> ------java
> ------resources
> ------webapp
>
> target
> --classes
> --jars
>
> webapps
> --default
> ----WEB-INF
> --------lib
>
> The ant script used to perform the following operations:
>
> 1. Compile all java code in src/main/java and output the result to
> target/classes.
> 2. Create a jar containing all classes in target/classes and placed that
> jar
> into the target/jars folder.
> 3. Checked out dependency jars from the maven repository into target/jars.
> 4. Copied src/main/webapp into webapps/default.
> 5. Copied target/jars into webapps/default/WEB-INF/lib
>
> I have written a maven script which does everything except steps 3, 4, and
> 5:
>
> 1. Same as ant step #1.
> 2. Same as ant step #2, but the jar is deposited into the root of the
> target
> directory and not the jars subfolder.
> 3. Maven script finishes.
>
> I am very confused about how to get maven to copy its output from the
> target
> folder into the webapps folders. Does anyone know of an equivalent for the
> ant copy task? If not, is there a better way to accomplish this in maven?
>
> So far, I have tried the following:
>
> - Added an <outputdirectory> tag nested inside <build> and specifying the
> webapps/default directory. This placed the Java class files in webapps, but
> it did not copy the src/main/webapp folder or use the JAR file of compiled
> classes.
>
> - Using the resource tag added files to the JAR, but did not allow me to
> perform my copy operations.
>
> - Using the maven-antrun-plugin did not work and maven simply ignored my
> ant
> statements.
>
> - I tried using the Magon wagon-file plugin, but I could not find much
> documentation about how to use it. I also couldn't see how to use relative
> paths with the plugin.
>
> Does anyone have any other suggestions?
>
> Thanks!
>
> For reference, here is my pom.xml file:
>
> <project xmlns="http://maven.apache.org/POM/4.0.0"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
> http://maven.apache.org/maven-v4_0_0.xsd">
>
>    <modelVersion>4.0.0</modelVersion>
>
>    <groupId>org.myCompany</groupId>
>    <artifactId>application</artifactId>
>    <packaging>jar</packaging>
>    <name>application</name>
>    <version>1.0</version>
>
>    <build>
>        <!-- Failed attempt to use the outputdirectory tag:
>               <outputDirectory>webapps/default</outputDirectory>
>              Result: placed contents in webapps/default instead of target;
> did not exclude .class files; did not copy src/main/webapp to
> webapps/default/
>              Is it possible to have multiple outputDirectory tags for each
> resource? -->
>        <defaultGoal>package</defaultGoal>
>        <plugins>
>            <plugin>
>                <artifactId>maven-compiler-plugin</artifactId>
>                <version>2.0.2</version>
>                <configuration>
>                    <source>1.5</source>
>                    <target>1.5</target>
>                </configuration>
>            </plugin>
>
>            <!-- Failed attempt to use ant -->
>            <plugin>
>                <artifactId>maven-antrun-plugin</artifactId>
>                <executions>
>                        <execution>
>                                <phase>build</phase>
>                                <goals>
>                                        <goal>run</goal>
>                                </goals>
>                                <configuration>
>                                        <tasks>
>                                                <copy
> todir="webapps/default" preservelastmodified="true">
>                                                        <fileset
> dir="src/main/webapp"/>
>                                                        </copy>
>                                                        <copy
> todir="webapps/default/WEB-INF/lib"
> preservelastmodified="true">
>                                                                <fileset
> dir="target/jars"/>
>                                                        </copy>
>                                        </tasks>
>                                </configuration>
>                        </execution>
>                </executions>
>            </plugin>
>        </plugins>
>        <!-- Failed attempt to use resources tag -->
>        <!-- Placed all contents in the JAR file and did not populate
> dependency JARs -->
>        <!-- <resources>
>              <resource>
>                       <directory>src/main/webapp</directory>
>                       <includes><include>**/*.*</include></includes>
>              </resource>
>             <resource>
>                       <directory>target/jars</directory>
>                       <includes><include>**/*.*</include></includes>
>             </resource>
>        </resources> -->
>    </build>
> </project>
> <!-- Note: Dependencies were omitted to save space. -->
> --
> View this message in context:
> http://www.nabble.com/Copy-Task-in-Maven-2-tp19209588p19209588.html
> Sent from the Maven - Users mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@maven.apache.org
> For additional commands, e-mail: users-help@maven.apache.org
>
>


-- 
Brett Porter
Blog: http://blogs.exist.com/bporter/