Skip to content

Commit 0a226bd

Browse files
committed
Add proper Maven Central support
1 parent b208962 commit 0a226bd

4 files changed

Lines changed: 80 additions & 43 deletions

File tree

MavenNet.Tests/Test.cs

Lines changed: 3 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,7 @@ namespace MavenNet.Tests
77
{
88
public class Test
99
{
10-
const string GPS_LOCAL_REPO = "/Users/redth/Library/Developer/Xamarin/android-sdk-macosx/extras/google/m2repository/";
1110
const string ANDROID_THINGS_URL_REPO = "https://google.bintray.com/androidthings";
12-
const string GOOGLE_MAVEN_REPO = "https://dl.google.com/dl/android/maven2/";
13-
const string CENTRAL_MAVEN_REPO = "http://repo1.maven.org/maven2/";
1411

1512
[Fact]
1613
public async Task Test_Refresh_URL()
@@ -44,55 +41,18 @@ public async Task Test_GroupIds_Project_URL()
4441
}
4542

4643

47-
//[Fact]
44+
[Fact]
4845
public async Task Test_GroupIds_Project_URL_Maven()
4946
{
50-
var repo = MavenRepository.FromUrl(CENTRAL_MAVEN_REPO);
47+
var repo = MavenRepository.FromMavenCentral();
5148
await repo.Refresh("com.facebook.android");
5249

5350
var project = await repo.GetProjectAsync("com.facebook.android", "facebook-android-sdk", "4.33.0");
5451

5552
Assert.True(project != null);
53+
Assert.NotEmpty(project.Dependencies);
5654
}
5755

58-
//[Trait("Category", "LOCAL_ONLY")]
59-
//[Fact]
60-
//public async Task Test_Refresh_FILE()
61-
//{
62-
// var repo = MavenRepository.FromDirectory(GPS_LOCAL_REPO);
63-
// await repo.Refresh();
64-
65-
// Assert.True(repo.Groups.Any());
66-
//}
67-
68-
//[Trait("Category", "LOCAL_ONLY")]
69-
//[Fact]
70-
//public async Task Test_Project_FILE()
71-
//{
72-
// var repo = MavenRepository.FromDirectory(GPS_LOCAL_REPO);
73-
// await repo.Refresh();
74-
75-
// var project = await repo.GetProjectAsync("com.google.android.gms", "play-services-basement", "10.2.0");
76-
77-
// Assert.True(project != null);
78-
79-
// Assert.True(project.Dependencies?.Any());
80-
//}
81-
82-
//[Trait("Category", "LOCAL_ONLY")]
83-
//[Fact]
84-
//public async Task Test_GroupIds_Project_FILE()
85-
//{
86-
// var repo = MavenRepository.FromDirectory(GPS_LOCAL_REPO);
87-
// await repo.Refresh("com.google.android.gms");
88-
89-
// var project = await repo.GetProjectAsync("com.google.android.gms", "play-services-basement", "10.2.0");
90-
91-
// Assert.True(project != null);
92-
93-
// Assert.True(project.Dependencies?.Any());
94-
//}
95-
9656
[Fact]
9757
public async Task Test_Refresh_GOOGLE()
9858
{

MavenNet/MavenCentralRepository.cs

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.IO;
4+
using System.Net.Http;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
using MavenNet.Models;
8+
using Newtonsoft.Json.Linq;
9+
10+
namespace MavenNet
11+
{
12+
public class MavenCentralRepository : MavenRepository
13+
{
14+
protected override char PathSeparator
15+
=> '/';
16+
17+
protected override string CombinePaths(params string[] parts)
18+
{
19+
return string.Join(new string(PathSeparator, 1), parts);
20+
}
21+
22+
static readonly HttpClient http = new HttpClient();
23+
24+
protected override async Task<IEnumerable<Artifact>> GetArtifactsAsync(string groupId)
25+
{
26+
var artifacts = new List<Artifact>();
27+
28+
var url = $"http://search.maven.org/solrsearch/select?q=g:%22{groupId}%22&rows=100&wt=json";
29+
30+
var data = await http.GetStringAsync(url);
31+
32+
var json = JObject.Parse(data);
33+
34+
var docs = json["response"]["docs"] as JArray;
35+
36+
if (docs != null)
37+
{
38+
foreach (var doc in docs)
39+
{
40+
var gid = doc.Value<string>("g");
41+
var aid = doc.Value<string>("a");
42+
43+
try
44+
{
45+
using (var s = await OpenMavenMetadataFile(gid, aid).ConfigureAwait(false))
46+
{
47+
var metadata = MavenMetadataParser.Parse(s);
48+
49+
artifacts.Add(new Artifact(aid, gid, metadata.AllVersions.ToArray()));
50+
}
51+
}
52+
catch { }
53+
}
54+
}
55+
56+
return artifacts;
57+
}
58+
59+
protected override Task<IEnumerable<string>> GetGroupIdsAsync()
60+
{
61+
return Task.FromResult<IEnumerable<string>>(new List<string>());
62+
}
63+
64+
protected override Task<Stream> OpenFileAsync(string path)
65+
{
66+
var url = $"https://repo1.maven.org/maven2/{path}";
67+
68+
return http.GetStreamAsync(url);
69+
}
70+
}
71+
}

MavenNet/MavenNet.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
<Compile Remove="Properties\AssemblyInfo.cs" />
2222
</ItemGroup>
2323
<ItemGroup>
24+
<PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
2425
<PackageReference Include="NuGet.Versioning" Version="4.7.0" />
2526
</ItemGroup>
2627
</Project>

MavenNet/MavenRepository.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ public static GoogleMavenRepository FromGoogle()
1414
return new GoogleMavenRepository();
1515
}
1616

17+
public static MavenCentralRepository FromMavenCentral()
18+
{
19+
return new MavenCentralRepository();
20+
}
21+
1722
public static FileBasedMavenRepository FromUrl(string url)
1823
{
1924
return new UrlMavenRepository(url);

0 commit comments

Comments
 (0)