Skip to content

Commit d91e7a2

Browse files
committed
initial download
0 parents  commit d91e7a2

File tree

5 files changed

+169
-0
lines changed

5 files changed

+169
-0
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
.idea/
2+
node_modules/

README.md

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
2+
node-java-maven

bin/node-java-maven

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
#!/usr/bin/env node
2+
3+
'use strict';
4+
5+
var mvn = require('../');
6+
7+
mvn(function(err) {
8+
if (err) {
9+
console.error(err);
10+
}
11+
});

index.js

+132
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
'use strict';
2+
3+
var fs = require('fs');
4+
var async = require('async');
5+
var xml2js = require('xml2js');
6+
var request = require('request');
7+
var path = require('path');
8+
var mkdirp = require('mkdirp');
9+
10+
module.exports = function(callback) {
11+
return readPackageJson(function(err, packageJson) {
12+
if (err) {
13+
return callback(err);
14+
}
15+
16+
if (!packageJson.java.dependencies) {
17+
return callback(new Error("Could not find java.dependencies property in package.json"));
18+
}
19+
20+
var paths = [];
21+
var errors = [];
22+
var q = async.queue(function(dependency, callback) {
23+
return resolveDependency(q, dependency, function(err, paths) {
24+
if (err) {
25+
errors.push(err);
26+
return callback(err);
27+
}
28+
console.log(paths);
29+
});
30+
}, 5);
31+
q.drain = function() {
32+
if (errors.length > 0) {
33+
return callback(errors);
34+
}
35+
return callback();
36+
};
37+
38+
packageJson.java.dependencies.forEach(function(d) {
39+
q.push(d);
40+
});
41+
});
42+
};
43+
44+
function resolveDependency(dependencyQueue, dependency, callback) {
45+
if (!dependency.groupId) {
46+
return callback(new Error('dependency missing groupId: ' + JSON.stringify(dependency)));
47+
}
48+
if (!dependency.artifactId) {
49+
return callback(new Error('dependency missing artifactId: ' + JSON.stringify(dependency)));
50+
}
51+
if (!dependency.version) {
52+
return callback(new Error('dependency missing version: ' + JSON.stringify(dependency)));
53+
}
54+
55+
console.log('resolving: ' + dependency.groupId + ':' + dependency.artifactId + ':' + dependency.version);
56+
return resolvePom(dependencyQueue, dependency, callback);
57+
}
58+
59+
// http://central.maven.org/maven2/org/apache/lucene/lucene-core/4.9.0/lucene-core-4.9.0.pom
60+
function resolvePom(dependencyQueue, dependency, callback) {
61+
var groupPath = dependency.groupId.replace(/\./g, '/');
62+
var pomDir = path.join(process.cwd(), 'java_modules', groupPath, dependency.artifactId, dependency.version);
63+
var pomFilename = dependency.artifactId + '-' + dependency.version + '.pom';
64+
var pomPath = path.join(pomDir, pomFilename);
65+
return fs.exists(pomPath, function(exists) {
66+
if (exists) {
67+
return loadFile();
68+
} else {
69+
return downloadPom();
70+
}
71+
});
72+
73+
function loadFile() {
74+
return fs.readFile(pomPath, 'utf8', function(err, data) {
75+
if (err) {
76+
return callback(err);
77+
}
78+
return processPom(data);
79+
});
80+
}
81+
82+
function downloadPom() {
83+
var url = 'http://central.maven.org/maven2/' + groupPath + '/' + dependency.artifactId + '/' + dependency.version + '/' + pomFilename;
84+
console.log('downloading: ' + url);
85+
return request(url, function(err, data) {
86+
if (err) {
87+
return callback(err);
88+
}
89+
var body = data.body;
90+
return mkdirp(pomDir, function(err) {
91+
if (err) {
92+
return callback(err);
93+
}
94+
return fs.writeFile(pomPath, body, function(err) {
95+
if (err) {
96+
return callback(err);
97+
}
98+
return processPom(body);
99+
});
100+
});
101+
});
102+
}
103+
104+
function processPom(data) {
105+
return xml2js.parseString(data, function(err, xml) {
106+
if (err) {
107+
return callback(err);
108+
}
109+
// TODO load dependencies
110+
// console.log(xml);
111+
});
112+
}
113+
}
114+
115+
function readPackageJson(callback) {
116+
return fs.readFile('package.json', 'utf8', function(err, packageJsonString) {
117+
if (err) {
118+
return callback(err);
119+
}
120+
try {
121+
var packageJson = JSON.parse(packageJsonString);
122+
} catch (ex) {
123+
return callback(ex);
124+
}
125+
126+
if (!packageJson.java) {
127+
return callback(new Error("Could not find java property in package.json"));
128+
}
129+
130+
return callback(null, packageJson);
131+
});
132+
}

package.json

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
{
2+
"name": "node-java-maven",
3+
"version": "0.0.1",
4+
"description": "Utility for Node's java module to load mvn dependencies.",
5+
"main": "index.js",
6+
"scripts": {
7+
"test": "echo \"Error: no test specified\" && exit 1"
8+
},
9+
"keywords": [
10+
"java",
11+
"maven",
12+
"mvn"
13+
],
14+
"author": "Joe Ferner <[email protected]>",
15+
"license": "MIT",
16+
"dependencies": {
17+
"async": "^0.9.0",
18+
"mkdirp": "^0.5.0",
19+
"request": "^2.37.0",
20+
"xml2js": "^0.4.4"
21+
}
22+
}

0 commit comments

Comments
 (0)