您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

Build.java 20KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534
  1. /*
  2. * Copyright 2011 gitblit.com.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. */
  16. package com.gitblit.build;
  17. import java.io.BufferedInputStream;
  18. import java.io.ByteArrayOutputStream;
  19. import java.io.File;
  20. import java.io.FileInputStream;
  21. import java.io.FileWriter;
  22. import java.io.IOException;
  23. import java.io.InputStream;
  24. import java.io.RandomAccessFile;
  25. import java.net.URL;
  26. import java.text.MessageFormat;
  27. import java.util.ArrayList;
  28. import java.util.Collections;
  29. import java.util.HashMap;
  30. import java.util.List;
  31. import java.util.Map;
  32. import java.util.Properties;
  33. import com.gitblit.Constants;
  34. import com.gitblit.utils.StringUtils;
  35. /**
  36. * The Build class downloads runtime and compile-time jar files from the Apache
  37. * or Eclipse Maven repositories.
  38. *
  39. * It also generates the Keys class from the gitblit.properties file.
  40. *
  41. * Its important that this class have minimal compile dependencies since its
  42. * called very early in the build script.
  43. *
  44. * @author James Moger
  45. *
  46. */
  47. public class Build {
  48. /**
  49. * BuildType enumeration representing compile-time or runtime. This is used
  50. * to download dependencies either for Gitblit GO runtime or for setting up
  51. * a development environment.
  52. */
  53. public static enum BuildType {
  54. RUNTIME, COMPILETIME;
  55. }
  56. public static void main(String... args) {
  57. runtime();
  58. compiletime();
  59. buildSettingKeys();
  60. }
  61. public static void runtime() {
  62. downloadFromApache(MavenObject.JCOMMANDER, BuildType.RUNTIME);
  63. downloadFromApache(MavenObject.JETTY, BuildType.RUNTIME);
  64. downloadFromApache(MavenObject.SERVLET, BuildType.RUNTIME);
  65. downloadFromApache(MavenObject.SLF4JAPI, BuildType.RUNTIME);
  66. downloadFromApache(MavenObject.SLF4LOG4J, BuildType.RUNTIME);
  67. downloadFromApache(MavenObject.LOG4J, BuildType.RUNTIME);
  68. downloadFromApache(MavenObject.WICKET, BuildType.RUNTIME);
  69. downloadFromApache(MavenObject.WICKET_EXT, BuildType.RUNTIME);
  70. downloadFromApache(MavenObject.WICKET_AUTH_ROLES, BuildType.RUNTIME);
  71. downloadFromApache(MavenObject.WICKET_GOOGLE_CHARTS, BuildType.RUNTIME);
  72. downloadFromApache(MavenObject.MARKDOWNPAPERS, BuildType.RUNTIME);
  73. downloadFromApache(MavenObject.BOUNCYCASTLE, BuildType.RUNTIME);
  74. downloadFromApache(MavenObject.BOUNCYCASTLE_MAIL, BuildType.RUNTIME);
  75. downloadFromApache(MavenObject.JSCH, BuildType.RUNTIME);
  76. downloadFromApache(MavenObject.ROME, BuildType.RUNTIME);
  77. downloadFromApache(MavenObject.JDOM, BuildType.RUNTIME);
  78. downloadFromApache(MavenObject.GSON, BuildType.RUNTIME);
  79. downloadFromApache(MavenObject.MAIL, BuildType.RUNTIME);
  80. downloadFromEclipse(MavenObject.JGIT, BuildType.RUNTIME);
  81. downloadFromEclipse(MavenObject.JGIT_HTTP, BuildType.RUNTIME);
  82. }
  83. public static void compiletime() {
  84. downloadFromApache(MavenObject.JUNIT, BuildType.RUNTIME);
  85. downloadFromApache(MavenObject.JCOMMANDER, BuildType.COMPILETIME);
  86. downloadFromApache(MavenObject.JETTY, BuildType.COMPILETIME);
  87. downloadFromApache(MavenObject.SERVLET, BuildType.COMPILETIME);
  88. downloadFromApache(MavenObject.SLF4JAPI, BuildType.COMPILETIME);
  89. downloadFromApache(MavenObject.SLF4LOG4J, BuildType.COMPILETIME);
  90. downloadFromApache(MavenObject.LOG4J, BuildType.COMPILETIME);
  91. downloadFromApache(MavenObject.WICKET, BuildType.COMPILETIME);
  92. downloadFromApache(MavenObject.WICKET_EXT, BuildType.COMPILETIME);
  93. downloadFromApache(MavenObject.WICKET_AUTH_ROLES, BuildType.COMPILETIME);
  94. downloadFromApache(MavenObject.WICKET_GOOGLE_CHARTS, BuildType.COMPILETIME);
  95. downloadFromApache(MavenObject.MARKDOWNPAPERS, BuildType.COMPILETIME);
  96. downloadFromApache(MavenObject.BOUNCYCASTLE, BuildType.COMPILETIME);
  97. downloadFromApache(MavenObject.BOUNCYCASTLE_MAIL, BuildType.COMPILETIME);
  98. downloadFromApache(MavenObject.JSCH, BuildType.COMPILETIME);
  99. downloadFromApache(MavenObject.ROME, BuildType.COMPILETIME);
  100. downloadFromApache(MavenObject.JDOM, BuildType.COMPILETIME);
  101. downloadFromApache(MavenObject.GSON, BuildType.COMPILETIME);
  102. downloadFromApache(MavenObject.MAIL, BuildType.COMPILETIME);
  103. downloadFromEclipse(MavenObject.JGIT, BuildType.COMPILETIME);
  104. downloadFromEclipse(MavenObject.JGIT_HTTP, BuildType.COMPILETIME);
  105. // needed for site publishing
  106. downloadFromApache(MavenObject.COMMONSNET, BuildType.RUNTIME);
  107. }
  108. public static void federationClient() {
  109. downloadFromApache(MavenObject.JCOMMANDER, BuildType.RUNTIME);
  110. downloadFromApache(MavenObject.SERVLET, BuildType.RUNTIME);
  111. downloadFromApache(MavenObject.MAIL, BuildType.RUNTIME);
  112. downloadFromApache(MavenObject.SLF4JAPI, BuildType.RUNTIME);
  113. downloadFromApache(MavenObject.SLF4LOG4J, BuildType.RUNTIME);
  114. downloadFromApache(MavenObject.LOG4J, BuildType.RUNTIME);
  115. downloadFromApache(MavenObject.GSON, BuildType.RUNTIME);
  116. downloadFromApache(MavenObject.JSCH, BuildType.RUNTIME);
  117. downloadFromEclipse(MavenObject.JGIT, BuildType.RUNTIME);
  118. }
  119. /**
  120. * Builds the Keys class based on the gitblit.properties file and inserts
  121. * the class source into the project source folder.
  122. */
  123. public static void buildSettingKeys() {
  124. // Load all keys
  125. Properties properties = new Properties();
  126. FileInputStream is = null;
  127. try {
  128. is = new FileInputStream(Constants.PROPERTIES_FILE);
  129. properties.load(is);
  130. } catch (Throwable t) {
  131. t.printStackTrace();
  132. } finally {
  133. if (is != null) {
  134. try {
  135. is.close();
  136. } catch (Throwable t) {
  137. // IGNORE
  138. }
  139. }
  140. }
  141. List<String> keys = new ArrayList<String>(properties.stringPropertyNames());
  142. Collections.sort(keys);
  143. // Determine static key group classes
  144. Map<String, List<String>> staticClasses = new HashMap<String, List<String>>();
  145. staticClasses.put("", new ArrayList<String>());
  146. for (String key : keys) {
  147. String clazz = "";
  148. String field = key;
  149. if (key.indexOf('.') > -1) {
  150. clazz = key.substring(0, key.indexOf('.'));
  151. field = key.substring(key.indexOf('.') + 1);
  152. }
  153. if (!staticClasses.containsKey(clazz)) {
  154. staticClasses.put(clazz, new ArrayList<String>());
  155. }
  156. staticClasses.get(clazz).add(field);
  157. }
  158. // Assemble Keys source file
  159. StringBuilder sb = new StringBuilder();
  160. sb.append("package com.gitblit;\n");
  161. sb.append('\n');
  162. sb.append("/*\n");
  163. sb.append(" * This class is auto-generated from the properties file.\n");
  164. sb.append(" * Do not version control!\n");
  165. sb.append(" */\n");
  166. sb.append("public final class Keys {\n");
  167. sb.append('\n');
  168. List<String> classSet = new ArrayList<String>(staticClasses.keySet());
  169. Collections.sort(classSet);
  170. for (String clazz : classSet) {
  171. List<String> keySet = staticClasses.get(clazz);
  172. if (clazz.equals("")) {
  173. // root keys
  174. for (String key : keySet) {
  175. sb.append(MessageFormat.format(
  176. "\tpublic static final String {0} = \"{1}\";\n\n",
  177. key.replace('.', '_'), key));
  178. }
  179. } else {
  180. // class keys
  181. sb.append(MessageFormat.format("\tpublic static final class {0} '{'\n\n", clazz));
  182. sb.append(MessageFormat.format(
  183. "\t\tpublic static final String _ROOT = \"{0}\";\n\n", clazz));
  184. for (String key : keySet) {
  185. sb.append(MessageFormat.format(
  186. "\t\tpublic static final String {0} = \"{1}\";\n\n",
  187. key.replace('.', '_'), clazz + "." + key));
  188. }
  189. sb.append("\t}\n\n");
  190. }
  191. }
  192. sb.append('}');
  193. // Save Keys class definition
  194. try {
  195. File file = new File("src/com/gitblit/Keys.java");
  196. FileWriter fw = new FileWriter(file, false);
  197. fw.write(sb.toString());
  198. fw.close();
  199. } catch (Throwable t) {
  200. t.printStackTrace();
  201. }
  202. }
  203. /**
  204. * Download a file from the official Apache Maven repository.
  205. *
  206. * @param mo
  207. * the maven object to download.
  208. * @return
  209. */
  210. private static List<File> downloadFromApache(MavenObject mo, BuildType type) {
  211. return downloadFromMaven("http://repo1.maven.org/maven2/", mo, type);
  212. }
  213. /**
  214. * Download a file from the official Eclipse Maven repository.
  215. *
  216. * @param mo
  217. * the maven object to download.
  218. * @return
  219. */
  220. private static List<File> downloadFromEclipse(MavenObject mo, BuildType type) {
  221. return downloadFromMaven("http://download.eclipse.org/jgit/maven/", mo, type);
  222. }
  223. /**
  224. * Download a file from a Maven repository.
  225. *
  226. * @param mo
  227. * the maven object to download.
  228. * @return
  229. */
  230. private static List<File> downloadFromMaven(String mavenRoot, MavenObject mo, BuildType type) {
  231. List<File> downloads = new ArrayList<File>();
  232. String[] jars = { "" };
  233. if (BuildType.RUNTIME.equals(type)) {
  234. jars = new String[] { "" };
  235. } else if (BuildType.COMPILETIME.equals(type)) {
  236. jars = new String[] { "-sources", "-javadoc" };
  237. }
  238. for (String jar : jars) {
  239. File targetFile = mo.getLocalFile("ext", jar);
  240. if (targetFile.exists()) {
  241. downloads.add(targetFile);
  242. continue;
  243. }
  244. String expectedSHA1 = mo.getSHA1(jar);
  245. if (expectedSHA1 == null) {
  246. // skip this jar
  247. continue;
  248. }
  249. float approximateLength = mo.getApproximateLength(jar);
  250. String mavenURL = mavenRoot + mo.getRepositoryPath(jar);
  251. if (!targetFile.getAbsoluteFile().getParentFile().exists()) {
  252. boolean success = targetFile.getAbsoluteFile().getParentFile().mkdirs();
  253. if (!success) {
  254. throw new RuntimeException("Failed to create destination folder structure!");
  255. }
  256. }
  257. ByteArrayOutputStream buff = new ByteArrayOutputStream();
  258. try {
  259. URL url = new URL(mavenURL);
  260. InputStream in = new BufferedInputStream(url.openStream());
  261. byte[] buffer = new byte[4096];
  262. int downloadedLen = 0;
  263. float lastProgress = 0f;
  264. updateDownload(0, targetFile);
  265. while (true) {
  266. int len = in.read(buffer);
  267. if (len < 0) {
  268. break;
  269. }
  270. downloadedLen += len;
  271. buff.write(buffer, 0, len);
  272. float progress = downloadedLen / approximateLength;
  273. if (progress - lastProgress >= 0.1f) {
  274. lastProgress = progress;
  275. updateDownload(progress, targetFile);
  276. }
  277. }
  278. in.close();
  279. updateDownload(1f, targetFile);
  280. } catch (IOException e) {
  281. throw new RuntimeException("Error downloading " + mavenURL + " to " + targetFile, e);
  282. }
  283. byte[] data = buff.toByteArray();
  284. String calculatedSHA1 = StringUtils.getSHA1(data);
  285. System.out.println();
  286. if (expectedSHA1.length() == 0) {
  287. updateProgress(0, "sha: " + calculatedSHA1);
  288. System.out.println();
  289. } else {
  290. if (!calculatedSHA1.equals(expectedSHA1)) {
  291. throw new RuntimeException("SHA1 checksum mismatch; got: " + calculatedSHA1);
  292. }
  293. }
  294. try {
  295. RandomAccessFile ra = new RandomAccessFile(targetFile, "rw");
  296. ra.write(data);
  297. ra.setLength(data.length);
  298. ra.close();
  299. } catch (IOException e) {
  300. throw new RuntimeException("Error writing to file " + targetFile, e);
  301. }
  302. downloads.add(targetFile);
  303. }
  304. return downloads;
  305. }
  306. private static void updateDownload(float progress, File file) {
  307. updateProgress(progress, "d/l: " + file.getName());
  308. }
  309. private static void updateProgress(float progress, String url) {
  310. String anim = "==========";
  311. int width = Math.round(anim.length() * progress);
  312. System.out.print("\r[");
  313. System.out.print(anim.substring(0, Math.min(width, anim.length())));
  314. for (int i = 0; i < anim.length() - width; i++) {
  315. System.out.print(' ');
  316. }
  317. System.out.print("] " + url);
  318. }
  319. /**
  320. * MavenObject represents a complete maven artifact (binary, sources, and
  321. * javadoc). MavenObjects can be downloaded and checksummed to confirm
  322. * authenticity.
  323. */
  324. private static class MavenObject {
  325. public static final MavenObject JCOMMANDER = new MavenObject("jCommander", "com/beust",
  326. "jcommander", "1.17", 34000, 32000, 141000,
  327. "219a3540f3b27d7cc3b1d91d6ea046cd8723290e",
  328. "0bb50eec177acf0e94d58e0cf07262fe5164331d",
  329. "c7adc475ca40c288c93054e0f4fe58f3a98c0cb5");
  330. public static final MavenObject JETTY = new MavenObject("Jetty",
  331. "org/eclipse/jetty/aggregate", "jetty-webapp", "7.4.3.v20110701", 1000000, 680000,
  332. 2720000, "bde072b178f9650e2308f0babe58a4baaa469e3c",
  333. "bc75f05dd4f7fa848720ac669b8b438ee4a6b146",
  334. "dcd42f672e734521d1a6ccc0c2f9ecded1a1a281");
  335. public static final MavenObject SERVLET = new MavenObject("Servlet 3.0", "org/glassfish",
  336. "javax.servlet", "3.0.1", 84000, 211000, 0,
  337. "58f17c941cd0607bb5edcbcafc491d02265ac9a1",
  338. "63f2f8bcdd3f138020bbadd5c847e8f3847b77d2", null);
  339. public static final MavenObject SLF4JAPI = new MavenObject("SLF4J API", "org/slf4j",
  340. "slf4j-api", "1.6.1", 25500, 45000, 182000,
  341. "6f3b8a24bf970f17289b234284c94f43eb42f0e4",
  342. "46a386136c901748e6a3af67ebde6c22bc6b4524",
  343. "e223571d77769cdafde59040da235842f3326453");
  344. public static final MavenObject SLF4LOG4J = new MavenObject("SLF4J LOG4J", "org/slf4j",
  345. "slf4j-log4j12", "1.6.1", 9800, 9500, 52400,
  346. "bd245d6746cdd4e6203e976e21d597a46f115802",
  347. "7a26b08b265f55622fa1fed3bda68bbd37a465ba",
  348. "6e4b16bce7994e3692e82002f322a0dd2f32741e");
  349. public static final MavenObject LOG4J = new MavenObject("Apache LOG4J", "log4j", "log4j",
  350. "1.2.16", 481000, 471000, 1455000, "7999a63bfccbc7c247a9aea10d83d4272bd492c6",
  351. "bf945d1dc995be7fe64923625f842fbb6bf443be",
  352. "78aa1cbf0fa3b259abdc7d87f9f6788d785aac2a");
  353. public static final MavenObject WICKET = new MavenObject("Apache Wicket",
  354. "org/apache/wicket", "wicket", "1.4.18", 1960000, 1906000, 6818000,
  355. "921a50dbbebdf034f0042f2294760e7535cb7041",
  356. "b432d60b32449fdfb216ac23af8a3ed3e0a3368c",
  357. "435e70f9de94975ee30c3f1b1aa1401aea9b4e70");
  358. public static final MavenObject WICKET_EXT = new MavenObject("Apache Wicket Extensions",
  359. "org/apache/wicket", "wicket-extensions", "1.4.18", 1180000, 1118000, 1458000,
  360. "f568bd2ad382db935ab06fdccfdead3f10ed1f15",
  361. "c00a4979d7647d3367c6e4897a2fd7d0f78a73cc",
  362. "5e76ab69f6307e3ecb2638779008b3adf5cbf9aa");
  363. public static final MavenObject WICKET_AUTH_ROLES = new MavenObject(
  364. "Apache Wicket Auth Roles", "org/apache/wicket", "wicket-auth-roles", "1.4.18",
  365. 44000, 45000, 166000, "44cf0647e1adca377cc4258cd7fac33aa1dd11ab",
  366. "2a7e9c6a9687136c2527afa2e53148cfa82696c6",
  367. "6e280995097e84b72b283132b8fe6796595caa38");
  368. public static final MavenObject WICKET_GOOGLE_CHARTS = new MavenObject(
  369. "Apache Wicket Google Charts Add-On", "org/wicketstuff", "googlecharts", "1.4.18",
  370. 34000, 18750, 161000, "1f763cc8a04e62840b63787a77a479b04ad99c75",
  371. "1521ed6397192c464e89787502f937bc96ece8f8",
  372. "8b0398d58bce63ba7f7a9232c4ca24160c9b1a11");
  373. public static final MavenObject JUNIT = new MavenObject("JUnit", "junit", "junit", "4.8.2",
  374. 237000, 0, 0, "c94f54227b08100974c36170dcb53329435fe5ad", "", "");
  375. public static final MavenObject MARKDOWNPAPERS = new MavenObject("MarkdownPapers",
  376. "org/tautua/markdownpapers", "markdownpapers-core", "1.2.3", 87000, 58000, 278000,
  377. "657ff8e54936a25a6d8a53c2b12213cada10594a",
  378. "1c60eb17b4a4547f87fb13adad2c3f204a54003c",
  379. "760d0dac5b3529c5fcd13075f2097bf81ad0e6ce");
  380. public static final MavenObject BOUNCYCASTLE = new MavenObject("BouncyCastle",
  381. "org/bouncycastle", "bcprov-jdk16", "1.46", 1900000, 1400000, 4670000,
  382. "ce091790943599535cbb4de8ede84535b0c1260c",
  383. "d2b70567594225923450d7e3f80cd022c852725e",
  384. "873a6fe765f33fc27df498a5d1f5bf077e503b2f");
  385. public static final MavenObject BOUNCYCASTLE_MAIL = new MavenObject("BouncyCastle Mail",
  386. "org/bouncycastle", "bcmail-jdk16", "1.46", 502000, 420000, 482000,
  387. "08a9233bfd6ad38ea32df5e6ff91035b650584b9",
  388. "3ebd62bc56854767512dc5deec0a17795f2e671d",
  389. "3b7c5f3938f202311bdca0bf7ed46bc0118af081");
  390. public static final MavenObject JGIT = new MavenObject("JGit", "org/eclipse/jgit",
  391. "org.eclipse.jgit", "1.1.0.201109151100-r", 1318000, 1354000, 3300000,
  392. "bacc988346c839f79513d7bc7f5c88b22ea6e7a5",
  393. "90abf988d98ce0d4b162f94f63fc99c435eba6b4",
  394. "a46540a2857a0fdbf43debf3383295a897946c79");
  395. public static final MavenObject JGIT_HTTP = new MavenObject("JGit", "org/eclipse/jgit",
  396. "org.eclipse.jgit.http.server", "1.1.0.201109151100-r", 68000, 62000, 110000,
  397. "3070161a89756aac2dfc2e26d89faf31fe894ab4",
  398. "9cecb8e4351e616688cafbcca906f542d9b1f525",
  399. "20aaab759acd8eb6cb6acbb1b2934a689fb3774d");
  400. public static final MavenObject JSCH = new MavenObject("JSch", "com/jcraft", "jsch",
  401. "0.1.44-1", 214000, 211000, 413000, "2e9ae08de5a71bd0e0d3ba2558598181bfa71d4e",
  402. "e528f593b19b04d500992606f58b87fcfded8883",
  403. "d0ffadd0a4ab909d94a577b5aad43c13b617ddcb");
  404. public static final MavenObject COMMONSNET = new MavenObject("commons-net", "commons-net",
  405. "commons-net", "1.4.0", 181000, 0, 0, "eb47e8cad2dd7f92fd7e77df1d1529cae87361f7",
  406. "", "");
  407. public static final MavenObject ROME = new MavenObject("rome", "rome", "rome", "0.9",
  408. 208000, 196000, 407000, "dee2705dd01e79a5a96a17225f5a1ae30470bb18",
  409. "226f851dc44fd94fe70b9c471881b71f88949cbf",
  410. "8d7d867b97eeb3a9196c3926da550ad042941c1b");
  411. public static final MavenObject JDOM = new MavenObject("jdom", "org/jdom", "jdom", "1.1",
  412. 153000, 235000, 445000, "1d04c0f321ea337f3661cf7ede8f4c6f653a8fdd",
  413. "a7ed425c4c46605b8f2bf2ee118c1609682f4f2c",
  414. "f3df91edccba2f07a0fced70887c2f7b7836cb75");
  415. public static final MavenObject GSON = new MavenObject("gson", "com/google/code/gson",
  416. "gson", "1.7.1", 174000, 142000, 247000,
  417. "0697e3a1fa094a983cd12f7f6f61abf9c6ea52e2",
  418. "51f6f78aec2d30d0c2bfb4a5f00d456a6f7a5e7e",
  419. "f0872fe17d484815328538b89909d5e46d85db74");
  420. public static final MavenObject MAIL = new MavenObject("javax.mail", "javax/mail", "mail",
  421. "1.4.3", 462000, 642000, 0, "8154bf8d666e6db154c548dc31a8d512c273f5ee",
  422. "5875e2729de83a4e46391f8f979ec8bd03810c10", null);
  423. public final String name;
  424. public final String group;
  425. public final String artifact;
  426. public final String version;
  427. public final int approxLibraryLen;
  428. public final int approxSourcesLen;
  429. public final int approxJavadocLen;
  430. public final String librarySHA1;
  431. public final String sourcesSHA1;
  432. public final String javadocSHA1;
  433. private MavenObject(String name, String group, String artifact, String version,
  434. int approxLibraryLen, int approxSourcesLen, int approxJavadocLen,
  435. String librarySHA1, String sourcesSHA1, String javadocSHA1) {
  436. this.name = name;
  437. this.group = group;
  438. this.artifact = artifact;
  439. this.version = version;
  440. this.approxLibraryLen = approxLibraryLen;
  441. this.approxSourcesLen = approxSourcesLen;
  442. this.approxJavadocLen = approxJavadocLen;
  443. this.librarySHA1 = librarySHA1;
  444. this.sourcesSHA1 = sourcesSHA1;
  445. this.javadocSHA1 = javadocSHA1;
  446. }
  447. private String getRepositoryPath(String jar) {
  448. return group + "/" + artifact + "/" + version + "/" + artifact + "-" + version + jar
  449. + ".jar";
  450. }
  451. private File getLocalFile(String basePath, String jar) {
  452. return new File(basePath, artifact + "-" + version + jar + ".jar");
  453. }
  454. private String getSHA1(String jar) {
  455. if (jar.equals("")) {
  456. return librarySHA1;
  457. } else if (jar.equals("-sources")) {
  458. return sourcesSHA1;
  459. } else if (jar.equals("-javadoc")) {
  460. return javadocSHA1;
  461. }
  462. return librarySHA1;
  463. }
  464. private int getApproximateLength(String jar) {
  465. if (jar.equals("")) {
  466. return approxLibraryLen;
  467. } else if (jar.equals("-sources")) {
  468. return approxSourcesLen;
  469. } else if (jar.equals("-javadoc")) {
  470. return approxJavadocLen;
  471. }
  472. return approxLibraryLen;
  473. }
  474. @Override
  475. public String toString() {
  476. return name;
  477. }
  478. }
  479. }