tetra 0.40.0
Sign up to get free protection for your applications and to get access to all the features.
- 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>
|