2013-02-15 2 views
13

Ho esaminato tutto ciò che riesco a trovare su StackOverflow e non sono riuscito a trovare una risposta. Ho appena costruito una nuova macchina e ho dei progetti che sono stati compilati e costruiti su installazioni precedenti. Ma la mia nuova macchina no. Tutto sembra costruire correttamente (nessun errore di compilazione, incluse le dipendenze correttamente), ma i file di classe reali (codice che ho scritto) dal mio progetto non sono inclusi nel jar. Ho quindi creato un semplice progetto helloWorld con un po 'di quanto il file POM minimo per vedere del problema esiste ancora. Ho creato la build dalla riga di comando per eliminare Eclipse dall'equazione.Maven Build non include il file .class nel barattolo

Codice Classe

package com.zoverge.utils; 

public class HelloWorld { 

    /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
     String message = args[0]; 
     System.out.println(message); 
    } 

} 

Il mio file POM

<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.zoverge.utils</groupId> 
    <artifactId>helloworld</artifactId> 
    <packaging>jar</packaging> 
    <version>1.0</version> 
    <name>Hello World</name> 
    <url>http://maven.apache.org</url> 
    <properties> 
      <project.build.java.version>1.6</project.build.java.version> 
      <org.apache.maven.plugins.maven-compiler-plugin.version>2.5.1</org.apache.maven.plugins.maven-compiler-plugin.version>   
    </properties> 
    <build> 
     <plugins> 
      <!-- Maven will compile our source java classes using the "project.build.java.version" 
       specified --> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>${org.apache.maven.plugins.maven-compiler-plugin.version}</version> 
       <configuration> 
        <source>${project.build.java.version}</source> 
        <target>${project.build.java.version}</target> 
       </configuration> 
      </plugin> 
    <plugin> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <version>2.3</version> 
     <configuration> 
      <descriptorRefs> 
      <descriptorRef>jar-with-dependencies</descriptorRef> 
      </descriptorRefs> 
      <archive> 
      <manifest> 
       <mainClass>com.zoverge.utils.HelloWorld</mainClass> 
      </manifest> 
      </archive> 
       <finalName>HelloWorld</finalName> 
       <appendAssemblyId>false</appendAssemblyId> 
     </configuration> 
     <executions> 
      <execution> 
      <id>make-assembly</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 
<dependencies/> 
</project> 

L'accumulo risultante produce 2 file jar (come previsto) HelloWorld-1.0.jar e HelloWorld.jar. Né jar contiene il file di classe compilato per HelloWorld.java. Penso che questo debba essere un problema con il mio ambiente perché questo comportamento è lo stesso per altri progetti che hanno funzionato bene su altre macchine di sviluppo, ma non riesco a capire la differenza. Non ho accesso alla mia precedente macchina di sviluppo per confrontare la configurazione. Il mio .m2/setting.xml è praticamente vuoto.

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 
         http://maven.apache.org/xsd/settings-1.0.0.xsd"> 
    <localRepository>${user.home}/.m2/repository</localRepository> 
    <interactiveMode/> 
    <usePluginRegistry/> 
    <offline/> 
    <pluginGroups/> 
    <servers/> 
    <mirrors/> 
    <proxies/> 
    <profiles/> 
    <activeProfiles/> 
</settings> 
+0

Strano, funziona per me con Maven 3.0.4. –

+0

Dopo aver scavato più a fondo nella mia installazione di Maven ho trovato più istanze (3.0.3 e 2.2.1). Devo ripulire tutto e riprovare ... grazie. –

+0

Nessuna fortuna. Ho fatto una disinstallazione completa e reinstallazione di Maven e aggiornato alla versione più recente (3.0.4) e ancora ottengo un jar senza file di classe e ora il manifest non ha alcun elenco di prima classe. Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Creato-By: Apache Maven Built-In: johnblakie Build-Jdk: 1.6.0_37 –

risposta

22

Ho trovato il mio problema. Il problema era la struttura delle cartelle. Maven assume una/src/main/java/structure. la mia struttura era diversa e non era stata sovrascritta in POM.xml. corrispondendo al percorso standard o eseguendo l'override del percorso in POM.xml risolto il problema.

+1

grazie mille – ismail

+0

wow, questo era così stupido da parte mia da mancare ma era esattamente il mio problema, grazie !! –

+0

Puoi accettare la tua risposta –