Comment: Eclipse, Maven installer construire pot avec dépendances

J'utilise Eclipse Maven (m2e) inside Eclipse et j'exécute mon projet comme ceci:

Mon pom.xml ressemble à ceci:

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

après que j'ai lancé l'installation maven fonctionne...

Maven exécuter les configurations:

maven install deploy jar

le problème est que mon généré .jar il n'a pas les dépendances incluses.... Comment J'ai configuré pom.xml pour inclure toutes mes dépendances dans le format .jar et non déballé.. parce qu'il semble que les déballés ne fonctionnent pas correctement...

pour être sûr qu'y compris tous les pots est ok.. J'ai téléchargé et ajouté chaque bibliothèque dans le dossier jar 's /lib et le jar est en cours d'exécution... si.. ma seule question Est: Comment puis-je configurer pom.xml pour ajouter toutes mes dépendances dans le format jar ?

j'ai tout essayé méthodes:

  1. assembly:assembly
  2. assembly:single
  3. assembly:single avec mon descripteur (un fichier assemble.xml ) mais ça ne marchait pas
  4. maven copy dependencies plugin mais ne fonctionne toujours pas avec Eclipse Maven - m2e

Je n'ai plus de solutions... quelqu'un peut-il me dire comment ajouter mes dépendances dans jar? Je ne peux pas croire que maven est si complexe et je ne trouve pas de réponse à ma question partout..

Merci d'avance

18
demandé sur Alex 2012-04-05 01:31:13

1 réponses

il y a plusieurs façons de faire cela.

1) si vous voulez un Uber-jar (repacké avec toutes les dépendances), regardez l'utilisation et la configuration du 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>

cela va défaire toutes les dépendances et les fusionner dans un fichier JAR.



2) si vous voulez offrir un bundle (zip, tar.gz, etc) avec les fichiers JAR non emballés dans le paquet (peut-être sous lib/) alors vous devez regarder dans le 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>

noter que cela nécessite un descripteur d'assemblage src/main/assembly/dist.xml et l'exemple ressemble à ceci:

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

et puisque vous assemblez maintenant des dépendances, vous avez mieux défini la dépendance dans la pom.xml, comme:

  <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) si vous livrez un paquet avec un lanceur de fichier JAR exécutable, vous devrez probablement ajouter une configuration maven-jar-plugin en plus de la configuration maven-assembly-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>

notez que la directive" addClasspath " Ajoute les dépendances du projet au chemin de classe. C'est nécessaires pour les lanceurs JAR, car ils ignorent explicitement toutes les variables D'environnement CLASSPATH.

47
répondu Edwin Buck 2015-06-05 11:47:37