2012-04-30 52 views
0

我想将所有我的.class从一个依赖jar包括到WAR classes/目录中,而不是在lib/目录中有一个Jar。构建带有解压缩JAR依赖关系的WAR?

我:

my-webapp/ 
    ... 
    WEB-INF/ 
    lib/ 
     mylib-1.0-SNAPSHOT.jar 

我想:

my-webapp/ 
    ... 
    WEB-INF/ 
    classes/ 
     mylib-1.0-SNAPSHOT (all **.class**) 

我也看到Maven的依赖,插件但它要求我的罐子被安装到本地或远程存储库。但是mylib-1.0-SNAPSHOT.jar在我的WAR之前编译是合理的,如果我打电话给mvn package,那就失败了!

那么,如何解开我的jar依赖到war类呢? (对于罐子类似maven-shade-plugin

+1

在Web应用程序中将类改为jar会有什么意义? – jddsantaella

+0

由于Jar包含我的服务的公共类,并且此webapp包含特定的类。我有多个webapps使用相同的类,所以我已经将它们打包到Jar依赖项中。对于没有代码重复!你认为这是正确的方式吗? – Aure77

+0

如果在'WEB-INF/lib'目录中,您仍然可以使用通用jar中的类; “WEB-INF/lib”中的所有内容都将在Web应用程序的类路径中结束。 – user944849

回答

0

我想在通信中写这个,但文字太长。

对不起,我没有明白你的意思。您有多个共享类的Web应用程序,因此您已将这些常用类打包为JAR,现在您可以分发该jar并避免代码重复。那没问题。在这一点上,对于Webapp,在/ WEB-INF/classes中或者在/ WEB-INF/lib /中作为jar的一部分没有区别,webapp可以在两种情况下使用这些类。

有了Maven,你应该有n个项目。一个用于你的普通jar,然后,每个webapp有一个(普通jar是依赖项)。在为其中一个Web应用程序构建WAR之前,如果常见的类已更改,则应首先安​​装(在公用存储库中)jar:mvn install。一旦安装了jar,您可以构建您的WAR:mvn war:war

+0

好吧,但这个问题是,当我有一些类取决于另一个相同的包。将这些类分离为Jar for commons类和* classes文件夹*用于我的具体数据对我来说并不自然。而且,我的项目实际上是用Ant构建的,改变了Maven改变我的可交付成果(jar,war,ear)的结构......但是如果没有*选项*来设置,那么确定。 – Aure77

+0

如果现在,你已经被要求使用Maven,而不是Ant,我建议我上面写的是:常见类的常见jar和特定代码的'classes'文件夹(这是我们特定webapp应用程序的特定源代码)。当你尝试按照惯例做一些事情时,Maven并不是那么好,所以尽量避免它。 – jddsantaella