Maven Spring罐子包装

时间:2011-06-06 09:57:07

标签: java spring maven

我们创建了一个jar(Spring项目),我们在另一个Spring项目中使用Maven(war)

如果我们包含所需的依赖项,我们可以使用这个没问题。

如果我想确保jar包含所有它的依赖项并使用它们,最好的方法是什么?

为了避免必须包含我在使用maven程序集插件时尝试过的依赖项 肯定包含文件 - 但这些文件似乎被忽略,因为它们仍然需要作为消费项目中的依赖项 - 任何建议为什么?

汇编插件的POM详细信息

<plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.5</source>
                <target>1.5</target>
            </configuration>
        </plugin>
         <plugin>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.2.1</version>
    <configuration>
      <descriptorRefs>
        <descriptorRef>jar-with-dependencies</descriptorRef>
      </descriptorRefs>

    </configuration>
    <executions>
      <execution>
        <id>make-assembly</id> <!-- this is used for inheritance merges -->
        <phase>package</phase> <!-- bind to the packaging phase -->
        <goals>
          <goal>single</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

2 个答案:

答案 0 :(得分:1)

您可以使用maven winstone插件创建一个独立的可执行jar,其中包含war,jar等所有依赖项....

添加

<plugins>
  <plugin>
    <groupId>net.sf.alchim</groupId>
    <artifactId>winstone-maven-plugin</artifactId>
    <version>1.2</version>
    <executions>
      <execution>
        <goals>
          <goal>embed</goal>
        </goals>
        <phase>install</phase>
      </execution>
    </executions>
    <configuration>
      <filename>${project.parent.build.finalName}.jar</filename>
    </configuration>
  </plugin>
  ...
</plugins>

会将应用程序,战争和jar中的所有模块以及任何所需的依赖项捆绑在一个包含servlet引擎的可执行jar中。

这非常适合将单个可部署的捆绑包提供给Ops团队进行部署。

我建议不要创建一个包含战争使用的所有依赖项的jar。您可能最终会在类路径中找到同一类略有不同版本的多个副本。某些库有点euhhmmm,...,这种气质(hibernate和log4j想到的)。

Maven在确定要采取哪些依赖关系方面做得不错,如果事情破坏了 mvn依赖关系:树让事情变得更加清晰。当你创建一个超级jar时,你会失去这个。

如果有充分的理由这样做,我建议你可以在一个环境中严密控制类路径,如完整的J2EE服务器或使用OSGi容器。但是,要小心你的意思:这些不是没有(铁)手套的小猫。

答案 1 :(得分:0)

我使用以下程序集配置来创建一个包含所有运行时依赖性的jar:

<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
    <id>runnable</id>
    <formats>
        <format>jar</format>
    </formats>
    <includeBaseDirectory>false</includeBaseDirectory>
    <dependencySets>
        <dependencySet>
            <unpack>true</unpack>
            <scope>runtime</scope>
        </dependencySet>
    </dependencySets>
    <fileSets>
        <fileSet>
            <directory>${project.build.outputDirectory}</directory>
            <includes>
                <include>*.jar</include>
            </includes>
        </fileSet>
    </fileSets>
</assembly>