Difference between revisions of "GCube Project Layout"
Manuele.simi (Talk | contribs) (→Project Layout Explained) |
Manuele.simi (Talk | contribs) (→Multi-Module Project Layout) |
||
Line 26: | Line 26: | ||
= Multi-Module Project Layout = | = Multi-Module Project Layout = | ||
Maven supports project aggregation in addition to project inheritance. Multiple software components can be built by independent units called ''modules''. | Maven supports project aggregation in addition to project inheritance. Multiple software components can be built by independent units called ''modules''. | ||
− | In a multi-module project layout, the root project folder contains the parent pom.xml and the *.md files, while each sub module's folder (sub projects) contains its own instance of the standard layout (see previous section). | + | In a multi-module project layout, the root project folder contains the parent pom.xml and the *.md files, while each sub module's folder (sub projects) contains its own instance of the standard layout (see previous section). The layout is repeated, because the module is an independently distributed unit of software. |
<pre> | <pre> | ||
- project folder/ | - project folder/ |
Revision as of 13:51, 27 July 2020
Contents
Standard Project Layout
gCube projects for software components are primarily developed with the Java language using Maven as build automation tool. The layout of a project mostly reflects the common conventions used for Maven with some variations.
- project folder/ |-pom.xml |-src/ |-main/ |-java/ |-webapp/ |-resources/ |-test/ |-java/ |-resources/ |-gcube/ |-extra-resources |-WEB-INF/ |-META-INF/ |-CHANGELOG.md |-LICENSE.md |-README.md |-FUNDING.md
Multi-Module Project Layout
Maven supports project aggregation in addition to project inheritance. Multiple software components can be built by independent units called modules. In a multi-module project layout, the root project folder contains the parent pom.xml and the *.md files, while each sub module's folder (sub projects) contains its own instance of the standard layout (see previous section). The layout is repeated, because the module is an independently distributed unit of software.
- project folder/ |-pom.xml |-ModuleA/ |-src/ |-... |-gcube/ |-... |-CHANGELOG.md |-LICENSE.md |-README.md |-FUNDING.md |-ModuleB/ |-src/ |-... |-gcube/ |-... |-CHANGELOG.md |-LICENSE.md |-README.md |-FUNDING.md |-CHANGELOG.md |-ModuleC/ |-src/ |-... |-gcube/ |-... |-CHANGELOG.md |-LICENSE.md |-README.md |-FUNDING.md |-CHANGELOG.md |-CHANGELOG.md |-LICENSE.md |-README.md |-FUNDING.md
Project Layout Explained
File or Directory | Role |
---|---|
pom.xml | an XML file that contains information about the project and configuration details used by Maven to build the project |
src/main/java/ | application source code |
src/main/webapp/ | web application source code |
src/main/resources/ | resources packaged at root level in the output jar/war |
src/test/java/ | source code for tests |
src/test/resources/ | resources available on the test classpath |
gcube/extra-resources/WEB-INF/ | additional resources to add to the WEB-INF dir in the output jar/war. These resources are filtered(*) |
gcube/extra-resources/META-INF/ | additional resources to add to the META-INF dir in the output jar/war. These resources are filtered(*) |
CHANGELOG.md | a curated, chronologically ordered list of notable changes for each version of the project |
LICENSE.md | project's license |
README.md | a quick and simple way for other users to learn more about the project and how to use it |
FUNDING.md | sponsors and funding options for the project |
(*) For an explanation of filtering see https://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html.
File Templates
File MANIFEST.MF
A manifest file is automatically created and added to the META-INF folder of the output jar/war.
This example shows an instance of the content for the manifest:
Manifest-Version: 1.0 SCM-Revision-URL: https://code-repo.d4science.org/gCubeSystem/gx-rest/commit/8948534883a3b0998bb4487f12965122d22863af Implementation-Title: gCube eXtensions to JAX-RS Implementation-Version: 1.1.3 SCM-Revision: 8948534883a3b0998bb4487f12965122d22863af Specification-Title: gCube eXtensions to JAX-RS Build-Time: 20200725-203436 Build-Jdk-Spec: 1.8 Created-By: Maven Archiver 3.4.0 Specification-Version: 1.1 SCM-Branch: master