2013-02-15 5 views
13

Ich habe alles durchgesehen, was ich auf StackOverflow finden kann und ich konnte keine Antwort finden. Ich habe gerade eine neue Maschine gebaut und ich habe Projekte, die auf früheren Installationen kompiliert und gebaut wurden. Aber meine neue Maschine wird nicht. Alles scheint korrekt aufgebaut zu sein (keine Build-Fehler, Abhängigkeiten sind korrekt enthalten), aber die eigentlichen Klassendateien (Code, den ich geschrieben habe) aus meinem Projekt sind nicht im Jar enthalten. Ich habe dann ein einfaches HelloWorld-Projekt erstellt mit einer etwas minimalen POM-Datei, um das Problem zu sehen. Ich habe den Build von der Kommandozeile aus gemacht, um Eclipse aus der Gleichung zu entfernen.Maven Build enthält keine .class-Datei im Jar

Klassencode

package com.zoverge.utils; 

public class HelloWorld { 

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

} 

Meine POM Datei

<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> 

Das resultierende Build erzeugt zwei JAR-Dateien (wie erwartet) Hello World-1.0.jar und HelloWorld.jar. Weder jar enthält die kompilierte Klassendatei für HelloWorld.java. Ich denke, das muss ein Problem mit meiner Umgebung sein, weil dieses Verhalten für andere Projekte, die auf anderen Dev-Maschinen gut funktionierten, das gleiche ist, aber ich kann den Unterschied nicht herausfinden. Ich habe keinen Zugriff auf meine vorherige Dev-Maschine, um die Konfiguration zu vergleichen. Meine .m2/setting.xml ist im Grunde leer.

<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

Seltsam, funktioniert für mich mit Maven 3.0.4. –

+0

Nachdem ich tiefer in meine Maven Installation gegraben habe, habe ich mehrere Instanzen gefunden (3.0.3 & 2.2.1). Ich muss das aufräumen und es erneut versuchen ... Danke. –

+0

Kein Glück. Ich habe Maven komplett deinstalliert und neu installiert und auf den neusten Stand gebracht (3.0.4) und bekomme immer noch ein Jar ohne Klassen-Dateien und jetzt hat das Manifest auch keine Haupt-Klasse aufgelistet. Manifest-Version: 1.0 Archiver-Version: Plexus Archiver Erstellt-By: Apache Maven Built-By: johnblakie Errichten-Jdk: 1.6.0_37 –

Antwort

22

Ich habe mein Problem gefunden. Das Problem war die Ordnerstruktur. Maven nimmt eine/src/main/java/Struktur an. Meine Struktur war anders und wurde in der POM.xml nicht überschrieben. das Anpassen des Standardpfads oder das Überschreiben des Pfades in der POM.xml behebt das Problem.

+1

Vielen Dank – ismail

+0

wow, das war so dumm von mir zu verpassen, aber war genau mein Problem, danke !! –

+0

Vielleicht möchten Sie Ihre Antwort annehmen –