I started to convert my project to maven because I needed to use a library that was distributed in binary form over maven only, but after banging my head against the wall on it for far too long I've decided to stop hurting myself and just use Ant. I'd like to just have maven download the jar and all of its transitive dependencies into a directory of my choosing so I can just check them into my SCM as I normally enjoy and be a blissful developer once again.
Any ideas how to do that easily?
6 Answers
The maven dependency plugin can potentially solve your problem.
If you have a pom
with all your project dependencies specified, all you would need to do is run
mvn dependency:copy-dependencies
and you will find the target/dependencies
folder filled with all the dependencies, including transitive.
Adding Gustavo's answer from below: To download the dependency sources, you can use
mvn dependency:copy-dependencies -Dclassifier=sources
I finally figured out a how to use Maven. From within Eclipse, create a new Maven project.
Download Maven, extract the archive, add the /bin
folder to path.
Validate install from command-line by running mvn -v
(will print version and java install path)
Change to the project root folder (where pom.xml
is located) and run:
mvn dependency:copy-dependencies
All jar-files are downloaded to /target/dependency
.
To set another output directory:
mvn dependency:copy-dependencies -DoutputDirectory="c:\temp"
Now it's possible to re-use this Maven-project for all dependency downloads by altering the pom.xml
Add jars to java project by build path -> configure build path -> libraries -> add JARs..
Based on @Raghuram answer, I find a tutorial on Copying project dependencies, Just:
Open your project
pom.xml
file and find this:<project> [...] <build> <plugins> ... </plugins> </build> [...] </project>
Than replace the
<plugins> ... </plugins>
with:<plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <version>3.0.0</version> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/alternateLocation</outputDirectory> <overWriteReleases>false</overWriteReleases> <overWriteSnapshots>false</overWriteSnapshots> <overWriteIfNewer>true</overWriteIfNewer> </configuration> </execution> </executions> </plugin> </plugins>
And call maven within the command line
mvn dependency:copy-dependencies
After it finishes, it will create the folder target/dependency
within all the jar
's dependencies on the current directory where the pom.xml
lives.
My simple script based on user based on Raghuram.
getmvndep.sh
#!/bin/bash
groupId=$1
artifactId=$2
version=$3
echo "<project>" > pom.xml
echo " <modelVersion>4.0.0</modelVersion>" >> pom.xml
echo " <groupId>com.temp.temp</groupId>" >> pom.xml
echo " <artifactId>temp</artifactId>" >> pom.xml
echo " <packaging>jar</packaging>" >> pom.xml
echo " <version>0.0.0</version>" >> pom.xml
echo " <dependencies>" >> pom.xml
echo " <dependency>" >> pom.xml
echo " <groupId>${groupId}</groupId>" >> pom.xml
echo " <artifactId>${artifactId}</artifactId>" >> pom.xml
echo " <version>${version}</version>" >> pom.xml
echo " </dependency>" >> pom.xml
echo " </dependencies>" >> pom.xml
echo " <build>" >> pom.xml
echo " <plugins>" >> pom.xml
echo " </plugins>" >> pom.xml
echo " </build>" >> pom.xml
echo "</project>" >> pom.xml
mvn dependency:copy-dependencies -DoutputDirectory="./libs/${version}"
rm pom.xml