gjp 0.28.0 → 0.29.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/README.md +8 -3
- data/lib/gjp/cli.rb +22 -5
- data/lib/gjp/pom_getter.rb +21 -21
- data/lib/gjp/version.rb +1 -1
- data/spec/lib/pom_getter_spec.rb +6 -12
- metadata +1 -1
data/README.md
CHANGED
@@ -154,9 +154,14 @@ If you use Maven, most sources for binary jars in your kit can be automatically
|
|
154
154
|
|
155
155
|
gjp get-maven-source-jars
|
156
156
|
|
157
|
-
For non-Maven jars, or Maven jars that have no available sources, some extra manual work is needed.
|
157
|
+
For non-Maven jars, or Maven jars that have no available sources, some extra manual work is needed. First of all, you should get a `pom.xml` file for your jar, if you don't have it already:
|
158
|
+
|
159
|
+
gjp get-pom jarname.jar
|
160
|
+
|
161
|
+
This will create a `jarname.pom` file (if it can be found in Maven Central, otherwise you will need to search the Internet manually).
|
162
|
+
|
163
|
+
If you are lucky, the pom file will contain an URL to a site where sources can be downloaded, or even an SCM address. At the moment automatic source retrieval is not automated, but `gjp` can help you with the following utility subcommands:
|
158
164
|
|
159
|
-
* `gjp get-pom NAME` will attempt to find a pom. `NAME` can be a jar file on your disk, a project directory, or simply a `name-version` string. `gjp` will get the pom either from the package itself or through search.maven.org using heuristic searching;
|
160
165
|
* `gjp get-parent-pom POM` will attempt to download a pom's parent from search.maven.org, where `POM` is a filename or URI;
|
161
166
|
* `gjp get-source-address POM` will attempt to find the SCM Internet address of a pom.xml from the file itself or through api.github.com. `POM` can either be a filename or a URI;
|
162
167
|
* `gjp get-source POM ADDRESS` downloads the source of a pom.xml's project from its SCM at ADDRESS;
|
@@ -169,7 +174,7 @@ Building Ant packages is not really different from Maven ones, as `gjp ant` will
|
|
169
174
|
|
170
175
|
Sometimes you will have jar files distributed along with the source archive that will end up in `src/`: you don't want that, just run `gjp purge-jars` to have them moved to the kit. The command will generate a symlink back to the original, so builds will not fail.
|
171
176
|
|
172
|
-
Once built, you
|
177
|
+
Once built, you should get a pom.xml file (via `gjp get-pom`, see above) in order to generate its spec.
|
173
178
|
|
174
179
|
#### Optional: running networkless dry-run builds
|
175
180
|
|
data/lib/gjp/cli.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
require "gjp/logger"
|
3
3
|
require "clamp"
|
4
|
+
require "open-uri"
|
4
5
|
|
5
6
|
module Gjp
|
6
7
|
class MainCommand < Clamp::Command
|
@@ -281,11 +282,27 @@ module Gjp
|
|
281
282
|
end
|
282
283
|
end
|
283
284
|
|
284
|
-
subcommand "get-pom", "Retrieves a pom
|
285
|
-
parameter "NAME", "a jar file
|
285
|
+
subcommand "get-pom", "Retrieves a pom file" do
|
286
|
+
parameter "NAME", "a jar file name or a `name-version` string (heuristic)"
|
286
287
|
def execute
|
287
|
-
|
288
|
-
|
288
|
+
checking_exceptions do
|
289
|
+
project = Gjp::Project.new(".")
|
290
|
+
pom_getter = Gjp::PomGetter.new
|
291
|
+
|
292
|
+
path, status = pom_getter.get_pom(name)
|
293
|
+
if path
|
294
|
+
text_status = if status == :found_in_jar
|
295
|
+
"was inside the jar"
|
296
|
+
elsif status == :found_via_sha1
|
297
|
+
"found by sha1 search from search.maven.org"
|
298
|
+
elsif status == :found_via_heuristic
|
299
|
+
"found by heuristic search from search.maven.org"
|
300
|
+
end
|
301
|
+
|
302
|
+
puts "#{format_path(path, project)} written, #{text_status}"
|
303
|
+
else
|
304
|
+
puts "#{name} not found. Try http://google.com/#q=#{URI::encode(pom_getter.cleanup_name(name))}"
|
305
|
+
end
|
289
306
|
end
|
290
307
|
end
|
291
308
|
end
|
@@ -293,7 +310,7 @@ module Gjp
|
|
293
310
|
subcommand "get-parent-pom", "Retrieves a pom that is the parent of an existing pom" do
|
294
311
|
parameter "POM", "a pom file path or URI"
|
295
312
|
def execute
|
296
|
-
|
313
|
+
checking_exceptions do
|
297
314
|
puts Gjp::ParentPomGetter.new.get_parent_pom(pom)
|
298
315
|
end
|
299
316
|
end
|
data/lib/gjp/pom_getter.rb
CHANGED
@@ -13,35 +13,30 @@ module Gjp
|
|
13
13
|
class PomGetter
|
14
14
|
include Logger
|
15
15
|
|
16
|
-
#
|
16
|
+
# saves a jar poms in <jar_filename>.pom
|
17
|
+
# returns filename and status if found, else nil
|
17
18
|
def get_pom(filename)
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
if File.directory?(dir)
|
24
|
-
pom_path = File.join(dir, "pom.xml")
|
25
|
-
if File.file?(pom_path)
|
26
|
-
log.info("pom.xml found in #{dir}/pom.xml")
|
27
|
-
return File.read(pom_path)
|
28
|
-
end
|
19
|
+
content, status = (get_pom_from_jar(filename) or get_pom_from_sha1(filename) or get_pom_from_heuristic(filename))
|
20
|
+
if content
|
21
|
+
pom_filename = filename.sub(/(\.jar)?$/, ".pom")
|
22
|
+
File.open(pom_filename, "w") { |io| io.write(content) }
|
23
|
+
[pom_filename, status]
|
29
24
|
end
|
30
25
|
end
|
31
|
-
|
26
|
+
|
32
27
|
# returns a pom embedded in a jar file
|
33
28
|
def get_pom_from_jar(file)
|
34
29
|
begin
|
35
30
|
Zip::ZipFile.foreach(file) do |entry|
|
36
31
|
if entry.name =~ /\/pom.xml$/
|
37
32
|
log.info("pom.xml found in #{file}##{entry.name}")
|
38
|
-
return entry.get_input_stream.read
|
33
|
+
return entry.get_input_stream.read, :found_in_jar
|
39
34
|
end
|
40
35
|
end
|
41
36
|
rescue Zip::ZipError
|
42
|
-
log.
|
37
|
+
log.warn("#{file} does not seem to be a valid jar archive, skipping")
|
43
38
|
rescue TypeError
|
44
|
-
log.
|
39
|
+
log.warn("#{file} seems to be a valid jar archive but is corrupt, skipping")
|
45
40
|
end
|
46
41
|
return nil
|
47
42
|
end
|
@@ -57,12 +52,12 @@ module Gjp
|
|
57
52
|
if result != nil
|
58
53
|
log.info("pom.xml for #{file} found on search.maven.org for sha1 #{sha1} (#{result["g"]}:#{result["a"]}:#{result["v"]})")
|
59
54
|
group_id, artifact_id, version = site.get_maven_id_from result
|
60
|
-
return site.download_pom(group_id, artifact_id, version)
|
55
|
+
return site.download_pom(group_id, artifact_id, version), :found_via_sha1
|
61
56
|
end
|
62
57
|
end
|
63
58
|
return nil
|
64
59
|
rescue RestClient::ResourceNotFound
|
65
|
-
|
60
|
+
log.error("Got an error while looking for #{file}'s SHA1 in search.maven.org")
|
66
61
|
end
|
67
62
|
end
|
68
63
|
|
@@ -70,7 +65,7 @@ module Gjp
|
|
70
65
|
def get_pom_from_heuristic(filename)
|
71
66
|
begin
|
72
67
|
site = MavenWebsite.new
|
73
|
-
filename =
|
68
|
+
filename = cleanup_name(filename)
|
74
69
|
version_matcher = VersionMatcher.new
|
75
70
|
my_artifact_id, my_version = version_matcher.split_version(filename)
|
76
71
|
|
@@ -85,11 +80,16 @@ module Gjp
|
|
85
80
|
group_id, artifact_id, version = site.get_maven_id_from(best_matched_result)
|
86
81
|
log.warn("pom.xml for #{filename} found on search.maven.org with heuristic search (#{group_id}:#{artifact_id}:#{version})")
|
87
82
|
|
88
|
-
return site.download_pom(group_id, artifact_id, version)
|
83
|
+
return site.download_pom(group_id, artifact_id, version), :found_via_heuristic
|
89
84
|
end
|
90
85
|
rescue RestClient::ResourceNotFound
|
91
|
-
|
86
|
+
log.error("Got an error while looking for #{filename}'s SHA1 in search.maven.org")
|
92
87
|
end
|
93
88
|
end
|
89
|
+
|
90
|
+
# get a heuristic name from a path
|
91
|
+
def cleanup_name(path)
|
92
|
+
Pathname.new(path).basename.to_s.sub(/.jar$/, "")
|
93
|
+
end
|
94
94
|
end
|
95
95
|
end
|
data/lib/gjp/version.rb
CHANGED
data/spec/lib/pom_getter_spec.rb
CHANGED
@@ -6,31 +6,25 @@ describe Gjp::PomGetter do
|
|
6
6
|
let(:pom_getter) { Gjp::PomGetter.new }
|
7
7
|
|
8
8
|
describe "#get_pom" do
|
9
|
-
it "gets the pom from a directory" do
|
10
|
-
dir_path = File.join("spec", "data", "commons-logging")
|
11
|
-
pom_path = File.join(dir_path, "pom.xml")
|
12
|
-
pom_getter.get_pom(dir_path).should eq(File.read(pom_path))
|
13
|
-
end
|
14
|
-
|
15
9
|
it "gets the pom from a jar" do
|
16
10
|
dir_path = File.join("spec", "data", "commons-logging")
|
17
|
-
pom_path = File.join(dir_path, "pom.xml")
|
18
11
|
jar_path = File.join(dir_path, "commons-logging-1.1.1.jar")
|
19
|
-
pom_getter.get_pom(jar_path)
|
12
|
+
path, status = pom_getter.get_pom(jar_path)
|
13
|
+
status.should eq :found_in_jar
|
20
14
|
end
|
21
15
|
|
22
16
|
it "gets the pom from sha1" do
|
23
17
|
dir_path = File.join("spec", "data", "antlr")
|
24
|
-
pom_path = File.join(dir_path, "pom.xml")
|
25
18
|
jar_path = File.join(dir_path, "antlr-2.7.2.jar")
|
26
|
-
pom_getter.get_pom(jar_path)
|
19
|
+
path, status = pom_getter.get_pom(jar_path)
|
20
|
+
status.should eq :found_via_sha1
|
27
21
|
end
|
28
22
|
|
29
23
|
it "gets the pom from a heuristic" do
|
30
24
|
dir_path = File.join("spec", "data", "nailgun")
|
31
|
-
pom_path = File.join(dir_path, "pom.xml")
|
32
25
|
jar_path = File.join(dir_path, "nailgun-0.7.1.jar")
|
33
|
-
pom_getter.get_pom(jar_path)
|
26
|
+
path, status = pom_getter.get_pom(jar_path)
|
27
|
+
status.should eq :found_via_heuristic
|
34
28
|
end
|
35
29
|
end
|
36
30
|
end
|