Aleksandr Dubinsky
Aleksandr Dubinsky

Reputation: 23505

Copy dependencies to project's local repository

maven-dependency-plugin:copy copies a single jar. I need to copy the jar and the pom to the appropriately named path in accordance with repository structure.

Use case: My project has a local repository, where I keep non-public dependencies. The dependencies are projects that I build on my machine and which get installed to the local machine's repository. After I copy the artifacts to the project's local repository, I can build the project on any machine which doesn't have the sources of the other projects. Using a project local repository is easy. You just need a folder with a particular directory structure and include this in the POM:

<repositories>
    <repository>
        <id>in-project</id>
        <name>In Project Repo</name>
        <url>file://${project.basedir}/libs</url>
    </repository>
</repositories>

However, copying stuff into the local repo is an extra step I'd like to avoid. maven-dependency-plugin:copy almost does what I need.

<build>                
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.8</version>
            <executions>
                <execution>
                    <id>copy-private-dependencies</id>
                    <phase>prepare-package</phase>
                    <goals>
                        <goal>copy</goal>
                    </goals>
                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>...</groupId>
                                <artifactId>...</artifactId>
                            </artifactItem>
                        </artifactItems>
                        <outputDirectory>${project.basedir}/libs</outputDirectory>
                        <overWriteReleases>true</overWriteReleases>
                        <overWriteSnapshots>true</overWriteSnapshots>
                        <overWriteIfNewer>true</overWriteIfNewer>
                    </configuration>
                </execution>
            </executions>            
    </plugins>
</build>

But it just copies the dependency's jar, without the pom and without the necessary directory structure.

Upvotes: 4

Views: 4684

Answers (2)

jens p
jens p

Reputation: 56

Use the maven-dependency-plugin:copy-dependencies goal instead. If useRepositoryLayout and copyPom properties are set to true, it will create such a local repository.

The goal can be called from the command line as:

mvn org.apache.maven.plugins:maven-dependency-plugin:3.0.2:copy-dependencies -Dmdep.useRepositoryLayout=true -Dmdep.copyPom=true -DoutputDirectory=./repository-exported

Upvotes: 4

Jintin
Jintin

Reputation: 1478

I have written a proof-of-concept about that. You can try it out:

https://github.com/Jintin/syndle

For example, if you like to download "group:name:version" at "jcenter.bintray.com" into your local Maven repository, you can execute the following command:

syndle clone -p group:name:version -s https://jcenter.bintray.com

Upvotes: 1

Related Questions