0

Working with a client who still lives in the ant build environment world (on a Windows box). Want to use google-cloud-translate library in a Java program but if I include all the dependencies of google-cloud-translate that's over 40 jars with everything from guava to threetenbp to joda-time to google-cloud-core and more if I include all the dependencies of the dependencies and the optional ones. Is there an easy way to package up all the dependencies into a single JAR so I only need the one jar file referenced in the build.xml?

jjaazz
  • 105
  • 1
  • 9
  • [link](https://stackoverflow.com/questions/37253993/how-to-create-a-single-library-jar-from-maven-project-with-multiple-submodules) talks about creating a single distribution jar from multiple projects – jjaazz Aug 07 '18 at 16:21

1 Answers1

1

If you absolutely need to use Ant, there's a pretty simple option for this, although it uses a package that is no longer maintained: http://maven.apache.org/ant-tasks/index.html

With the Maven Ant Tasks, you can define an artifact in your build with the <artifact:dependencies> task, and that artifact will be resolved to your local repo along with all of its own dependencies. You can also give it a filesetId so you can easily manipulate the files after that point:

<project xmlns:artifact="antlib:org.apache.maven.artifact.ant">
    <typedef
        classpath="lib/maven-ant-tasks.jar"
        resource="org/apache/maven/artifact/ant/antlib.xml"
        uri="antlib:org.apache.maven.artifact.ant"
    />

    <target name="resolve-google-cloud-translate-artifacts">
        <artifact:dependencies filesetId="google-cloud-translate">
            <dependency artifactId="google-cloud-translate" groupId="com.google.cloud" version="1.38.0" />

            <remoteRepository id="central" url="https://repo.maven.apache.org/maven2/" />
        </artifact:dependencies>

        <delete dir="google-cloud-translate.libs" />

        <mkdir dir="google-cloud-translate.libs" />

        <copy todir="google-cloud-translate.libs">
            <fileset refid="google-cloud-translate" />
            <flattenmapper />
        </copy>
    </target>
</project>

Note the artifact: namespace definition in the project element. The Maven tasks won't work without it.

CAustin
  • 4,525
  • 13
  • 25