2010-11-26 14 views
0

J'ai un projet Scala basé sur l'archétype "un simple projet scala (1.2)" que j'ai importé dans Netbeans 6.9.1 en tant que projet maven avec pom. Je peux exécuter ce projet avec succès à partir de NetBeans, mais je n'arrive pas à comprendre comment l'exécuter à partir de la ligne de commande. J'ai vu quelques questions similaires, mais je n'ai pas réussi à les appliquer à ma situation avec succès.Exécution de l'application Netbeans Maven Scala à partir de la ligne de commande

Quand il fonctionne dans l'IDE, la commande qui exécute est:

mvn -Dexec.classpathScope=runtime -Dexec.args=-classpath %classpath com.sentientswarm.trade_grouper.TradeParseMain /Users/jstanford/Development/test_data/trades/100410.csv -Dexec.executable=/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/bin/java -Dnetbeans.execution=true process-classes org.codehaus.mojo:exec-maven-plugin:1.1.1:exec 

Le plus proche que je suis venu à une version en ligne de commande réaliste:

mvn -Dexec.classpathScope=runtime -Dexec.args=-classpath /Users/stanford/Development/NetBeansProjects/target/classes/com/sentientswarm/trade_grouper:/Users/jstanford/Development/scala/lib/scala-library.jar com.sentientswarm.trade_grouper.TradeParseMain /Users/jstanford/Development/test_data/trades/100410.csv -Dexec.executable=java process-classes org.codehaus.mojo:exec-maven-plugin:1.1.1:exec 

Le classpath comprend au-dessus du dossier où les classes construites pour le projet sont aussi bien que la bibliothèque de scala. Je ne sais pas s'il me manque quelque chose d'autre. Le résultat est:

[INFO] Scanning for projects... 
[INFO] Searching repository for plugin with prefix: '/Users/stanford/Development/NetBeansProjects/target/classes/com/sentientswarm/trade_grouper'. 
[WARNING] POM for 'org.apache.maven.plugins:maven-/Users/stanford/Development/NetBeansProjects/target/classes/com/sentientswarm/trade_grouper-plugin:pom:LATEST' is invalid. 

Its dependencies (if any) will NOT be available to the current build. 
[INFO] ------------------------------------------------------------------------ 
[ERROR] BUILD ERROR 
[INFO] ------------------------------------------------------------------------ 
[INFO] Error building POM (may not be this project's POM). 


Project ID: org.apache.maven.plugins:maven-/Users/stanford/Development/NetBeansProjects/target/classes/com/sentientswarm/trade_grouper-plugin 

Reason: POM 'org.apache.maven.plugins:maven-/Users/stanford/Development/NetBeansProjects/target/classes/com/sentientswarm/trade_grouper-plugin' not found in repository: Unable to determine the latest version 

    org.apache.maven.plugins:maven-/Users/stanford/Development/NetBeansProjects/target/classes/com/sentientswarm/trade_grouper-plugin:pom:LATEST 


for project org.apache.maven.plugins:maven-/Users/stanford/Development/NetBeansProjects/target/classes/com/sentientswarm/trade_grouper-plugin 


[INFO] ------------------------------------------------------------------------ 
[INFO] For more information, run Maven with the -e switch 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 1 second 
[INFO] Finished at: Thu Nov 25 23:15:14 PST 2010 
[INFO] Final Memory: 8M/81M 
[INFO] ------------------------------------------------------------------------ 

Voici le pom.xml:

<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>com.sentientswarm</groupId> 
    <artifactId>trade_grouper</artifactId> 
    <version>1.0-SNAPSHOT</version> 
    <inceptionYear>2008</inceptionYear> 
    <properties> 
     <scala.version>2.8.0</scala.version> 
    </properties> 

    <repositories> 
     <repository> 
      <id>scala-tools.org</id> 
      <name>Scala-Tools Maven2 Repository</name> 
      <url>http://scala-tools.org/repo-releases</url> 
     </repository> 
     <repository> 
      <id>BumNetworksReleaseRepository</id> 
      <name>Bum Networks Release Repository</name> 
      <url>http://repo.bumnetworks.com/releases/</url> 
     </repository> 
    </repositories> 

    <pluginRepositories> 
     <pluginRepository> 
      <id>scala-tools.org</id> 
      <name>Scala-Tools Maven2 Repository</name> 
      <url>http://scala-tools.org/repo-releases</url> 
     </pluginRepository> 
    </pluginRepositories> 

    <dependencies> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.4</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.specs</groupId> 
      <artifactId>specs</artifactId> 
      <version>1.2.5</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>com.novus</groupId> 
      <artifactId>casbah_2.8.0</artifactId> 
      <version>1.0.8.5</version> 
     </dependency> 
    </dependencies> 

    <build> 
     <sourceDirectory>src/main/scala</sourceDirectory> 
     <testSourceDirectory>src/test/scala</testSourceDirectory> 
     <plugins> 
      <plugin> 
       <groupId>org.scala-tools</groupId> 
       <artifactId>maven-scala-plugin</artifactId> 
       <executions> 
        <execution> 
         <goals> 
          <goal>compile</goal> 
          <goal>testCompile</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <scalaVersion>${scala.version}</scalaVersion> 
        <args> 
         <arg>-target:jvm-1.5</arg> 
        </args> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-eclipse-plugin</artifactId> 
       <configuration> 
        <downloadSources>true</downloadSources> 
        <buildcommands> 
         <buildcommand>ch.epfl.lamp.sdt.core.scalabuilder</buildcommand> 
        </buildcommands> 
        <additionalProjectnatures> 
         <projectnature>ch.epfl.lamp.sdt.core.scalanature</projectnature> 
        </additionalProjectnatures> 
        <classpathContainers> 
         <classpathContainer>org.eclipse.jdt.launching.JRE_CONTAINER</classpathContainer> 
         <classpathContainer>ch.epfl.lamp.sdt.launching.SCALA_CONTAINER</classpathContainer> 
        </classpathContainers> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
    <reporting> 
     <plugins> 
      <plugin> 
       <groupId>org.scala-tools</groupId> 
       <artifactId>maven-scala-plugin</artifactId> 
       <configuration> 
        <scalaVersion>${scala.version}</scalaVersion> 
       </configuration> 
      </plugin> 
     </plugins> 
    </reporting> 
    <name>TradeGrouper</name> 
</project> 

Je trouve qu'il est assez difficile de croire que l'exécution d'une application simple à partir de la ligne de commande peut être si compliquée, si je l'espère quelqu'un peut me montrer le chemin ...

Merci, John

Répondre

1

Il y a deux façons possibles pour gérer votre projet Maven. D'abord, vous pouvez simplement utiliser le excec:java -task comme ceci:

mvn exec:java -Dexec.mainClass=com.acme.Main 

Cela fonctionne bien si vous n'avez pas besoin d'arguments spécifiques passés à la commande java.

Vous pouvez également utiliser la tâche exec:exec, mais vous ne devez pas étendre %classpath tel qu'il est évalué par Maven:

mvn exec:exec -Dexec.args="-classpath %classpath com.acme.Main" \ 
    -Dexec.executable="java" 

Si vous exécutez votre projet comme celui-ci java doit être dans votre $PATH bien sûr ou vous devez fournir le chemin complet via exec.executable.

Vous pouvez également configure the exec-maven-plugin dans votre pom.xml afin que vous puissiez omettre les définitions de propriétés dans votre ligne de commande.

+0

Merci, cela a fonctionné. Je suppose que j'ai encore beaucoup à apprendre sur maven ... – jxstanford