2012-04-04 20 views
17

używam Eclipse Maven (m2e) wewnątrz Eclipse i używam mój projekt tak:Jak: Zaćmienie Maven zainstalować budowania słoik z zależnościami

My pom.xml wygląda następująco:

<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>ro.project</groupId> 
    <packaging>jar</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <name>ro.project</name> 

    <properties> 
     <org.springframework.version>3.1.1.RELEASE</org.springframework.version> 
     <org.hibernate.version>4.1.0.Final</org.hibernate.version> 
    </properties> 
    <dependencies> 

     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>${org.springframework.version}</version> 
     </dependency> 
    <build> 
     <plugins> 

      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <configuration> 
        <archive> 
         <manifest> 
          <addClasspath>true</addClasspath> 
          <classpathPrefix>lib/</classpathPrefix> 
          <mainClass>ro.project.ProjectServer</mainClass> 
         </manifest> 
        </archive> 
       </configuration> 
      </plugin> 
      <plugin> 
       <artifactId>maven-antrun-plugin</artifactId> 
       <dependencies> 
        <dependency> 
         <groupId>com.sun</groupId> 
         <artifactId>tools</artifactId> 
         <version>1.7.0_02</version> 
         <scope>system</scope> 
         <systemPath>${java.home}/../lib/tools.jar</systemPath> 
        </dependency> 
       </dependencies> 
       <executions> 
        <execution> 
         <id>ant-magic</id> 
         <phase>prepare-package</phase> 
         <goals> 
          <goal>run</goal> 
         </goals> 
         <configuration> 
          <tasks> 
           <property name="compile_classpath" refid="maven.compile.classpath" /> 
           <property name="runtime_classpath" refid="maven.runtime.classpath" /> 
           <property name="test_classpath" refid="maven.test.classpath" /> 
           <property name="plugin_classpath" refid="maven.plugin.classpath" /> 

           <ant antfile="${basedir}/clientExport.xml" target="export-all" /> 
          </tasks> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 

    <artifactId>project-core</artifactId> 
    <url>http://www.project.ro</url> 
</project> 

After I uruchomić Maven zainstalować to działa ...

Maven konfiguracji uruchom:

maven install deploy jar

Problemem jest to, że mój generowane .jar że nie ma zależności włączone .... Jak mogę skonfigurować pom.xml obejmować wszystkie moje zależności w formacie .jar i nie rozpakowane .. bo wydaje się, że po rozpakowaniu nie działa poprawne ...

Aby upewnić się, że uwzględnienie wszystkich słoików jest OK .. Pobrałem i dodałem każdą bibliotekę do folderu jar 's, a słoik działa ... więc .. moje jedyne pytanie brzmi: Jak mogę skonfigurować pom.xml aby dodać wszystkie moje zależności w formacie jar?

Próbowałem wszystkich metod:

  1. assembly:assembly
  2. assembly:single
  3. assembly:single z moim deskryptor (plik assemble.xml), ale to nie działa
  4. maven copy dependencies plugin, ale nadal nie działa z Eclipse Maven - m2e

Nie mam rozwiązań ... czy ktoś może mi powiedzieć, w jaki sposób dodać moje zależności w słoiku? Nie mogę uwierzyć, że maven jest tak skomplikowane i nie mogę znaleźć odpowiedzi na moje pytanie wszędzie ..

góry dziękuję

+1

O ile nie ma ładującego klasy ładującego klasy, nie można zagnieżdżać słoików, jak to brzmi, jak próbujesz zrobić. –

+0

Mam zamiar uruchomić go tak jak java -jar myjar – Alex

Odpowiedz

46

Istnieje kilka sposobów realizacji.

1) Jeśli chcesz uber-jar (przepakowane ze wszystkimi zależnościami), spojrzeć w użyciu i konfiguracji maven-shade-plugin:

<build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-shade-plugin</artifactId> 
     <version>1.6</version> 
     <executions> 
      <execution> 
      <phase>package</phase> 
      <goals> 
       <goal>shade</goal> 
      </goals> 
      <configuration> 
       <transformers> 
       <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
        <mainClass>com.group.id.Launcher1</mainClass> 
       </transformer> 
       </transformers> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 

Będzie to rozpakować wszystkie zależności i połączyć je w jeden JAR plik.


2) Jeśli chcesz dostarczyć paczkę (ZIP, TAR.gz itp) z rozpakowanych plików JAR w wiązce (być może pod lib /), to trzeba spojrzeć na maven-assembly-plugin:

<build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-assembly-plugin</artifactId> 
     <version>2.3</version> 
     <executions> 
      <execution> 
      <id>create-distro</id> 
      <phase>package</phase> 
      <goals> 
       <goal>single</goal> 
      </goals> 
      <configuration> 
       <descriptors> 
       <descriptor>src/main/assembly/dist.xml</descriptor> 
       </descriptors> 
      </configuration> 
      </execution> 
     </executions> 
     </plugin> 
    </plugins> 
    </build> 

Zauważ, że wymaga to deskryptor montażowej src/main/assembly/dist.xml i przykład wygląda tak:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"> 
    <id>distribution</id> 
    <formats> 
    <format>zip</format> 
    </formats> 

    <dependencySets> 
    <dependencySet> 
     <useProjectArtifact>false</useProjectArtifact> 
     <useTransitiveDependencies>false</useTransitiveDependencies> 
     <unpack>false</unpack> 
     <scope>runtime</scope> 
     <fileMode>0755</fileMode> 
     <directoryMode>0755</directoryMode> 
     <outputDirectory>bin</outputDirectory> 

     <includes> 
     <include>com.group.id:project-launch1</include> 
     <include>com.group.id:project-launch2</include> 
     </includes> 

    </dependencySet> 
    <dependencySet> 
     <useProjectArtifact>false</useProjectArtifact> 
     <useTransitiveDependencies>true</useTransitiveDependencies> 
     <unpack>false</unpack> 
     <scope>runtime</scope> 
     <fileMode>0644</fileMode> 
     <directoryMode>0755</directoryMode> 
     <outputDirectory>lib</outputDirectory> 

     <includes> 
     <include>com.group.id:project-lib1</include> 
     <include>com.group.id:project-lib2</include> 
     <include>com.group.id:project-lib3</include> 
     <include>com.group.id:project-lib4</include> 
     </includes> 

    </dependencySet> 
    </dependencySets> 
</assembly> 

A ponieważ jesteś teraz montaż zależności, trzeba lepiej określić zależność w pom.xml, tak:

<dependencies> 
    <dependency> 
     <groupId>com.group.id</groupId> 
     <artifactId>project-launch1</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>com.group.id</groupId> 
     <artifactId>project-launch2</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>com.group.id</groupId> 
     <artifactId>project-lib1</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
     <type>jar</type> 
    </dependency> 
    ... and so on ... 
    </dependencies> 


3) Jeśli dostarczamy paczkę z wykonywalnego pliku JAR wyrzutni, będzie prawdopodobnie trzeba dodać konfigurację maven-jar-plugin w uzupełnieniu do maven montaż plugin:

<dependencies> 
    <dependency> 
     <groupId>com.group.id</groupId> 
     <artifactId>project-lib1</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>com.group.id</groupId> 
     <artifactId>project-lib2</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
     <type>jar</type> 
    </dependency> 
    <dependency> 
     <groupId>com.group.id</groupId> 
     <artifactId>project-lib3</artifactId> 
     <version>0.0.1-SNAPSHOT</version> 
     <type>jar</type> 
    </dependency> 
    ... and so on ... 
    </dependencies> 

    <build> 
    <plugins> 
     <plugin> 
     <artifactId>maven-jar-plugin</artifactId> 
     <configuration> 
      <archive> 
      <addMavenDescriptor>false</addMavenDescriptor> 
      <compress>true</compress> 
      <manifest> 
       <mainClass>com.group.id.Launcher1</mainClass> 
       <addClasspath>true</addClasspath> 
       <classpathPrefix>../lib/</classpathPrefix> 
      </manifest> 
      </archive> 
     </configuration> 
     </plugin> 
    </plugins> 
    </build> 

Uwaga że Dyrektywa "addClasspath" dodaje zależności projektu do ścieżki klasy. Jest to konieczne w przypadku programów uruchamiających JAR, ponieważ wyraźnie ignorują one wszystkie zmienne środowiskowe CLASSPATH.

+0

Średni jar może zawierać słoiki, ale program ładujący klasy nie ładuje słoików z słoików, więc jest to albo uber-jar albo "paczka" plików z odpowiednimi względami. lokalizacje. –

+0

dziękuję za odpowiedź ... Chcę dostarczyć 'jar', który mogę wykonać za pomocą' java -jar myProject.jar' ... To, co mi powiedziałeś, to nie dodawanie moich pakietów ... w jaki sposób Robię to? dziękuję bardzo ... Chcę również ustawić 'classpath' w słoiku ... – Alex

+0

teraz ... to dodaje moje' libs' w folderze '' '' zip', ale mój projekt nie jest tam ... wynikiem jest coś takiego: 'project-1.0.SNAPSHOT' (wewnątrz jest tylko folder lib) ** i **' META-INF' – Alex

Powiązane problemy