#
# Gitblit project descriptor
#

# Specify minimum Moxie version required to build
requires: 0.9.4

# Project Metadata
name: Gitblit
description: pure Java Git solution
groupId: com.gitblit
artifactId: gitblit
version: 1.7.0-SNAPSHOT
inceptionYear: 2011

# Current stable release
releaseVersion: 1.6.2
releaseDate: 2014-10-28

# Project urls
url: 'http://gitblit.com'
issuesUrl: 'http://code.google.com/p/gitblit/issues/list'
socialNetworkUrl: 'https://plus.google.com/114464678392593421684'
forumUrl: 'http://groups.google.com/group/gitblit'
mavenUrl: 'http://gitblit.github.io/gitblit-maven'

# Licenses section included for POM generation
licenses:
- {
    name: Apache ASL v2.0
    url: 'http://www.apache.org/licenses/LICENSE-2.0.html'
  }

# Developers section included for POM generation
developers:
- {
  id: james
  name: James Moger
  url: 'https://plus.google.com/u/0/116428776452027956920'
  organization: VAS
  organizationUrl: 'http://www.vas.com'
  roles: developer
  }

# SCM section included for POM generation
scm: {
  connection: 'scm:git:git://github.com/gitblit/gitblit.git'
  developerConnection: 'scm:git:https://github.com/gitblit/gitblit.git'
  url: 'https://github.com/gitblit/gitblit'
  tag: HEAD
  }

# Mainclass is used for setting jar manifests and using the mx:run target
mainclass: com.gitblit.GitBlitServer

# Moxie supports multiple source directories and allows you to assign
# a scope to each directory.
sourceDirectories:
- compile 'src/main/java'
- compile 'src/main/bugtraq'
- compile 'src/main/gen' apt
- test 'src/test/java'
- test 'src/test/bugtraq'
# Moxie supports one site-scoped directory for mx:doc
- site 'src/site'

resourceDirectories:
- compile 'src/main/resources'
- site 'src/site/resources'

# compile for Java 7 class format
tasks: {
	'mx:javac' : {
        source: 1.7
        target: 1.7
        compiler: javac1.7
        encoding: UTF-8
        # stop complaints about bootstrap classpath when compiling with Java 7
        compilerArgs: '-Xlint:-options'
    }
}

# Generate Eclipse project files.
# Generate IntelliJ IDEA module files.
# Generate a distribution Maven POM (not suitable for building with Maven).
apply: eclipse, intellij, pom

# Copy all retrieved dependencies to the "ext" directory.
# Generated IDE settings (.classpath, etc) will use the artifacts
# from this project-relative directory. This allows the IDE settings
# to be version-controlled and shared.
dependencyDirectory: ext

# Register the Eclipse JGit Maven repositories
registeredRepositories:
- { id: eclipse, url: 'http://repo.eclipse.org/content/groups/releases' }
- { id: eclipse-snapshots, url: 'http://repo.eclipse.org/content/groups/snapshots' }
- { id: gitblit, url: 'http://gitblit.github.io/gitblit-maven' }

# Source all dependencies from the following repositories in the specified order
repositories: central, eclipse-snapshots, eclipse, gitblit

# Convenience properties for dependencies
properties: {
  jetty.version  : 9.2.10.v20150310
  slf4j.version  : 1.7.10
  wicket.version : 1.4.21
  lucene.version : 4.10.0
  jgit.version   : 4.0.1.201506240215-r
  groovy.version : 2.4.1
  bouncycastle.version : 1.51
  selenium.version : 2.28.0
  wikitext.version : 1.4
  sshd.version: 0.14.0
  mina.version: 2.0.9
  guice.version : 4.0-beta5
  # Gitblit maintains a fork of guice-servlet
  guice-servlet.version : 4.0-gb1
  }

# Dependencies
#
#   May be tagged with ":label" notation to group dependencies.
#
#   "@extension" fetches the artifact with the specified extension
#   and ignores all transitive dependencies.
#
#   "!groupId" or "!groupId:artifactId" excludes all matching transitive
#   dependencies in that dependency's dependency graph.
#

dependencies:
- compile 'com.google.inject:guice:${guice.version}' :war :fedclient
- compile 'com.google.inject.extensions:guice-servlet:${guice-servlet.version}' :war
- compile 'com.google.guava:guava:18.0' :war :fedclient
- compile 'com.intellij:annotations:12.0' :war
- compile 'log4j:log4j:1.2.17' :war :fedclient
- compile 'org.slf4j:slf4j-api:${slf4j.version}' :war :fedclient
- compile 'org.slf4j:slf4j-log4j12:${slf4j.version}' :war :fedclient
- compile 'com.sun.mail:javax.mail:1.5.1' :war
- compile 'javax.servlet:javax.servlet-api:3.1.0' :fedclient
- compile 'org.eclipse.jetty.aggregate:jetty-all:${jetty.version}' @jar
- compile 'org.apache.wicket:wicket:${wicket.version}' :war !org.mockito
- compile 'org.apache.wicket:wicket-auth-roles:${wicket.version}' :war !org.mockito
- compile 'org.apache.wicket:wicket-extensions:${wicket.version}' :war !org.mockito
- compile 'org.apache.lucene:lucene-core:${lucene.version}' :war :fedclient
- compile 'org.apache.lucene:lucene-analyzers-common:${lucene.version}' :war :fedclient
- compile 'org.apache.lucene:lucene-highlighter:${lucene.version}' :war :fedclient
- compile 'org.apache.lucene:lucene-memory:${lucene.version}' :war :fedclient
- compile 'org.apache.lucene:lucene-queryparser:${lucene.version}' :war :fedclient
- compile 'org.pegdown:pegdown:1.4.2' :war
- compile 'org.fusesource.wikitext:wikitext-core:${wikitext.version}' :war
- compile 'org.fusesource.wikitext:twiki-core:${wikitext.version}' :war
- compile 'org.fusesource.wikitext:textile-core:${wikitext.version}' :war
- compile 'org.fusesource.wikitext:tracwiki-core:${wikitext.version}' :war
- compile 'org.fusesource.wikitext:mediawiki-core:${wikitext.version}' :war
- compile 'org.fusesource.wikitext:confluence-core:${wikitext.version}' :war
- compile 'org.eclipse.jgit:org.eclipse.jgit:${jgit.version}' :war :fedclient :manager !junit
- compile 'org.eclipse.jgit:org.eclipse.jgit.http.server:${jgit.version}' :war :manager !junit
- compile 'org.bouncycastle:bcprov-jdk15on:${bouncycastle.version}' :war
- compile 'org.bouncycastle:bcmail-jdk15on:${bouncycastle.version}' :war
- compile 'org.bouncycastle:bcpkix-jdk15on:${bouncycastle.version}' :war
- compile 'org.apache.sshd:sshd-core:${sshd.version}' :war !org.easymock
- compile 'org.apache.mina:mina-core:${mina.version}' :war !org.easymock
- compile 'rome:rome:0.9' :war :manager :api
- compile 'com.google.code.gson:gson:2.3.1' :war :fedclient :manager :api
- compile 'org.codehaus.groovy:groovy-all:${groovy.version}' :war
- compile 'com.unboundid:unboundid-ldapsdk:2.3.8' :war
- compile 'org.apache.ivy:ivy:2.2.0' :war
- compile 'com.toedter:jcalendar:1.3.2' :authority
- compile 'org.apache.commons:commons-compress:1.4.1' :war
- compile 'commons-io:commons-io:2.2' :war
- compile 'com.force.api:force-partner-api:24.0.0' :war
- compile 'org.freemarker:freemarker:2.3.22' :war
- compile 'com.github.dblock.waffle:waffle-jna:1.7.3' :war
- compile 'org.kohsuke:libpam4j:1.8' :war
- compile 'args4j:args4j:2.0.29' :war :fedclient
- compile 'commons-codec:commons-codec:1.7' :war
- compile 'redis.clients:jedis:2.6.2' :war
- compile 'ro.fortsoft.pf4j:pf4j:0.9.0' :war
- compile 'org.apache.tika:tika-core:1.5' :war
- compile 'org.jsoup:jsoup:1.7.3' :war
- test 'junit'
# Dependencies for Selenium web page testing
- test 'org.seleniumhq.selenium:selenium-java:${selenium.version}' @jar
- test 'org.seleniumhq.selenium:selenium-support:${selenium.version}' @jar
- test 'org.seleniumhq.selenium:selenium-firefox-driver:${selenium.version}'
- test 'org.mockito:mockito-core:1.10.19'
# Dependencies with the "build" scope are retrieved
# and injected into the Ant runtime classpath
- build 'jacoco'
