将单个jar文件中的不同java类捆绑在一个jar中

fen*_*iix 5 java dependencies maven-2 jar

基本上我所拥有的是运行liferay门户的应用服务器.我们还有自定义portlet,它们共享自定义库以及第三方库.例如dwr-3.0,几个drools jar文件,spring-webmvc,spring等.

问题是这是服务器管理的噩梦,因为当有部署时,有人总是忘记服务器中的版本等.

我们使用maven 2,我想的是做一些像maven项目那样从父pom中提取依赖关系(使用dependencyManagement),默认目标是"解开所有依赖关系并将它们放在一个独特的jar中" .这样我们就会得到一个带有标准版本的独特jar,它与其他文件一起部署而不必部署.

如果可能的话,你们知道我怎么能这样做?我一直在使用maven-assembly-plugin而没有太大的成功.如果组装是要走的路,你有一个例子给我一个kickstart吗?

提前致谢

fen*_*iix 0

最后最好的解决方案是使用 maven-shade-plugin:

(snip)
    <build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-jar-plugin</artifactId>
            <configuration>
                <finalName>${artifactId}-${version}-tmp</finalName>
            </configuration>
        </plugin>
        <plugin>
            <artifactId>maven-shade-plugin</artifactId>
            <version>1.3.1</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <shadedArtifactAttached>true</shadedArtifactAttached>
                        <shadedClassifierName>full</shadedClassifierName>
                        <artifactSet>
                            <excludes>
                                <exclude>classworlds:classworlds</exclude>
                                <exclude>junit:junit</exclude>
                                <exclude>jmock:*</exclude>
                                <exclude>org.apache.maven:lib:tests</exclude>
                                <exclude>log4j:log4j:jar:</exclude>
                            </excludes>
                        </artifactSet>
                        <filters>
                            <filter>
                                <artifact>*:*</artifact>
                                <excludes>
                                    <exclude>META-INF/*.SF</exclude>
                                    <exclude>META-INF/*.DSA</exclude>
                                    <exclude>META-INF/*.RSA</exclude>
                                </excludes>
                            </filter>
                        </filters>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
Run Code Online (Sandbox Code Playgroud)

(剪断)

阴影插件的厉害之处在于,当您包含重叠的类时,它会发出警告(一个例子是带有 aopalliance 类的 spring jar(完整的))