tetra 0.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +27 -0
- data/.rubocop.yml +14 -0
- data/Gemfile +4 -0
- data/LICENSE +28 -0
- data/MOTIVATION.md +27 -0
- data/README.md +106 -0
- data/Rakefile +9 -0
- data/SPECIAL_CASES.md +130 -0
- data/bin/tetra +29 -0
- data/integration-tests/commons.sh +55 -0
- data/lib/template/gitignore +2 -0
- data/lib/template/kit.spec +64 -0
- data/lib/template/kit/CONTENTS +8 -0
- data/lib/template/kit/jars/CONTENTS +1 -0
- data/lib/template/kit/m2/settings.xml +10 -0
- data/lib/template/output/CONTENTS +3 -0
- data/lib/template/package.spec +65 -0
- data/lib/template/src/CONTENTS +6 -0
- data/lib/tetra.rb +63 -0
- data/lib/tetra/ant_runner.rb +27 -0
- data/lib/tetra/archiver.rb +95 -0
- data/lib/tetra/commands/ant.rb +23 -0
- data/lib/tetra/commands/base.rb +89 -0
- data/lib/tetra/commands/download_maven_source_jars.rb +29 -0
- data/lib/tetra/commands/dry_run.rb +17 -0
- data/lib/tetra/commands/finish.rb +22 -0
- data/lib/tetra/commands/generate_all.rb +38 -0
- data/lib/tetra/commands/generate_kit_archive.rb +18 -0
- data/lib/tetra/commands/generate_kit_spec.rb +16 -0
- data/lib/tetra/commands/generate_package_archive.rb +19 -0
- data/lib/tetra/commands/generate_package_script.rb +21 -0
- data/lib/tetra/commands/generate_package_spec.rb +22 -0
- data/lib/tetra/commands/get_pom.rb +33 -0
- data/lib/tetra/commands/get_source.rb +30 -0
- data/lib/tetra/commands/init.rb +15 -0
- data/lib/tetra/commands/list_kit_missing_sources.rb +21 -0
- data/lib/tetra/commands/move_jars_to_kit.rb +18 -0
- data/lib/tetra/commands/mvn.rb +23 -0
- data/lib/tetra/git.rb +140 -0
- data/lib/tetra/kit_checker.rb +104 -0
- data/lib/tetra/kit_runner.rb +43 -0
- data/lib/tetra/kit_spec_adapter.rb +28 -0
- data/lib/tetra/logger.rb +28 -0
- data/lib/tetra/main.rb +102 -0
- data/lib/tetra/maven_runner.rb +47 -0
- data/lib/tetra/maven_website.rb +59 -0
- data/lib/tetra/package_spec_adapter.rb +59 -0
- data/lib/tetra/pom.rb +55 -0
- data/lib/tetra/pom_getter.rb +104 -0
- data/lib/tetra/project.rb +245 -0
- data/lib/tetra/script_generator.rb +57 -0
- data/lib/tetra/source_getter.rb +41 -0
- data/lib/tetra/spec_generator.rb +60 -0
- data/lib/tetra/template_manager.rb +33 -0
- data/lib/tetra/version.rb +6 -0
- data/lib/tetra/version_matcher.rb +90 -0
- data/spec/data/ant-super-simple-code/build.xml +133 -0
- data/spec/data/ant-super-simple-code/build/HW.class +0 -0
- data/spec/data/ant-super-simple-code/build/mypackage/HW.class +0 -0
- data/spec/data/ant-super-simple-code/dist/antsimple-20130618.jar +0 -0
- data/spec/data/ant-super-simple-code/lib/junit-4.11.jar +0 -0
- data/spec/data/ant-super-simple-code/lib/log4j-1.2.13.jar +0 -0
- data/spec/data/ant-super-simple-code/src/mypackage/HW.java +15 -0
- data/spec/data/antlr/antlr-2.7.2.jar +0 -0
- data/spec/data/antlr/pom.xml +6 -0
- data/spec/data/commons-logging/commons-logging-1.1.1.jar +0 -0
- data/spec/data/commons-logging/parent_pom.xml +420 -0
- data/spec/data/commons-logging/pom.xml +504 -0
- data/spec/data/nailgun/nailgun-0.7.1.jar +0 -0
- data/spec/data/nailgun/pom.xml +153 -0
- data/spec/data/struts-apps/pom.xml +228 -0
- data/spec/data/tomcat/pom.xml +33 -0
- data/spec/lib/ant_runner_spec.rb +45 -0
- data/spec/lib/archiver_spec.rb +106 -0
- data/spec/lib/git_spec.rb +105 -0
- data/spec/lib/kit_checker_spec.rb +119 -0
- data/spec/lib/maven_runner_spec.rb +68 -0
- data/spec/lib/maven_website_spec.rb +56 -0
- data/spec/lib/pom_getter_spec.rb +36 -0
- data/spec/lib/pom_spec.rb +69 -0
- data/spec/lib/project_spec.rb +254 -0
- data/spec/lib/script_generator_spec.rb +67 -0
- data/spec/lib/source_getter_spec.rb +36 -0
- data/spec/lib/spec_generator_spec.rb +130 -0
- data/spec/lib/template_manager_spec.rb +54 -0
- data/spec/lib/version_matcher_spec.rb +64 -0
- data/spec/spec_helper.rb +37 -0
- data/spec/support/kit_runner_examples.rb +15 -0
- data/tetra.gemspec +31 -0
- data/utils/delete_nonet_user.sh +8 -0
- data/utils/setup_nonet_user.sh +8 -0
- metadata +267 -0
@@ -0,0 +1,41 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Tetra
|
4
|
+
# attempts to get java projects' sources
|
5
|
+
class SourceGetter
|
6
|
+
include Logging
|
7
|
+
|
8
|
+
# attempts to download a project's sources
|
9
|
+
def get_maven_source_jar(project, pom_path)
|
10
|
+
maven_runner = Tetra::MavenRunner.new(project)
|
11
|
+
pom = Pom.new(pom_path)
|
12
|
+
maven_runner.get_source_jar(pom.group_id, pom.artifact_id, pom.version)
|
13
|
+
end
|
14
|
+
|
15
|
+
# looks for jars in maven's local repo and downloads corresponding
|
16
|
+
# source jars
|
17
|
+
def get_maven_source_jars(project)
|
18
|
+
maven_runner = Tetra::MavenRunner.new(project)
|
19
|
+
|
20
|
+
project.from_directory do
|
21
|
+
paths = Find.find(".").reject { |path| artifact_from_path(path).nil? }.sort
|
22
|
+
|
23
|
+
succeded_paths = paths.each do |path|
|
24
|
+
group_id, artifact_id, version = artifact_from_path(path)
|
25
|
+
log.info("attempting source download for #{path} (#{group_id}:#{artifact_id}:#{version})")
|
26
|
+
maven_runner.get_source_jar(group_id, artifact_id, version)
|
27
|
+
end
|
28
|
+
|
29
|
+
[succeded_paths, (paths - succeded_paths)]
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
# if possible, turn path into a Maven artifact name, otherwise return nil
|
36
|
+
def artifact_from_path(path)
|
37
|
+
match = path.match(%r{\./kit/m2/(.+)/(.+)/(.+)/\2-\3.*\.jar$})
|
38
|
+
[match[1].gsub("/", "."), match[2], match[3]] unless match.nil?
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Tetra
|
4
|
+
# creates and updates spec files
|
5
|
+
class SpecGenerator
|
6
|
+
include Logging
|
7
|
+
|
8
|
+
def initialize(project)
|
9
|
+
@project = project
|
10
|
+
end
|
11
|
+
|
12
|
+
def generate_kit_spec
|
13
|
+
@project.from_directory do
|
14
|
+
spec_name = "#{@project.name}-kit.spec"
|
15
|
+
spec_path = File.join("kit", spec_name)
|
16
|
+
output_dir = File.join("output", "#{@project.name}-kit")
|
17
|
+
FileUtils.mkdir_p(output_dir)
|
18
|
+
|
19
|
+
adapter = Tetra::KitSpecAdapter.new(@project)
|
20
|
+
conflict_count = generate_merging("kit.spec", adapter.public_binding, spec_path, :generate_kit_spec)
|
21
|
+
|
22
|
+
symlink_to_output(spec_path, output_dir)
|
23
|
+
|
24
|
+
[spec_path, conflict_count]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def generate_package_spec(name, pom_path, filter)
|
29
|
+
pom = Tetra::Pom.new(pom_path)
|
30
|
+
@project.from_directory do
|
31
|
+
spec_name = "#{name}.spec"
|
32
|
+
spec_path = File.join("src", name, spec_name)
|
33
|
+
output_dir = File.join("output", name)
|
34
|
+
FileUtils.mkdir_p(output_dir)
|
35
|
+
|
36
|
+
adapter = Tetra::PackageSpecAdapter.new(@project, name, pom, filter)
|
37
|
+
conflict_count = generate_merging("package.spec", adapter.public_binding, spec_path, "generate_#{name}_spec")
|
38
|
+
|
39
|
+
symlink_to_output(spec_path, output_dir)
|
40
|
+
|
41
|
+
[spec_path, conflict_count]
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
private
|
46
|
+
|
47
|
+
# generates a spec file from a template and 3-way merges it
|
48
|
+
def generate_merging(template, binding, path, tag_prefix)
|
49
|
+
new_content = TemplateManager.new.generate(template, binding)
|
50
|
+
@project.merge_new_content(new_content, path, "Spec generated", tag_prefix)
|
51
|
+
end
|
52
|
+
|
53
|
+
# links a spec file in a subdirectory of output/
|
54
|
+
def symlink_to_output(spec_path, destination_dir)
|
55
|
+
spec_name = Pathname.new(spec_path).basename.to_s
|
56
|
+
destination_spec_path = File.join(destination_dir, spec_name)
|
57
|
+
FileUtils.symlink(File.expand_path(spec_path), destination_spec_path, force: true)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Tetra
|
4
|
+
# operates on files in template/
|
5
|
+
class TemplateManager
|
6
|
+
include Logging
|
7
|
+
|
8
|
+
attr_reader :template_path
|
9
|
+
|
10
|
+
def initialize
|
11
|
+
@template_path = File.join(File.dirname(__FILE__), "..", "template")
|
12
|
+
end
|
13
|
+
|
14
|
+
# copies a template file in a directory
|
15
|
+
def copy(template_name, destination_dir)
|
16
|
+
FileUtils.cp_r(File.join(template_path, template_name), destination_dir)
|
17
|
+
end
|
18
|
+
|
19
|
+
# generates content from an ERB template and an object binding
|
20
|
+
# if destination_path is given, write it to that file, otherwise just
|
21
|
+
# return it
|
22
|
+
def generate(template_name, object_binding, destination_path = nil)
|
23
|
+
erb = ERB.new File.read(File.join(template_path, template_name)), nil, "<>"
|
24
|
+
new_content = erb.result(object_binding)
|
25
|
+
|
26
|
+
unless destination_path.nil?
|
27
|
+
File.open(destination_path, "w") { |io| io.write new_content }
|
28
|
+
end
|
29
|
+
|
30
|
+
new_content
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module Tetra
|
4
|
+
# heuristically matches version strings
|
5
|
+
class VersionMatcher
|
6
|
+
include Logging
|
7
|
+
|
8
|
+
# heuristically splits a full name into an artifact name and version string
|
9
|
+
# assumes that version strings begin with a numeric character and are separated
|
10
|
+
# by a ., -, _, ~ or space
|
11
|
+
# returns a [name, version] pair
|
12
|
+
def split_version(full_name)
|
13
|
+
matches = full_name.match(/(.*?)(?:[\.\-\_ ~,]?([0-9].*))?$/)
|
14
|
+
if !matches.nil? && matches.length > 1
|
15
|
+
[matches[1], matches[2]]
|
16
|
+
else
|
17
|
+
[full_string, nil]
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
# returns the "best match" between a version number and a set of available version numbers
|
22
|
+
# using a heuristic criterion. Idea:
|
23
|
+
# - split the version number in chunks divided by ., - etc.
|
24
|
+
# - every chunk with same index is "compared", differences make up a score
|
25
|
+
# - "comparison" is a subtraction if the chunk is an integer, a string distance measure otherwise
|
26
|
+
# - score weighs differently on chunk index (first chunks are most important)
|
27
|
+
# - lowest score wins
|
28
|
+
def best_match(my_version, their_versions)
|
29
|
+
log.debug("version comparison: #{my_version} vs #{their_versions.join(", ")}")
|
30
|
+
|
31
|
+
my_chunks = my_version.split(/[\.\-\_ ~,]/)
|
32
|
+
their_chunks_hash = Hash[
|
33
|
+
their_versions.map do |their_version|
|
34
|
+
their_chunks_for_version = (
|
35
|
+
if !their_version.nil?
|
36
|
+
their_version.split(/[\.\-\_ ~,]/)
|
37
|
+
else
|
38
|
+
[]
|
39
|
+
end
|
40
|
+
)
|
41
|
+
their_chunks_for_version += [nil] * [my_chunks.length - their_chunks_for_version.length, 0].max
|
42
|
+
[their_version, their_chunks_for_version]
|
43
|
+
end
|
44
|
+
]
|
45
|
+
|
46
|
+
max_chunks_length = ([my_chunks.length] + their_chunks_hash.values.map { |chunk| chunk.length }).max
|
47
|
+
|
48
|
+
scoreboard = []
|
49
|
+
their_versions.each do |their_version|
|
50
|
+
their_chunks = their_chunks_hash[their_version]
|
51
|
+
score = 0
|
52
|
+
their_chunks.each_with_index do |their_chunk, i|
|
53
|
+
score_multiplier = 100**(max_chunks_length - i - 1)
|
54
|
+
my_chunk = my_chunks[i]
|
55
|
+
score += chunk_distance(my_chunk, their_chunk) * score_multiplier
|
56
|
+
end
|
57
|
+
scoreboard << { version: their_version, score: score }
|
58
|
+
end
|
59
|
+
|
60
|
+
scoreboard = scoreboard.sort_by { |element| element[:score] }
|
61
|
+
|
62
|
+
log.debug("scoreboard: ")
|
63
|
+
scoreboard.each_with_index do |element, i|
|
64
|
+
log.debug(" #{i + 1}. #{element[:version]} (score: #{element[:score]})")
|
65
|
+
end
|
66
|
+
|
67
|
+
return scoreboard.first[:version] unless scoreboard.first.nil?
|
68
|
+
end
|
69
|
+
|
70
|
+
# returns a score representing the distance between two version chunks
|
71
|
+
# for integers, the score is the difference between their values
|
72
|
+
# for strings, the score is the Levenshtein distance
|
73
|
+
# in any case score is normalized between 0 (identical) and 99 (very different/uncomparable)
|
74
|
+
def chunk_distance(my_chunk, their_chunk)
|
75
|
+
my_chunk = "0" if my_chunk.nil?
|
76
|
+
their_chunk = "0" if their_chunk.nil?
|
77
|
+
|
78
|
+
if i?(my_chunk) && i?(their_chunk)
|
79
|
+
return [(my_chunk.to_i - their_chunk.to_i).abs, 99].min
|
80
|
+
else
|
81
|
+
return [Text::Levenshtein.distance(my_chunk.upcase, their_chunk.upcase), 99].min
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
# true for integer strings
|
86
|
+
def i?(string)
|
87
|
+
string =~ /^[0-9]+$/
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,133 @@
|
|
1
|
+
<!--
|
2
|
+
Ant simple sample project.
|
3
|
+
Kick start your java builds.
|
4
|
+
Find out more at http://www.bodkinconsulting.com
|
5
|
+
or http://java.net/projects/ant-simple-sample
|
6
|
+
|
7
|
+
Instructions:
|
8
|
+
Put this file in an empty directory and run the 'ant' command in that directory. The build file will create directories and make a very empty jar file in the same directory as the build.xml.
|
9
|
+
|
10
|
+
Create src/HW.java and put this code in it.
|
11
|
+
|
12
|
+
public class HW
|
13
|
+
{
|
14
|
+
public static void main(String [] args)
|
15
|
+
{
|
16
|
+
System.out.println("Hello World");
|
17
|
+
}
|
18
|
+
|
19
|
+
}
|
20
|
+
|
21
|
+
in the build file below change
|
22
|
+
<property name="main_class_name" value="changeme"/>
|
23
|
+
to
|
24
|
+
<property name="main_class_name" value="HW"/>
|
25
|
+
|
26
|
+
Run the ant command again, and now you can run your main class with the command
|
27
|
+
java -jar antsimple.jar
|
28
|
+
|
29
|
+
It should print:
|
30
|
+
Hellow World
|
31
|
+
and exit.
|
32
|
+
|
33
|
+
Add a junit.jar (from junit.org) into your ANT_HOME/lib directory and run 'ant test'
|
34
|
+
|
35
|
+
Create the file test/HWTest.java and add this code.
|
36
|
+
import junit.framework.*;
|
37
|
+
public class HWTest extends TestCase {
|
38
|
+
public void testTrue()
|
39
|
+
{
|
40
|
+
assertTrue(true);
|
41
|
+
}
|
42
|
+
}
|
43
|
+
|
44
|
+
-->
|
45
|
+
|
46
|
+
<project name="antsimple" default="dist" basedir=".">
|
47
|
+
<description>
|
48
|
+
Ant Simple Sample File
|
49
|
+
</description>
|
50
|
+
<!-- set global properties for this build -->
|
51
|
+
<property name="ant.project.name" value="antsimple"/>
|
52
|
+
<property name="main_class_name" value="HW"/>
|
53
|
+
<property name="jarname" value="${ant.project.name}"/>
|
54
|
+
<!-- set directories -->
|
55
|
+
<property name="src" location="src"/>
|
56
|
+
<property name="test" location="test"/>
|
57
|
+
<property name="build" location="build"/>
|
58
|
+
<property name="dist" location="dist"/>
|
59
|
+
<property name="lib" location="lib"/>
|
60
|
+
|
61
|
+
<path id="project.classpath">
|
62
|
+
<pathelement location="${build}" />
|
63
|
+
<pathelement location="${lib}/log4j-1.2.13.jar" />
|
64
|
+
</path>
|
65
|
+
|
66
|
+
|
67
|
+
<target name="init">
|
68
|
+
<!-- Create the time stamp -->
|
69
|
+
<tstamp/>
|
70
|
+
<!-- Create directories if needed -->
|
71
|
+
<mkdir dir="${src}"/>
|
72
|
+
<mkdir dir="${test}"/>
|
73
|
+
<mkdir dir="${build}"/>
|
74
|
+
<mkdir dir="${dist}"/>
|
75
|
+
</target>
|
76
|
+
|
77
|
+
<target name="compile" depends="init" description="compile the source " >
|
78
|
+
<!-- Compile the java code from ${src} into ${build} -->
|
79
|
+
<javac debug="true"
|
80
|
+
srcdir="${src}"
|
81
|
+
destdir="${build}"
|
82
|
+
classpathref="project.classpath"/>
|
83
|
+
<!-- Copy files from ${src} into ${build} -->
|
84
|
+
<copy todir="${build}">
|
85
|
+
<fileset dir="${src}">
|
86
|
+
<exclude name="**/*.java"/>
|
87
|
+
</fileset>
|
88
|
+
</copy>
|
89
|
+
</target>
|
90
|
+
|
91
|
+
<!--
|
92
|
+
Broken???
|
93
|
+
-->
|
94
|
+
<target name="test" depends="compiletest" description="run the tests " >
|
95
|
+
<junit printsummary="yes" fork="yes" haltonfailure="yes">
|
96
|
+
<formatter type="plain"/>
|
97
|
+
<batchtest fork="true">
|
98
|
+
<fileset dir="${test}">
|
99
|
+
<include name="**/*Test*.java"/>
|
100
|
+
</fileset>
|
101
|
+
</batchtest>
|
102
|
+
<classpath refid="${project.classpath}" />
|
103
|
+
</junit>
|
104
|
+
</target>
|
105
|
+
|
106
|
+
<target name="compiletest" depends="compile"
|
107
|
+
description="compile the tests " >
|
108
|
+
<javac debug="true"
|
109
|
+
srcdir="${test}"
|
110
|
+
destdir="${build}"
|
111
|
+
classpathref="project.classpath" />
|
112
|
+
</target>
|
113
|
+
|
114
|
+
<target name="dist" depends="compile" description="generate the distribution" >
|
115
|
+
<!-- Create the distribution directory -->
|
116
|
+
|
117
|
+
<!-- Put everything in ${build} into the MyProject-${DSTAMP}.jar file -->
|
118
|
+
<jar jarfile="${dist}/${jarname}-${DSTAMP}.jar" basedir="${build}">
|
119
|
+
<manifest>
|
120
|
+
<attribute name="Main-Class"
|
121
|
+
value="${main_class_name}"/>
|
122
|
+
</manifest>
|
123
|
+
</jar>
|
124
|
+
<copy file="${dist}/${jarname}-${DSTAMP}.jar" tofile="./${jarname}.jar" overwrite="true"/>
|
125
|
+
</target>
|
126
|
+
|
127
|
+
<target name="clean"
|
128
|
+
description="clean up" >
|
129
|
+
<!-- Delete the ${build} directory-->
|
130
|
+
<delete dir="${build}"/>
|
131
|
+
</target>
|
132
|
+
</project>
|
133
|
+
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
@@ -0,0 +1,15 @@
|
|
1
|
+
package mypackage;
|
2
|
+
|
3
|
+
import org.apache.log4j.Logger;
|
4
|
+
import org.apache.log4j.BasicConfigurator;
|
5
|
+
|
6
|
+
public class HW
|
7
|
+
{
|
8
|
+
static Logger logger = Logger.getLogger(HW.class);
|
9
|
+
public static void main(String [] args)
|
10
|
+
{
|
11
|
+
BasicConfigurator.configure();
|
12
|
+
logger.info("Hello World");
|
13
|
+
}
|
14
|
+
|
15
|
+
}
|
Binary file
|
Binary file
|
@@ -0,0 +1,420 @@
|
|
1
|
+
<?xml version="1.0" encoding="ISO-8859-1"?>
|
2
|
+
<!--
|
3
|
+
|
4
|
+
Licensed to the Apache Software Foundation (ASF) under one or more
|
5
|
+
contributor license agreements. See the NOTICE file distributed with
|
6
|
+
this work for additional information regarding copyright ownership.
|
7
|
+
The ASF licenses this file to You under the Apache License, Version 2.0
|
8
|
+
(the "License"); you may not use this file except in compliance with
|
9
|
+
the License. You may obtain a copy of the License at
|
10
|
+
|
11
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
12
|
+
|
13
|
+
Unless required by applicable law or agreed to in writing, software
|
14
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
15
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
16
|
+
See the License for the specific language governing permissions and
|
17
|
+
limitations under the License.
|
18
|
+
|
19
|
+
-->
|
20
|
+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
21
|
+
<modelVersion>4.0.0</modelVersion>
|
22
|
+
<parent>
|
23
|
+
<groupId>org.apache</groupId>
|
24
|
+
<artifactId>apache</artifactId>
|
25
|
+
<version>4</version>
|
26
|
+
</parent>
|
27
|
+
<groupId>org.apache.commons</groupId>
|
28
|
+
<artifactId>commons-parent</artifactId>
|
29
|
+
<packaging>pom</packaging>
|
30
|
+
<!-- TODO: dummy version. In Maven 2.1, this will be auto-versioned being a generic parent -->
|
31
|
+
<version>5</version>
|
32
|
+
<name>Commons Parent</name>
|
33
|
+
<url>http://commons.apache.org/</url>
|
34
|
+
<inceptionYear>2001</inceptionYear>
|
35
|
+
|
36
|
+
<ciManagement>
|
37
|
+
<system>continuum</system>
|
38
|
+
<url>http://vmbuild.apache.org/continuum/</url>
|
39
|
+
<notifiers>
|
40
|
+
<notifier>
|
41
|
+
<type>mail</type>
|
42
|
+
<configuration>
|
43
|
+
<address>dev@commons.apache.org</address>
|
44
|
+
</configuration>
|
45
|
+
</notifier>
|
46
|
+
</notifiers>
|
47
|
+
</ciManagement>
|
48
|
+
|
49
|
+
<distributionManagement>
|
50
|
+
<!--
|
51
|
+
This POM's parent POM (the Apache root POM) provides repositories. Unfortunately,
|
52
|
+
this allows for accidental deployments. So we disable them here by providing
|
53
|
+
a dummy repository. Use "mvn -Prc deploy" (Apache snapshot repository) or
|
54
|
+
"mvn -Prelease deploy" (Apache release repository), if you really want to deploy.
|
55
|
+
-->
|
56
|
+
<repository>
|
57
|
+
<id>dummy</id>
|
58
|
+
<name>Dummy to avoid accidental deploys</name>
|
59
|
+
<url />
|
60
|
+
</repository>
|
61
|
+
</distributionManagement>
|
62
|
+
|
63
|
+
<!--
|
64
|
+
This section *must* be overwritten by subprojects. It is only to allow
|
65
|
+
a release of the commons-parent POM.
|
66
|
+
-->
|
67
|
+
<scm>
|
68
|
+
<connection>scm:svn:http://svn.apache.org/repos/asf/commons/proper/commons-parent/tags/commons-parent-5</connection>
|
69
|
+
<developerConnection>scm:svn:https://svn.apache.org/repos/asf/commons/proper/commons-parent/tags/commons-parent-5</developerConnection>
|
70
|
+
<url>http://svn.apache.org/viewvc/commons/proper/commons-parent/tags/commons-parent-5</url>
|
71
|
+
</scm>
|
72
|
+
|
73
|
+
<mailingLists>
|
74
|
+
<mailingList>
|
75
|
+
<name>Commons Commits List</name>
|
76
|
+
<subscribe>commits-subscribe@commons.apache.org</subscribe>
|
77
|
+
<unsubscribe>commits-unsubscribe@commons.apache.org</unsubscribe>
|
78
|
+
<post>commits@commons.apache.org</post>
|
79
|
+
<archive>http://mail-archives.apache.org/mod_mbox/commons-commits/</archive>
|
80
|
+
<otherArchives>
|
81
|
+
<otherArchive>http://www.mail-archive.com/commits@commons.apache.org/</otherArchive>
|
82
|
+
</otherArchives>
|
83
|
+
</mailingList>
|
84
|
+
<mailingList>
|
85
|
+
<name>Commons Dev List</name>
|
86
|
+
<subscribe>dev-subscribe@commons.apache.org</subscribe>
|
87
|
+
<unsubscribe>dev-unsubscribe@commons.apache.org</unsubscribe>
|
88
|
+
<post>dev@commons.apache.org</post>
|
89
|
+
<archive>http://mail-archives.apache.org/mod_mbox/commons-dev/</archive>
|
90
|
+
<otherArchives>
|
91
|
+
<otherArchive>http://www.mail-archive.com/dev@commons.apache.org/</otherArchive>
|
92
|
+
<otherArchive>http://www.nabble.com/Commons---Dev-f317.html</otherArchive>
|
93
|
+
</otherArchives>
|
94
|
+
</mailingList>
|
95
|
+
<mailingList>
|
96
|
+
<name>Commons Issues List</name>
|
97
|
+
<subscribe>issues-subscribe@commons.apache.org</subscribe>
|
98
|
+
<unsubscribe>issues-unsubscribe@commons.apache.org</unsubscribe>
|
99
|
+
<post>issues@commons.apache.org</post>
|
100
|
+
<archive>http://mail-archives.apache.org/mod_mbox/commons-issues/</archive>
|
101
|
+
<otherArchives>
|
102
|
+
<otherArchive>http://www.mail-archive.com/issues@commons.apache.org/</otherArchive>
|
103
|
+
<otherArchive>http://www.nabble.com/Commons---Issues-f25499.html</otherArchive>
|
104
|
+
</otherArchives>
|
105
|
+
</mailingList>
|
106
|
+
<mailingList>
|
107
|
+
<name>Commons User List</name>
|
108
|
+
<subscribe>user-subscribe@commons.apache.org</subscribe>
|
109
|
+
<unsubscribe>user-unsubscribe@commons.apache.org</unsubscribe>
|
110
|
+
<post>user@commons.apache.org</post>
|
111
|
+
<archive>http://mail-archives.apache.org/mod_mbox/commons-user/</archive>
|
112
|
+
<otherArchives>
|
113
|
+
<otherArchive>http://www.mail-archive.com/user@commons.apache.org/</otherArchive>
|
114
|
+
<otherArchive>http://www.nabble.com/Commons---User-f319.html</otherArchive>
|
115
|
+
</otherArchives>
|
116
|
+
</mailingList>
|
117
|
+
</mailingLists>
|
118
|
+
<build>
|
119
|
+
<pluginManagement>
|
120
|
+
<plugins>
|
121
|
+
<plugin>
|
122
|
+
<groupId>org.apache.maven.plugins</groupId>
|
123
|
+
<artifactId>maven-gpg-plugin</artifactId>
|
124
|
+
<version>1.0-alpha-3</version>
|
125
|
+
</plugin>
|
126
|
+
<plugin>
|
127
|
+
<groupId>org.apache.maven.plugins</groupId>
|
128
|
+
<artifactId>maven-jar-plugin</artifactId>
|
129
|
+
<version>2.1</version>
|
130
|
+
</plugin>
|
131
|
+
<plugin>
|
132
|
+
<groupId>org.apache.maven.plugins</groupId>
|
133
|
+
<artifactId>maven-remote-resources-plugin</artifactId>
|
134
|
+
<version>1.0-alpha-6</version>
|
135
|
+
</plugin>
|
136
|
+
<plugin>
|
137
|
+
<groupId>org.apache.maven.plugins</groupId>
|
138
|
+
<artifactId>maven-source-plugin</artifactId>
|
139
|
+
<version>2.0.4</version>
|
140
|
+
</plugin>
|
141
|
+
<plugin>
|
142
|
+
<groupId>org.apache.maven.plugins</groupId>
|
143
|
+
<artifactId>maven-surefire-plugin</artifactId>
|
144
|
+
<version>2.3</version>
|
145
|
+
</plugin>
|
146
|
+
<plugin>
|
147
|
+
<groupId>org.apache.maven.plugins</groupId>
|
148
|
+
<artifactId>maven-assembly-plugin</artifactId>
|
149
|
+
<version>2.2-beta-1</version>
|
150
|
+
</plugin>
|
151
|
+
</plugins>
|
152
|
+
</pluginManagement>
|
153
|
+
<plugins>
|
154
|
+
<!-- TODO: later use toolchain support to do compilation on an external JDK 1.3+ compiler -->
|
155
|
+
<plugin>
|
156
|
+
<artifactId>maven-compiler-plugin</artifactId>
|
157
|
+
<configuration>
|
158
|
+
<source>${maven.compile.source}</source>
|
159
|
+
<target>${maven.compile.target}</target>
|
160
|
+
</configuration>
|
161
|
+
</plugin>
|
162
|
+
<plugin>
|
163
|
+
<artifactId>maven-jar-plugin</artifactId>
|
164
|
+
<configuration>
|
165
|
+
<archive>
|
166
|
+
<manifestEntries>
|
167
|
+
<Specification-Title>${project.name}</Specification-Title>
|
168
|
+
<Specification-Version>${project.version}</Specification-Version>
|
169
|
+
<Specification-Vendor>${project.organization.name}</Specification-Vendor>
|
170
|
+
<Implementation-Title>${project.name}</Implementation-Title>
|
171
|
+
<Implementation-Version>${project.version}</Implementation-Version>
|
172
|
+
<Implementation-Vendor>${project.organization.name}</Implementation-Vendor>
|
173
|
+
<Implementation-Vendor-Id>org.apache</Implementation-Vendor-Id>
|
174
|
+
<X-Compile-Source-JDK>${maven.compile.source}</X-Compile-Source-JDK>
|
175
|
+
<X-Compile-Target-JDK>${maven.compile.source}</X-Compile-Target-JDK>
|
176
|
+
</manifestEntries>
|
177
|
+
</archive>
|
178
|
+
</configuration>
|
179
|
+
</plugin>
|
180
|
+
<plugin>
|
181
|
+
<artifactId>maven-idea-plugin</artifactId>
|
182
|
+
<configuration>
|
183
|
+
<jdkLevel>${maven.compile.source}</jdkLevel>
|
184
|
+
</configuration>
|
185
|
+
</plugin>
|
186
|
+
</plugins>
|
187
|
+
</build>
|
188
|
+
|
189
|
+
<reporting>
|
190
|
+
<plugins>
|
191
|
+
<plugin>
|
192
|
+
<groupId>org.apache.maven.plugins</groupId>
|
193
|
+
<artifactId>maven-javadoc-plugin</artifactId>
|
194
|
+
<version>2.2</version>
|
195
|
+
<configuration>
|
196
|
+
<aggregate>true</aggregate>
|
197
|
+
</configuration>
|
198
|
+
</plugin>
|
199
|
+
<plugin>
|
200
|
+
<groupId>org.apache.maven.plugins</groupId>
|
201
|
+
<artifactId>maven-jxr-plugin</artifactId>
|
202
|
+
<version>2.1</version>
|
203
|
+
<configuration>
|
204
|
+
<aggregate>true</aggregate>
|
205
|
+
</configuration>
|
206
|
+
</plugin>
|
207
|
+
<plugin>
|
208
|
+
<groupId>org.apache.maven.plugins</groupId>
|
209
|
+
<artifactId>maven-site-plugin</artifactId>
|
210
|
+
<configuration>
|
211
|
+
<!-- Exclude the navigation file for Maven 1 sites
|
212
|
+
and the changes file used by the changes-plugin,
|
213
|
+
as they interfere with the site generation. -->
|
214
|
+
<moduleExcludes>
|
215
|
+
<xdoc>navigation.xml,changes.xml</xdoc>
|
216
|
+
</moduleExcludes>
|
217
|
+
</configuration>
|
218
|
+
</plugin>
|
219
|
+
<plugin>
|
220
|
+
<groupId>org.apache.maven.plugins</groupId>
|
221
|
+
<artifactId>maven-surefire-report-plugin</artifactId>
|
222
|
+
<version>2.3</version>
|
223
|
+
</plugin>
|
224
|
+
<plugin>
|
225
|
+
<groupId>org.codehaus.mojo</groupId>
|
226
|
+
<artifactId>jdepend-maven-plugin</artifactId>
|
227
|
+
<version>2.0-beta-1</version>
|
228
|
+
</plugin>
|
229
|
+
<plugin>
|
230
|
+
<groupId>org.codehaus.mojo</groupId>
|
231
|
+
<artifactId>rat-maven-plugin</artifactId>
|
232
|
+
<version>1.0-alpha-3</version>
|
233
|
+
</plugin>
|
234
|
+
</plugins>
|
235
|
+
</reporting>
|
236
|
+
|
237
|
+
<profiles>
|
238
|
+
<profile>
|
239
|
+
<id>ci</id>
|
240
|
+
<distributionManagement>
|
241
|
+
<repository>
|
242
|
+
<id>apache.snapshots</id>
|
243
|
+
<name>Apache Development Snapshot Repository</name>
|
244
|
+
<url>${commons.deployment.protocol}://people.apache.org/www/people.apache.org/repo/m2-snapshot-repository</url>
|
245
|
+
</repository>
|
246
|
+
<snapshotRepository>
|
247
|
+
<id>apache.snapshots</id>
|
248
|
+
<name>Apache Development Snapshot Repository</name>
|
249
|
+
<url>${commons.deployment.protocol}://people.apache.org/www/people.apache.org/repo/m2-snapshot-repository</url>
|
250
|
+
</snapshotRepository>
|
251
|
+
</distributionManagement>
|
252
|
+
</profile>
|
253
|
+
|
254
|
+
<profile>
|
255
|
+
<id>release</id>
|
256
|
+
<distributionManagement>
|
257
|
+
<repository>
|
258
|
+
<id>apache.releases</id>
|
259
|
+
<name>Apache Release Distribution Repository</name>
|
260
|
+
<url>${commons.deployment.protocol}://people.apache.org/www/people.apache.org/repo/m2-ibiblio-rsync-repository</url>
|
261
|
+
</repository>
|
262
|
+
</distributionManagement>
|
263
|
+
<build>
|
264
|
+
<plugins>
|
265
|
+
<!-- We want to sign the artifact, the POM, and all attached artifacts -->
|
266
|
+
<plugin>
|
267
|
+
<artifactId>maven-gpg-plugin</artifactId>
|
268
|
+
<configuration>
|
269
|
+
<passphrase>${gpg.passphrase}</passphrase>
|
270
|
+
</configuration>
|
271
|
+
<executions>
|
272
|
+
<execution>
|
273
|
+
<id>sign-artifacts</id>
|
274
|
+
<phase>verify</phase>
|
275
|
+
<goals>
|
276
|
+
<goal>sign</goal>
|
277
|
+
</goals>
|
278
|
+
</execution>
|
279
|
+
</executions>
|
280
|
+
</plugin>
|
281
|
+
<plugin>
|
282
|
+
<artifactId>maven-source-plugin</artifactId>
|
283
|
+
<executions>
|
284
|
+
<execution>
|
285
|
+
<id>create-source-jar</id>
|
286
|
+
<goals>
|
287
|
+
<goal>jar</goal>
|
288
|
+
</goals>
|
289
|
+
</execution>
|
290
|
+
</executions>
|
291
|
+
</plugin>
|
292
|
+
<plugin>
|
293
|
+
<artifactId>maven-javadoc-plugin</artifactId>
|
294
|
+
<executions>
|
295
|
+
<execution>
|
296
|
+
<id>create-javadoc-jar</id>
|
297
|
+
<goals>
|
298
|
+
<goal>jar</goal>
|
299
|
+
</goals>
|
300
|
+
<configuration>
|
301
|
+
<source>${maven.compile.source}</source>
|
302
|
+
</configuration>
|
303
|
+
</execution>
|
304
|
+
</executions>
|
305
|
+
</plugin>
|
306
|
+
<!-- We want to package license resources into the JARs -->
|
307
|
+
<plugin>
|
308
|
+
<groupId>org.apache.maven.plugins</groupId>
|
309
|
+
<artifactId>maven-remote-resources-plugin</artifactId>
|
310
|
+
<executions>
|
311
|
+
<execution>
|
312
|
+
<goals>
|
313
|
+
<goal>process</goal>
|
314
|
+
</goals>
|
315
|
+
<configuration>
|
316
|
+
<resourceBundles>
|
317
|
+
<resourceBundle>org.apache:apache-jar-resource-bundle:1.3</resourceBundle>
|
318
|
+
</resourceBundles>
|
319
|
+
</configuration>
|
320
|
+
</execution>
|
321
|
+
</executions>
|
322
|
+
</plugin>
|
323
|
+
</plugins>
|
324
|
+
</build>
|
325
|
+
</profile>
|
326
|
+
|
327
|
+
<profile>
|
328
|
+
<id>rc</id>
|
329
|
+
<distributionManagement>
|
330
|
+
<repository>
|
331
|
+
<id>apache.snapshots</id>
|
332
|
+
<name>Apache Development Snapshot Repository</name>
|
333
|
+
<url>${commons.deployment.protocol}://people.apache.org/www/people.apache.org/repo/m2-snapshot-repository</url>
|
334
|
+
</repository>
|
335
|
+
<snapshotRepository>
|
336
|
+
<id>apache.snapshots</id>
|
337
|
+
<name>Apache Development Snapshot Repository</name>
|
338
|
+
<url>${commons.deployment.protocol}://people.apache.org/www/people.apache.org/repo/m2-snapshot-repository</url>
|
339
|
+
</snapshotRepository>
|
340
|
+
</distributionManagement>
|
341
|
+
<build>
|
342
|
+
<plugins>
|
343
|
+
<!-- We want to sign the artifact, the POM, and all attached artifacts -->
|
344
|
+
<plugin>
|
345
|
+
<artifactId>maven-gpg-plugin</artifactId>
|
346
|
+
<configuration>
|
347
|
+
<passphrase>${gpg.passphrase}</passphrase>
|
348
|
+
</configuration>
|
349
|
+
<executions>
|
350
|
+
<execution>
|
351
|
+
<id>sign-artifacts</id>
|
352
|
+
<phase>verify</phase>
|
353
|
+
<goals>
|
354
|
+
<goal>sign</goal>
|
355
|
+
</goals>
|
356
|
+
</execution>
|
357
|
+
</executions>
|
358
|
+
</plugin>
|
359
|
+
<plugin>
|
360
|
+
<artifactId>maven-source-plugin</artifactId>
|
361
|
+
<executions>
|
362
|
+
<execution>
|
363
|
+
<id>create-source-jar</id>
|
364
|
+
<goals>
|
365
|
+
<goal>jar</goal>
|
366
|
+
</goals>
|
367
|
+
</execution>
|
368
|
+
</executions>
|
369
|
+
</plugin>
|
370
|
+
<plugin>
|
371
|
+
<artifactId>maven-javadoc-plugin</artifactId>
|
372
|
+
<executions>
|
373
|
+
<execution>
|
374
|
+
<id>create-javadoc-jar</id>
|
375
|
+
<goals>
|
376
|
+
<goal>jar</goal>
|
377
|
+
</goals>
|
378
|
+
<configuration>
|
379
|
+
<source>${maven.compile.source}</source>
|
380
|
+
</configuration>
|
381
|
+
</execution>
|
382
|
+
</executions>
|
383
|
+
</plugin>
|
384
|
+
<!-- We want to package license resources into the JARs -->
|
385
|
+
<plugin>
|
386
|
+
<groupId>org.apache.maven.plugins</groupId>
|
387
|
+
<artifactId>maven-remote-resources-plugin</artifactId>
|
388
|
+
<executions>
|
389
|
+
<execution>
|
390
|
+
<goals>
|
391
|
+
<goal>process</goal>
|
392
|
+
</goals>
|
393
|
+
<configuration>
|
394
|
+
<resourceBundles>
|
395
|
+
<resourceBundle>org.apache:apache-jar-resource-bundle:1.3</resourceBundle>
|
396
|
+
</resourceBundles>
|
397
|
+
</configuration>
|
398
|
+
</execution>
|
399
|
+
</executions>
|
400
|
+
</plugin>
|
401
|
+
</plugins>
|
402
|
+
</build>
|
403
|
+
</profile>
|
404
|
+
</profiles>
|
405
|
+
|
406
|
+
<properties>
|
407
|
+
|
408
|
+
<!-- Default configuration for compiler source and target JVM -->
|
409
|
+
<maven.compile.source>1.3</maven.compile.source>
|
410
|
+
<maven.compile.target>1.3</maven.compile.target>
|
411
|
+
|
412
|
+
<!--
|
413
|
+
Make the deployment protocol pluggable. This allows to switch to
|
414
|
+
other protocols like scpexe, which some users prefer over scp.
|
415
|
+
-->
|
416
|
+
<commons.deployment.protocol>scp</commons.deployment.protocol>
|
417
|
+
|
418
|
+
</properties>
|
419
|
+
|
420
|
+
</project>
|