Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I package and run a simple command-line application with dependencies using maven?

I am brand new to both java and to maven, so this is likely very simple.

If I follow the maven2 hello world instructions here:

http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html

everything works OK. If I then alter pom.xml to bring in a dependency from a remote repository, the files for this dependency get stored in ~/.m2/repository/new-dependency/.

Using the syntax in the hello world instructions to run the application requires that I add the absolute path to the dependency to my classpath (either by setting the environment variable or via the command line switch):

java -cp target/my-app-1.0-SNAPSHOT.jar:/.../.m2/.../new-dependency.jar com.mycompany.app.App

This will obviously get unwieldy quickly :)

I suspect that this is not the usual way of running a java program and that I just need to read more about .jar files, but while I am doing so I would appreciate any tips on how to do this properly.

I am not using an IDE, btw. vim from the command line.

Thanks!

Mike.

like image 693
mdtsandman Avatar asked May 16 '11 22:05

mdtsandman


People also ask

How do I run a dependency in Maven?

Right-click the utility project, and select Maven>Add Dependency. Type a dependency name in the Enter groupID… field (e.g., commons-logging) to search for a dependency. Select the dependency, and click OK.

How do I run a Maven package?

Rightclick on your pom. xml and choose "Run as" -> "Maven build.." and put in Goals: package . If you now select "run" (CTRL + F11) it will run automatically if you select these run configuration.


2 Answers

You can use maven itself to run it, I believe it sets the classpath for you.

mvn compile

will compile it then you run:

mvn exec:java -Dexec.mainClass="com.mycompany.app.App"  

which will execute it.

You can see http://www.vineetmanohar.com/2009/11/3-ways-to-run-java-main-from-maven/ for some more info on ways to run (including passing command-line args to the thing you want to run)

like image 147
Ryan Avatar answered Oct 20 '22 22:10

Ryan


You can make a jar executable by adding the Main-Class attribute to its manifest file. In Maven this is done by the archiver plugin. To add the Main-Class attribute, add this to your pom.xml:

 <build>
   <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>        
      <configuration>
        <archive>
          <manifest>
            <addClasspath>true</addClasspath>
            <mainClass>com.mycompany.app.App</mainClass>
          </manifest>
        </archive>
      </configuration>
    </plugin>
  </plugins>
 </build>

You can now run your jar with the command: java -jar myjar.jar or by double clicking on it (not available in all platforms).

like image 31
iruediger Avatar answered Oct 20 '22 20:10

iruediger