The new model for the new modello. Not tested for the moment.

git-svn-id: https://svn.apache.org/repos/asf/maven/components/trunk@163158 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Emmanuel Venisse 2004-09-24 14:57:07 +00:00
parent 6e812f1d2e
commit bea17db376
1 changed files with 567 additions and 181 deletions

View File

@ -1,4 +1,3 @@
<?xml version="1.0"?>
<!--
|
| o add specification element to a field, this would be more a technical description of
@ -21,10 +20,14 @@
<id>maven</id>
<name>Maven</name>
<description>Maven's model for Java project.</description>
<packageName>org.apache.maven.model</packageName>
<root>Model</root>
<defaults>
<default>
<key>package</key>
<value>org.apache.maven.model</value>
</default>
</defaults>
<classes>
<class>
<class rootElement="true">
<name>Model</name>
<version>3.0.0+</version>
<fields>
@ -62,7 +65,9 @@
<name>id</name>
<version>3.0.0</version>
<required>true</required>
<description>The primary id for your project.</description>
<description>
The id of the project.
</description>
<type>String</type>
</field>
<field>
@ -147,13 +152,17 @@
<name>issueManagement</name>
<version>4.0.0</version>
<description>The project's issue management information.</description>
<type>IssueManagement</type>
<association>
<type>IssueManagement</type>
</association>
</field>
<field>
<name>ciManagement</name>
<version>4.0.0</version>
<description>The project's continuous integration management information.</description>
<type>CiManagement</type>
<association>
<type>CiManagement</type>
</association>
</field>
<field>
<name>inceptionYear</name>
@ -185,66 +194,45 @@
<version>3.0.0</version>
<description>The FQDN of the host where the project's artifacts are uploaded.</description>
<type>String</type>
<comment>This naming is inconsistent and distriubtion should occur from a repository structure.</comment>
<comment>This naming is inconsistent and distribution should occur from a repository structure.</comment>
</field>
<field>
<name>distributionDirectory</name>
<version>3.0.0</version>
<description>The directory on the distribution host where artifacts are placed when uploaded.</description>
<type>String</type>
<comment>This naming is inconsistent and distriubtion should occur from a repository structure.</comment>
<comment>This naming is inconsistent and distribution should occur from a repository structure.</comment>
</field>
<field>
<name>scm</name>
<version>4.0.0</version>
<description>Specification for the SCM use by the project.</description>
<type>Scm</type>
</field>
<field>
<name>repository</name>
<version>3.0.0</version>
<description>Specification for the SCM use by the project.</description>
<type>Repository</type>
<comment>This element needs to be renamed as it conflicts with the existing notion of repositories in Maven.</comment>
</field>
<field>
<name>build</name>
<version>3.0.0+</version>
<required>true</required>
<description>Information required to build the project.</description>
<type>Build</type>
</field>
<field>
<name>organization</name>
<version>3.0.0+</version>
<description>
This element describes various attributes of the organziation to
which the project belongs. These attributes are utilized when
documentation is created (for copyright notices and links).
</description>
<type>Organization</type>
</field>
<field>
<name>distributionManagement</name>
<version>4.0.0</version>
<description>Distribution information for a project.</description>
<type>DistributionManagement</type>
</field>
</fields>
<associations>
<association>
<name>repositories</name>
<version>4.0.0</version>
<description>The lists of the remote repositories</description>
<to>Repository</to>
</association>
<association>
<association>
<type>Repository</type>
<multiplicity>*</multiplicity>
</association>
</field>
<field>
<name>pluginRepositories</name>
<version>4.0.0</version>
<description>The lists of the remote repositories for discovering plugins</description>
<association>
<type>Repository</type>
<multiplicity>*</multiplicity>
</association>
<comment>This may be removed or relocated in the near future. It is undecided whether plugins really need a remote repository set of their own.</comment>
</field>
<field>
<name>mailingLists</name>
<version>3.0.0+</version>
<description>The mailing lists for the project.</description>
<to>MailingList</to>
</association>
<association>
<association>
<type>MailingList</type>
<multiplicity>*</multiplicity>
</association>
</field>
<field>
<name>developers</name>
<version>3.0.0+</version>
<description>
@ -254,9 +242,12 @@
additional elements (described below). The auto-generated site
documentation references this information.
</description>
<to>Developer</to>
</association>
<association>
<association>
<type>Developer</type>
<multiplicity>*</multiplicity>
</association>
</field>
<field>
<name>contributors</name>
<version>3.0.0+</version>
<description>
@ -266,9 +257,12 @@
elements (described below). The auto-generated site documentation
references this information.
</description>
<to>Contributor</to>
</association>
<association>
<association>
<type>Contributor</type>
<multiplicity>*</multiplicity>
</association>
</field>
<field>
<name>dependencies</name>
<version>3.0.0+</version>
<description>
@ -277,10 +271,27 @@
<code>dependency</code> element, which is then described by
additional elements (described below).
</description>
<association>
<type>Dependency</type>
<multiplicity>*</multiplicity>
</association>
<comment>These should ultimately only be compile time dependencies when transitive dependencies come into play.</comment>
<to>Dependency</to>
</association>
<association>
</field>
<field>
<name>overrides</name>
<version>4.0.0</version>
<description>
This element describes all of the dependency overrides for a
project. Each dependency is described by a
<code>override</code> element, which is then described by
additional elements (described below).
</description>
<association>
<type>Override</type>
<multiplicity>*</multiplicity>
</association>
</field>
<field>
<name>licenses</name>
<version>3.0.0+</version>
<description>
@ -290,27 +301,39 @@
references this information. Projects should only list the license(s) that
applies to the project and not the licenses that apply to dependencies.
</description>
<to>License</to>
</association>
<association>
<association>
<type>License</type>
<multiplicity>*</multiplicity>
</association>
</field>
<field>
<name>versions</name>
<version>3.0.0</version>
<description>The released versions of the project.</description>
<to>Version</to>
</association>
<association>
<association>
<type>Version</type>
<multiplicity>*</multiplicity>
</association>
</field>
<field>
<name>branches</name>
<version>3.0.0</version>
<description>The SCM branches create for the project.</description>
<to>Branch</to>
</association>
<association>
<association>
<type>Branch</type>
<multiplicity>*</multiplicity>
</association>
</field>
<field>
<name>packageGroups</name>
<version>3.0.0+</version>
<description>Package groups required for complete javadocs.</description>
<to>PackageGroup</to>
</association>
<association>
<association>
<type>PackageGroup</type>
<multiplicity>*</multiplicity>
</association>
</field>
<field>
<name>reports</name>
<version>3.0.0+</version>
<description>
@ -321,11 +344,117 @@
reports will be included in the navigation bar for browsing in
the order they are specified.
</description>
<to>String</to>
</association>
</associations>
<association>
<type>String</type>
<multiplicity>*</multiplicity>
</association>
</field>
<field>
<name>scm</name>
<version>4.0.0</version>
<description>Specification for the SCM use by the project.</description>
<association>
<type>Scm</type>
</association>
</field>
<field>
<name>repository</name>
<version>3.0.0</version>
<description>Specification for the SCM use by the project.</description>
<association>
<type>Repository</type>
</association>
<comment>This element needs to be renamed as it conflicts with the existing notion of repositories in Maven.</comment>
</field>
<field>
<name>build</name>
<version>3.0.0+</version>
<required>true</required>
<description>Information required to build the project.</description>
<association>
<type>Build</type>
</association>
</field>
<field>
<name>organization</name>
<version>3.0.0+</version>
<description>
This element describes various attributes of the organziation to
which the project belongs. These attributes are utilized when
documentation is created (for copyright notices and links).
</description>
<association>
<type>Organization</type>
</association>
</field>
<field>
<name>distributionManagement</name>
<version>4.0.0</version>
<description>Distribution information for a project.</description>
<association>
<type>DistributionManagement</type>
</association>
</field>
<field>
<name>local</name>
<version>4.0.0</version>
<required>false</required>
<description>Local configuration information.</description>
<association>
<type>Local</type>
</association>
</field>
<!-- @todo long run 4.0.0 may not need properties, with the parameters being specified
for the plugin directly -->
<field>
<name>properties</name>
<version>3.0.0+</version>
<description>
Properties about the project. This allows you to configure your project and the
plugins it uses.
</description>
<type>Properties</type>
<association mapStyle="inline">
<type>String</type>
<multiplicity>*</multiplicity>
</association>
</field>
<field>
<name>preGoals</name>
<version>4.0.0</version>
<description>Set of decorator(s) injected before the target goal(s).</description>
<association>
<type>PreGoal</type>
<multiplicity>*</multiplicity>
</association>
</field>
<field>
<name>postGoals</name>
<version>4.0.0</version>
<description>Set of decorator(s) injected after the target goal(s).</description>
<association>
<type>PostGoal</type>
<multiplicity>*</multiplicity>
</association>
</field>
</fields>
<!-- We need this because we can't use package as a field name. -->
<!-- @todo this means it is undocumented. Should we instead provide an optional field name so package can be mapped to the field packageName? -->
<codeSegments>
<codeSegment>
<version>3.0.0</version>
<code>
public void setVersion(String version)
{
this.currentVersion = version;
}
public String getVersion()
{
return currentVersion;
}
</code>
</codeSegment>
<codeSegment>
<version>3.0.0+</version>
<code>
@ -361,39 +490,12 @@
}
</code>
</codeSegment>
<!--
<codeSegment>
<version>3.0.0</version>
<code>
public void setId( String id )
{
int i = id.indexOf( "+" );
int j = id.indexOf( ":" );
if ( i > 0 )
{
setGroupId( id.substring( 0, i ) );
setArtifactId( id.replace( '+', '-' ) );
}
else if ( j > 0 )
{
setGroupId( id.substring( 0, j ) );
setArtifactId( id.substring( j + 1 ) );
}
else
{
setGroupId( id );
setArtifactId( id );
}
}
</code>
</codeSegment>
-->
</codeSegments>
</class>
<!-- @todo: is any of this too CVS specific? Investigate other SCMs -->
<class>
<name>Branch</name>
<version>3.0.0</version>
<version>3.0.0+</version>
<description>
This element describes each of the branches of the
project. Each branch is described by a
@ -403,7 +505,8 @@
<fields>
<field>
<name>tag</name>
<version>3.0.0</version>
<version>3.0.0+</version>
<required>true</required>
<description>
The branch tag in the version control system
(e.g. cvs) used by the project for the source
@ -412,6 +515,24 @@
</description>
<type>String</type>
</field>
<field>
<name>description</name>
<version>4.0.0</version>
<description>
A description of the branch and its strategy.
</description>
<type>String</type>
</field>
<field>
<name>lastMergeTag</name>
<version>4.0.0</version>
<description>
This is the tag in the version control system that was last used
to merge from the branch to the current codebase. Future merges
should merge only the changes from this tag to the next.
</description>
<type>String</type>
</field>
</fields>
</class>
<class>
@ -471,13 +592,56 @@
</description>
<type>String</type>
</field>
<field>
<name>integrationUnitTestSourceDirectory</name>
<version>3.0.0+</version>
<description>
This element specifies a directory containing integration test
sources of the project.
</description>
<type>String</type>
</field>
<field>
<name>sourceModifications</name>
<version>3.0.0+</version>
<required>true</required>
<description>
This element describes all of the sourceModifications associated with a
project. Each source modification is described by a
<code>sourceModification</code> element, which is then described by
additional elements (described below). These modifications are used
to exclude or include various source depending on the environment
the build is running in.
</description>
<association>
<type>SourceModification</type>
<multiplicity>*</multiplicity>
</association>
</field>
<field>
<name>unitTest</name>
<version>3.0.0+</version>
<required>true</required>
<description>This element specifies unit tests associated with the project.</description>
<type>UnitTest</type>
<defaultValue>new UnitTest()</defaultValue>
<association>
<type>UnitTest</type>
</association>
</field>
<field>
<name>resources</name>
<version>3.0.0+</version>
<description>
This element describes all of the resources associated with a project or unit tests.
Each resource is described by a resource element, which is then described by additional
elements (described
<a href="#resource">below</a>). These resources are used to
complete the jar file or to run unit test.
</description>
<association>
<type>Resource</type>
<multiplicity>*</multiplicity>
</association>
</field>
<field>
<name>directory</name>
@ -495,6 +659,16 @@
</description>
<type>String</type>
</field>
<field>
<name>finalName</name>
<version>4.0.0</version>
<description>
The filename (including an extension, but with no path information) that the produced artifact
will be called. The default value is artifactId-version.extension (where extension is derived from
type).
</description>
<type>String</type>
</field>
<field>
<name>testOutput</name>
<version>4.0.0</version>
@ -504,36 +678,6 @@
<type>String</type>
</field>
</fields>
<associations>
<association>
<name>sourceModifications</name>
<version>3.0.0+</version>
<!--
<required>true</required>
-->
<description>
This element describes all of the sourceModifications associated with a
project. Each source modification is described by a
<code>sourceModification</code> element, which is then described by
additional elements (described below). These modifications are used
to exclude or include various source depending on the environment
the build is running in.
</description>
<to>SourceModification</to>
</association>
<association>
<name>resources</name>
<version>3.0.0+</version>
<description>
This element describes all of the resources associated with a project or unit tests.
Each resource is described by a resource element, which is then described by additional
elements (described
<a href="#resource">below</a>). These resources are used to
complete the jar file or to run unit test.
</description>
<to>Resource</to>
</association>
</associations>
</class>
<class>
<name>CiManagement</name>
@ -588,16 +732,6 @@
<type>String</type>
</field>
<field>
<name>timezone</name>
<version>3.0.0+</version>
<description>
The timezone the contributor is in. This is a number in the range -14 to 14.
</description>
<type>String</type>
</field>
</fields>
<associations>
<association>
<name>roles</name>
<version>3.0.0+</version>
<description>
@ -606,9 +740,20 @@
<code>role</code> element, the body of which is a
role name.
</description>
<to>String</to>
</association>
</associations>
<association>
<type>String</type>
<multiplicity>*</multiplicity>
</association>
</field>
<field>
<name>timezone</name>
<version>3.0.0+</version>
<description>
The timezone the contributor is in. This is a number in the range -14 to 14.
</description>
<type>String</type>
</field>
</fields>
</class>
<class>
<name>Dependency</name>
@ -619,7 +764,7 @@
<version>3.0.0</version>
<required>true</required>
<description>
The id of the dependency.
The id of the project.
</description>
<type>String</type>
</field>
@ -686,10 +831,7 @@
<type>String</type>
<defaultValue>jar</defaultValue>
</field>
</fields>
<associations>
<!-- Trygve: Properties is a TODO in modello
<association>
<field>
<name>properties</name>
<version>3.0.0+</version>
<description>
@ -700,11 +842,23 @@
in
<code>WEB-INF/lib</code>. For example syntax, check the war plugin docs.
</description>
<to>java.util.Properties</to>
</association>
-->
</associations>
<type>Properties</type>
<association mapStyle="inline">
<type>String</type>
<multiplicity>*</multiplicity>
</association>
</field>
</fields>
<codeSegments>
<codeSegment>
<version>3.0.0+</version>
<code>
public String toString()
{
return groupId + "/" + type + "s:" + artifactId + "-" + version;
}
</code>
</codeSegment>
<codeSegment>
<version>4.0.0</version>
<code>
@ -712,15 +866,136 @@
{
return groupId + ":" + artifactId + ":" + type + ":" + version;
}
public String toString()
{
return groupId + "/" + type + "s:" + artifactId + "-" + version;
}
</code>
</codeSegment>
<codeSegment>
<version>3.0.0</version>
<code><![CDATA[
public String getKey()
{
return getId() + ":" + getType();
}
public String getArtifactDirectory()
{
return getGroupId();
}
public String getArtifact()
{
// If the jar name has been explicty set then use that. This
// is when the <jar/> element is explicity used in the POM.
if ( getJar() != null)
{
return getJar();
}
return getArtifactId() + "-" + getVersion() + "." + getExtension();
}
public String getExtension()
{
if ("ejb".equals(getType()) || "plugin".equals(getType()) || "aspect".equals(getType())) return "jar";
return getType();
}
public boolean isAddedToClasspath()
{
return ("jar".equals(getType()) || "ejb".equals(getType()));
}
public boolean isPlugin()
{
return ("plugin".equals(getType()));
}
public String getProperty( String property )
{
return getProperties().getProperty( property );
}
public boolean equals( Object o )
{
if ( this == o )
{
return true;
}
if ( !( o instanceof Dependency ) )
{
return false;
}
Dependency d = (Dependency) o;
return getId().equals( d.getId() );
}
public int hashCode()
{
return getId().hashCode();
}
]]></code>
</codeSegment>
</codeSegments>
</class>
<class>
<name>Override</name>
<version>4.0.0</version>
<fields>
<field>
<name>groupId</name>
<version>4.0.0</version>
<required>true</required>
<description>
The project group that produced the dependency, e.g.
<code>geronimo</code>.
</description>
<type>String</type>
</field>
<field>
<name>artifactId</name>
<version>4.0.0</version>
<required>true</required>
<description>
The unique id for an artifact produced by the project group, e.g.
<code>germonimo-jms</code>
</description>
<type>String</type>
</field>
<field>
<name>type</name>
<version>4.0.0</version>
<description>
Other known recognised dependency types are:
<code>ejb</code> and
<code>plugin</code>.
</description>
<type>String</type>
<defaultValue>jar</defaultValue>
</field>
<!-- @todo this doesn't consider forced-version overrides, and do we need the version to override? -->
<field>
<name>version</name>
<version>4.0.0</version>
<required>true</required>
<description>
The version of the dependency., e.g.
<code>3.2.1</code>
</description>
<type>String</type>
</field>
<field>
<name>file</name>
<version>4.0.0</version>
<required>true</required>
<description>
The filename of the dependency that will be used to override the one from the repository, e.g.
<code>lib/non-distributable-code-1.3.jar</code>
</description>
<type>String</type>
</field>
</fields>
</class>
<class>
<superClass>Contributor</superClass>
<name>Developer</name>
@ -763,13 +1038,17 @@
<name>repository</name>
<version>4.0.0</version>
<description>Information needed for deploying to remote repository artifacts generated by the project</description>
<type>Repository</type>
<association>
<type>Repository</type>
</association>
</field>
<field>
<name>site</name>
<description>Information needed for deploying website files of the project.</description>
<version>4.0.0</version>
<type>Site</type>
<association>
<type>Site</type>
</association>
</field>
</fields>
</class>
@ -850,11 +1129,32 @@
</description>
<type>String</type>
</field>
<field>
<name>post</name>
<version>4.0.0</version>
<description>
The email address or link that can be used to post to
the mailing list. If this is an email address, a
<code>mailto:</code> link will automatically be created
when the documentation is created.
</description>
<type>String</type>
</field>
<field>
<name>archive</name>
<version>3.0.0+</version>
<description>The link to a URL where you can browse the archive.</description>
<type>String</type>
<comment>This should probably be removed from 4.0.0 before alpha-1</comment>
</field>
<field>
<name>archives</name>
<version>4.0.0</version>
<description>The link to a URL where you can browse the archive.</description>
<association>
<type>String</type>
<multiplicity>*</multiplicity>
</association>
</field>
</fields>
<comment>
@ -917,23 +1217,30 @@
<class>
<name>PatternSet</name>
<version>3.0.0+</version>
<associations>
<association>
<fields>
<field>
<name>includes</name>
<version>3.0.0+</version>
<description>the description</description>
<to>String</to>
</association>
<association>
<association>
<type>String</type>
<multiplicity>*</multiplicity>
</association>
</field>
<field>
<name>excludes</name>
<version>3.0.0+</version>
<description>the description</description>
<to>String</to>
</association>
</associations>
<association>
<type>String</type>
<multiplicity>*</multiplicity>
</association>
</field>
</fields>
<codeSegments>
<codeSegment>
<version>3.0.0+</version>
<!-- @todo: should these be built somewhere so they are only created once, and can be modified? -->
<code>
public List getDefaultExcludes()
{
@ -1058,6 +1365,15 @@
<description>The URL to the project's browsable CVS repository.</description>
<type>String</type>
</field>
<field>
<name>branches</name>
<version>4.0.0</version>
<description>The SCM branches that are currently active for the project. These should only be those forked from the current branch or trunk that are intended to be used.</description>
<association>
<type>String</type>
<multiplicity>*</multiplicity>
</association>
</field>
</fields>
</class>
<class>
@ -1090,7 +1406,7 @@
<name>filtering</name>
<version>3.0.0+</version>
<description>Describe if resources are filtered or not.</description>
<type>String</type>
<type>boolean</type>
<defaultValue>false</defaultValue>
</field>
</fields>
@ -1124,14 +1440,17 @@
<name>UnitTest</name>
<version>3.0.0+</version>
<superClass>PatternSet</superClass>
<associations>
<association>
<fields>
<field>
<name>resources</name>
<version>3.0.0+</version>
<description>the description</description>
<to>Resource</to>
</association>
</associations>
<association>
<type>Resource</type>
<multiplicity>*</multiplicity>
</association>
</field>
</fields>
</class>
<class>
<name>Version</name>
@ -1268,6 +1587,73 @@
</field>
</fields>
</class>
<class>
<name>GoalDecorator</name>
<version>4.0.0</version>
<fields>
<field>
<name>name</name>
<version>4.0.0</version>
<description>The target goal which should be decorated.</description>
<type>String</type>
</field>
<field>
<name>attain</name>
<version>4.0.0</version>
<description>
The goal which should be injected into the execution chain.
</description>
<type>String</type>
</field>
</fields>
</class>
<class>
<superClass>GoalDecorator</superClass>
<name>PreGoal</name>
<version>4.0.0</version>
<fields></fields>
</class>
<class>
<superClass>GoalDecorator</superClass>
<name>PostGoal</name>
<version>4.0.0</version>
<fields></fields>
</class>
<!-- @todo should modello take a parameter/code segment that will forbid the
specification of this in a project other than the user pom? -->
<class>
<name>Local</name>
<version>4.0.0</version>
<description>
Local contains the information that is specific to the user's
local environment. This would only be expected in a user or site pom,
not a project POM.
</description>
<fields>
<!-- @todo should local repository actually be part of the <repositories/> element, or be of repository type? -->
<field>
<name>repository</name>
<version>4.0.0</version>
<description>
The local repository that contains downloaded artifacts.
</description>
<type>String</type>
<!-- @todo systemProperty tag (maven.repo.local value) should be supported by modello -->
</field>
<field>
<name>online</name>
<version>4.0.0</version>
<description>
Whether to run the build online. If not, no remote repositories are consulted for plugins or dependencies
and this configuration may be used by other plugins requiring online access.
</description>
<type>boolean</type>
<defaultValue>true</defaultValue>
<!-- @todo systemProperty tag (maven.online value) should be supported by modello -->
</field>
</fields>
</class>
</classes>
</model>