我们创建了一个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>
答案 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>