Multi-project Java build
Now let’s look at a typical multi-project build. Below is the layout for the project:
Example: Multi-project build - hierarchical layout
Build layout
multiproject/ api/ services/webservice/ shared/ services/shared/
Note: The code for this example can be found at
samples/java/multiproject
in the ‘-all’ distribution of Gradle.
Here we have four projects. Project
api
produces a JAR file which is shipped to the client to provide them a Java client for your XML webservice. Project webservice
is a webapp which returns XML. Project shared
contains code used both by api
and webservice
. Project services/shared
has code that depends on the shared
project.
To define a multi-project build, you need to create a settings file. The settings file lives in the root directory of the source tree, and specifies which projects to include in the build. It must be called
settings.gradle
. For this example, we are using a simple hierarchical layout. Here is the corresponding settings file:
Example: Multi-project build - settings.gradle file
settings.gradle
include "shared", "api", "services:webservice", "services:shared"
You can find out more about the settings file in Authoring Multi-Project Builds.
For most multi-project builds, there is some configuration which is common to all projects. In our sample, we will define this common configuration in the root project, using a technique called configuration injection. Here, the root project is like a container and the
subprojects
method iterates over the elements of this container - the projects in this instance - and injects the specified configuration. This way we can easily define the manifest content for all archives, and some common dependencies:
Example: Multi-project build - common configuration
build.gradle
subprojects { apply plugin: 'java' apply plugin: 'eclipse-wtp' repositories { mavenCentral() } dependencies { testCompile 'junit:junit:4.12' } version = '1.0' jar { manifest.attributes provider: 'gradle' } }
Notice that our sample applies the Java plugin to each subproject. This means the tasks and configuration properties we have seen in the previous section are available in each subproject. So, you can compile, test, and JAR all the projects by running
gradle build
from the root project directory.
Also note that these plugins are only applied within the
subprojects
section, not at the root level, so the root build will not expect to find Java source files in the root project, only in the subprojects.
You can add dependencies between projects in the same build, so that, for example, the JAR file of one project is used to compile another project. In the
api
build file we will add a dependency on the shared
project. Due to this dependency, Gradle will ensure that project shared
always gets built before project api
.
Example: Multi-project build - dependencies between projects
api/build.gradle
dependencies {
compile project(':shared')
}
See the section called “Disabling the build of dependency projects” for how to disable this functionality.
We also add a distribution, that gets shipped to the client:
Example: Multi-project build - distribution file
api/build.gradle
task dist(type: Zip) { dependsOn spiJar from 'src/dist' into('libs') { from spiJar.archivePath from configurations.runtime } } artifacts { archives dist }Program to print alphabets in java. Java Arithmetic Operators Example. Armstrong number program in java. Even odd program in java. Factorial program in java . Factorial program recursion in java. Fibonacci series program in java. Palindrome number program in java. Prime number program in java. Java swap two numbers without using third variable. Swap numbers program in java. Reverse number program in java. Calculate circle area using java. Calculate circle perimeter in java. Calculate rectangle area using java. Calculate rectangle perimeter java. Leap year java program code. List Even Numbers in Java. List Odd Numbers in Java. Floyd triangle in java example. Generate pyramid for a given number. Generate pyramid triangle in java. Servlets tutorial. Servlet overview. Life cycle of a servlet. Servlet interface. GenericServlet class. HttpServlet class. web.xml file. welcome-file-list. load-on-startup. RequestDispacher interface. sendRedirect. Init parameters. Context parameters. Annotation example. Session management. Cookie in servlet. Hidden field. URL rewriting. HttpSession. Servlet filter. FilterConfig interface. JSP tutorial. JSP overview. JSP Hello World. JSP Scriptlet tag. JSP Declaration tag. JSP Expression tag. JSP comment tag. JSP directives. JSP implicit objects. JSP action tags. Exception handling. Expression Language. JSTL. JSTL Core Tags. JSTL Formatting Tags. JSTL Functions. Custom tags. Custom tag with attributes. Struts tutorial. Struts 2 overview. Struts 2 Architecture. Configuration Files. Action in struts 2. Hello World example. Multi-configuration file. OGNL. Value Stack. Interceptors. execAndWait interceptor. Custom interceptor. Result type. Redirect result type. Validation framework. Built-in validators. Zero Configuration by convention approach. Zero Configuration by annotation approach. DispatchAction Functionality. Dynamic method invocation. UI tags. Control tags. Data tags. Tiles integration. Spring tutorial. Spring framework. Spring architecture. Spring ioc container. Spring bean. Spring bean scopes. Spring bean life cycle. Spring callback methods. Spring hello world. Spring bean definition inheritance. Spring bean definition template. Spring dependency injection. Spring constructor based injection. Constructor injection type ambiguities. Setter based dependency injection.
No comments:
Post a Comment