2014-01-17 39 views
7

我想使用Gradle从WAR的内容创建一个jar。我想要的结果很像archiveClasses = true setting of maven-war-plugin所做的。使用Gradle从webapp创建一个包含类和资源的JAR

我明白,gradle war插件似乎没有这样做(根据this stackoverflow question)。

有没有办法做到这一点手动?通过操作gradle jar任务来从WEB-INF文件夹中收集所需的部分?

当我只使用默认jar任务时,它不会从WEB-INF目录获取资源。

我想这样做的原因是因为我已经模块化了WAR并且模块依赖于WAR中的公共资源(在我的情况下为FreeMarker文件)。我希望能够根据从WAR创建的JAR来测试每个模块。

我知道我也可以创建一个“通用”的jar包含所有的资源,并且WAR和模块都依赖于这个,但是根据maven-战争插件。

+0

的摇篮WAR插件似乎并不具备这些各种功能尚未;有点令人惊讶。如果你需要在短期内,我认为暂时你会被卡在普通的JAR路线上。如果你喜欢冒险,可以尝试一些哈克,比如调用Gradle的'Exec'任务来运行Maven进程。 – Durandal

+0

这很容易实现。罐子应该包含什么? –

+0

我想让jar做到这一点正常的源代码路径(我猜sourseSet.main.output,也许sourceSet.main.resources?)加上WEB-INF的内容,不包括类和lib,因为在我的情况下有资源在那里的目录。因此,一个包含额外目录并排除另一个目录的例子会很棒! –

回答

3

因此,这里是我如何解决它(不知道这是最好的方法):

jar { 
    from ("${projectDir}/src/main/webapp/WEB-INF") { 
     include('freemarker/**') 
    } 
} 

我还发现在摇篮论坛this alternative但我不能让行resources.srcDir("src/main/webapp").exclude('images/')编译,但我真的很喜欢只是添加到jar任务的默认资源目录的想法。 编辑:我想我上面的第一个例子是一样好。

1

您可以添加这包括在创建的jar文件的根都的src/main /资源和SCR /主/ web应用:

sourceSets { 
    main { 
     resources { 
      srcDirs "src/main/resources", "src/main/webapp" 
     } 
    } 
} 
+0

我应该在jar任务中使用这个吗? –

+0

@CarlPritchett不,应该在gradle文件的根目录下! – oae

相关问题