2016-10-04 1 views
2

В настоящее время у меня есть два проекта с градиентом build.gradle. Первый собирается создать файл жира, который я хотел бы включить в военный файл. Я думал, что скомпилировать его было бы достаточно, но, похоже, это не заканчивается в каталоге/lib моего военного файла. У кого-то есть мысли, я совершенно новичок в градиенте.Gradle включает в себя банку, изготовленную другим проектом на войне

dependencies { 
    compile project(':JarProject') 
    providedCompile 'javax.servlet:javax.servlet-api:3.1.0' 
    providedCompile 'org.apache.tomcat:tomcat-jsp-api:7.0.55' 

} 


war { 
    archiveName 'WarProject.war' 
    from 'JarProject/build/libs' 
    webXml = file('src/web.xml') 
} 

Требуется ли вторая война проекта в условии времени выполнения? Или я должен опубликовать банку из другого проекта в локальном репозитории maven и включить его таким образом?

ответ

2

Задача War по существу ведет себя как CopyTask в отношении вещей, которые она упаковывает на войне, поэтому полезно использовать documentation on working with files. В сущности, я думаю, что нужно что-то вроде (непроверенные):

from fileTree('JarProject/build/libs') { 
    into("lib") 
} 

Это, как говорится, с помощью mavenLocal() и публикации там также работает, но это может привести к неожиданным результатам, когда война включает в себя какую-то старую версию из местных, собирание лучше использовать банку из файловой системы, например выше.

Я думаю, что изящное решение было бы использовать multi project builds и project level dependencies. У вас были бы две сборки как отдельные проекты одной и той же сборки Gradle и добавить «проект jar» в качестве обычной зависимости compile.

+0

Спасибо за комментарий, я в настоящее время с помощью нескольких сборок проектов. Добавление 'from configurations.runtime' к созданию военного файла сбросило банку из другого проекта. Однако он также разместил все зависимости в каталоге корневой войны вместе с web-inf/lib. – user2524908

+1

Вам все равно нужно «в» web-inf/lib », чтобы разместить их в другом месте, корень войны по умолчанию. Я просто понял, что ваш первоначальный пример имеет зависимость от времени компиляции 'JarProject', поэтому он должен включать его в войну без дополнительных усилий на вашей стороне. Возможно, вам понадобится предоставить больше от вас сценарии проекта и градиента, чтобы узнать, чего не хватает. Единственная общая причина, по которой я могу найти, - это [этот ответ] (https://stackoverflow.com/questions/30238040/missing-dependencies-in-war-gradle-build-project) – Alpar

0

Как вы заявили о зависимости? Я предполагаю, что у вас есть многопроектная сборка с подпроектами A и B, с использованием плагина War. Я сделал эксперимент с использованием Gradle 2.4 и если я объявить B/build.gradle так:

apply plugin: 'war' 

dependencies { 
    compile project(':A') 
} 

затем B.war содержит WEB-INF/Библиотека/a.jar. Если вы правильно следуете соглашениям плагина Gradle War (поместите веб-ресурсы в A/src/main/webapp/и связанные с кодом ресурсы в A/src/main/resources /), тогда A.jar должен содержать то, что вы хотите.

см this