Gentoo Archives: gentoo-commits

From: "Michał Górny" <mgorny@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/java-ebuilder:master commit in: scripts/, /, src/main/java/org/gentoo/java/ebuilder/maven/, ...
Date: Wed, 30 Oct 2019 17:35:25
Message-Id: 1475681519.96d9679d0a19f3bbaf404005465b924eb3018e08.mgorny@gentoo
1 commit: 96d9679d0a19f3bbaf404005465b924eb3018e08
2 Author: heroxbd <heroxbd <AT> gmail <DOT> com>
3 AuthorDate: Wed Oct 5 15:31:59 2016 +0000
4 Commit: Michał Górny <mgorny <AT> gentoo <DOT> org>
5 CommitDate: Wed Oct 5 15:31:59 2016 +0000
6 URL: https://gitweb.gentoo.org/proj/java-ebuilder.git/commit/?id=96d9679d
7
8 Major updates to resolve dependency (#8)
9
10 * MavenEbuilder: mavenProject targetversion is not an array.
11
12 * MavenVersion: expand regex.
13
14 1. match 3.1.4.GA (org.jboss.logging:jboss-logging)
15 2. match 2.0b6 (org.apache-extras.beanshell:bsh)
16
17 * MavenCache: artifactId may not be identical to gentoo package.
18
19 * MavenCache: give explicit error messages as place holders when
20 dependency is missing.
21
22 * script/meta.sh: auxiliary script to relate gentoo repo to maven
23 repo metadata.
24
25 * Specify the default jre version.
26
27 * tree.sh: recursively call java-ebuilder.
28
29 * meta.sh: use maven to enumerate child modules.
30
31 * meta.sh: add more exceptions.
32
33 * MavenEbuilder.java: handle SLOT dependency according to ebuild styles.
34
35 If SLOT=0, no SLOT is used in CLASSPATH.
36
37 * MavenEbuilder.java: remove JAVA_SRC_DIR.
38
39 Not needed. The default is enough.
40 Because we have one ebuild per child module.
41
42 * MavenParser.java: mvn timeout to 10minutes.
43
44 When something cannot be downloaded, maven could use several minutes
45 to finish.
46
47 * MavenParser.java: let scope default to "compile".
48
49 It is interpreted as common dependencies. Some poms does not
50 specify scopes of their dependencies.
51
52 * MavenParser.java: remove maven build instructions.
53
54 They are not used at all. Parsing them can cause error in some poms.
55
56 The side effect is that testdependencies are not triggered.
57
58 * MavenProject.java: remove system dependencies.
59
60 They are deprecated:
61
62 https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#System_Dependencies
63
64 They are satisfied by virtual/jdk.
65
66 * MavenProject.java: source encoding default to UTF-8.
67
68 * PortageParser.java: consider dev-java/ant-* ebuilds.
69
70 * MavenParser.java: parse opengl-api version from pom.
71
72 README | 23 +++++
73 scripts/meta.sh | 101 +++++++++++++++++++
74 scripts/tree.sh | 111 +++++++++++++++++++++
75 .../org/gentoo/java/ebuilder/maven/MavenCache.java | 6 +-
76 .../gentoo/java/ebuilder/maven/MavenEbuilder.java | 23 +++--
77 .../gentoo/java/ebuilder/maven/MavenParser.java | 14 +--
78 .../gentoo/java/ebuilder/maven/MavenProject.java | 6 +-
79 .../gentoo/java/ebuilder/portage/MavenVersion.java | 2 +-
80 .../java/ebuilder/portage/PortageParser.java | 6 ++
81 9 files changed, 269 insertions(+), 23 deletions(-)
82
83 diff --git a/README b/README
84 new file mode 100644
85 index 0000000..e74f482
86 --- /dev/null
87 +++ b/README
88 @@ -0,0 +1,23 @@
89 +Java team tool for semi-automatic creation of ebuilds from pom.xml.
90 +
91 +Use example:
92 +
93 +1. Generate cache of java related packages from portage tree.
94 +java-ebuilder --refresh-cache -t /usr/portage
95 +
96 +2. Find corresponding maven groupId, artifactId and version in the cache.
97 +cd $HOME/.java-ebuilder
98 +mv cache cache.raw0
99 +( echo 1.0; tail -n +2 cache.raw0 | parallel -j -2 scripts/meta.sh; ) > cache.0
100 +
101 +3. Generate cache of java related packages from java overaly.
102 +java-ebuilder --refresh-cache -t /var/lib/layman/java
103 +
104 +4. Find corresponding maven groupId, artifactId and version in the cache.
105 +cd $HOME/.java-ebuilder
106 +mv cache cache.raw1
107 +( echo 1.0; tail -n +2 cache.raw1 | parallel -j -2 scripts/meta.sh; ) > cache.1
108 +
109 +5. Create ebuild recursively.
110 +script/tree.sh org.apache.spark:spark-core_2.11:2.0.0
111 +
112
113 diff --git a/scripts/meta.sh b/scripts/meta.sh
114 new file mode 100755
115 index 0000000..0a142c8
116 --- /dev/null
117 +++ b/scripts/meta.sh
118 @@ -0,0 +1,101 @@
119 +#!/usr/bin/env bash
120 +# read in cache from java-ebuilder and find out the groupId,
121 +# artifactId and version.
122 +
123 +# cache is by default at $HOME/.java-ebuilder/cache
124 +# example:
125 +# ( echo 1.0; tail -n +2 cache | parallel -j -2 meta.sh; ) > cache.1
126 +
127 +pkg=$(awk -F ":" '{print $1"/"$2"-"$3}' <<< $1)
128 +spkg=$(cut -d: -f2 <<< $1)
129 +sver=$(cut -d: -f3 <<< $1)
130 +case ${spkg} in
131 + guava)
132 + echo $1:com.google.guava:${spkg}:${sver%%-*}
133 + exit 0
134 + ;;
135 + json)
136 + echo $1:org.json:${spkg}:${sver%%-*}
137 + exit 0
138 + ;;
139 + xerces)
140 + echo $1:xerces:${spkg}:${sver%%-*}
141 + echo $1:xerces:xercesImpl:${sver%%-*}
142 + echo $1:xerces:xmlParserAPIs:${sver%%-*}
143 + exit 0
144 + ;;
145 + commons-*|classworlds|jdom)
146 + echo $1:${spkg}:${spkg}:${sver%%-*}
147 + exit 0
148 + ;;
149 + velocity)
150 + echo $1:org.apache.${spkg}:${spkg}:${sver%%-*}
151 + exit 0
152 + ;;
153 + jtidy)
154 + echo $1:net.sf.${spkg}:${spkg}:${sver%%-*}
155 + exit 0
156 + ;;
157 + saxpath)
158 + echo $1:${spkg}:${spkg}:${sver%%-*}-FCS # maven version
159 + echo $1:org.jdom:${spkg}:${sver%%-*}-FCS
160 + exit 0
161 + ;;
162 + ant*)
163 + [[ ${spkg} = ant-core ]] && { spkg=ant; echo $1:ant:${spkg}:${sver%%-*}; }
164 + [[ ${spkg} = ant-ivy ]] && spkg=ivy
165 + echo $1:org.apache.ant:${spkg}:${sver%%-*}
166 + exit 0
167 + ;;
168 + bcpg|bcprov)
169 + echo $1:org.bouncycastle:${spkg}-jdk12:130
170 + for jv in 1{4,5,6}; do
171 + echo $1:org.bouncycastle:${spkg}-jdk${jv}:${sver%%-*}
172 + done
173 + exit 0
174 + ;;
175 + asm)
176 + echo $1:org.ow2.asm:${spkg}:${sver%%-*}
177 + echo $1:org.ow2.asm:${spkg}-all:${sver%%-*}
178 + echo $1:org.ow2.asm:${spkg}-debug-all:${sver%%-*}
179 + exit 0
180 +esac
181 +
182 +grep -q ${pkg} <bebd <bpom && exit 0
183 +
184 +ebd=$(equery w ${pkg} 2>/dev/null)
185 +if [[ -z "${ebd}" ]]; then
186 + echo $1:${pkg} >> bebd
187 + exit 0
188 +fi
189 +
190 +# java-utils-2.eclass:java-pkg_needs-vm()
191 +export JAVA_PKG_NV_DEPEND="nothing"
192 +
193 +if ! ebuild ${ebd} unpack >/dev/null 2>&1; then
194 + echo $1:${pkg} >> bebd
195 + exit 0
196 +fi
197 +
198 +bad_pom="yes"
199 +for subd in /dev/shm/portage/${pkg}/work/*; do
200 + [[ -f ${subd}/pom.xml ]] || continue
201 + bad_pom=""
202 + pushd ${subd} > /dev/null
203 + poms=$(mvn -q --also-make exec:exec -Dexec.executable="pwd" 2> /dev/null | grep ^/)
204 + popd > /dev/null
205 + for pd in ${poms}; do
206 + ppom=$(xml2 < ${pd}/pom.xml | egrep '(groupId|artifactId|version)=')
207 + PG=$(echo "${ppom}" | sed -n -r -e 's,/project/groupId=(.*),\1,p')
208 + [[ -z ${PG} ]] && PG=$(echo "${ppom}" | sed -n -r -e 's,/project/parent/groupId=(.*),\1,p')
209 + PA=$(echo "${ppom}" | sed -n -r -e 's,/project/artifactId=(.*),\1,p')
210 + PV=$(echo "${ppom}" | sed -n -r -e 's,/project/version=(.*),\1,p')
211 + [[ -z ${PV} ]] && PV=$(echo "${ppom}" | sed -n -r -e 's,/project/parent/version=(.*),\1,p')
212 + echo $1:${PG}:${PA}:${PV/-SNAPSHOT/}
213 + done
214 +done
215 +if [[ -n "${bad_pom}" ]]; then
216 + echo $1:${pkg} >> bpom
217 +fi
218 +
219 +ebuild ${ebd} clean >/dev/null 2>&1
220
221 diff --git a/scripts/tree.sh b/scripts/tree.sh
222 new file mode 100755
223 index 0000000..5482a0b
224 --- /dev/null
225 +++ b/scripts/tree.sh
226 @@ -0,0 +1,111 @@
227 +#!/usr/bin/env bash
228 +# start from the root of a maven artifact and recursively resolve its
229 +# dependencies.
230 +
231 +mkdir -p ../poms
232 +
233 +gebd() {
234 + case ${MA} in
235 + weld-osgi-bundle)
236 + # 1.1.0.Final no longer exist
237 + [[ ${MV} = 1.1.0.Final ]] && MV=1.1.33.Final
238 + ;;
239 + esac
240 +
241 + local WORKDIR=${PG//./\/}/${MA} MID
242 + local MID=${PG}:${MA}:${MV}
243 + # .Final .GA .v20121024 means nothing
244 + local PV=${MV%.[a-zA-Z]*} PA SLOT
245 +
246 + case ${MA} in
247 + opengl-api)
248 + [[ ${MV} = 2.1.1 ]] && MV=gl1.1-android-2.1_r1
249 + ;;
250 + esac
251 +
252 + # plexus-container-default 1.0-alpha-9-stable-1
253 + PV=${PV/-stable-*/}
254 + PV=${PV/-alpha-/_alpha}
255 + # wagon-provider-api 1.0-beta-7
256 + PV=${PV/-beta-/_beta}
257 + # aopalliance-repackaged 2.5.0-b16
258 + PV=${PV/-b/_beta}
259 + # javax.xml.stream:stax-api:1.0-2
260 + PV=${PV//-/.}
261 +
262 + local M=${MA}-${MV}
263 + local SRC_URI="http://central.maven.org/maven2/${WORKDIR}/${MV}/${M}-sources.jar"
264 +
265 + # spark-launcher_2.11 for scala 2.11
266 + eval $(sed -nr 's,([^_]*)(_(.*))?,PA=\1 SLOT=\3,p' <<< ${MA})
267 + [[ -z "${SLOT}" ]] && eval $(sed -nr 's,(.*)-(([0-9]+\.)?[0-9]+),PA=\1 SLOT=\2,p' <<< ${MA})
268 + [[ -z "${SLOT}" ]] && PA=${MA}
269 + PA=${PA//./-}
270 + PA=${PA//_/-}
271 + local P=${PA}-${PV}
272 + local ebd=app-maven/${PA}/${P}.ebuild
273 +
274 + if [[ ! -f ../poms/${M}.pom ]]; then
275 + pushd ../poms
276 + wget ${SRC_URI/-sources.jar/.pom}
277 +
278 + # 3rd party plugin not needed here
279 + # distributionManagement is invalid for maven 3
280 + # net.sf.jtidy:jtidy:r938 version is not maven-compliant
281 + sed -e '/<packaging>bundle/d' \
282 + -e '/<distributionManagement>/,/<\/distributionManagement>/d' \
283 + -e '/<build>/,/<\/build>/d' \
284 + -e '/<modules>/,/<\/modules>/d' \
285 + -e 's,<version>r938</version>,<version>1.0</version>,' \
286 + -i ${M}.pom
287 + popd
288 + fi
289 +
290 + wget -q --spider ${SRC_URI} || SRC_URI=${SRC_URI/-sources.jar/.jar}
291 +
292 + if [[ ! -f app-maven/${PA}/${P}.ebuild ]]; then
293 + mkdir -p app-maven/${PA}
294 + java-ebuilder -p ../poms/${M}.pom -e ${ebd} -g --workdir . \
295 + -u ${SRC_URI} --slot ${SLOT:-0} --keywords ~amd64
296 +
297 + # empty parent artifacts
298 + # FIXME, this should be removed in poms
299 + sed -i '/app-maven\/jsch-agentproxy-[0-9]/d' ${ebd}
300 + fi
301 +
302 + line=app-maven:${PA}:${PV}:${SLOT:-0}::${MID}
303 + if ! grep -q ${line} ${HOME}/.java-ebuilder/maven-cache ; then
304 + pushd ${HOME}/.java-ebuilder > /dev/null
305 + echo ${line} >> maven-cache
306 + cat cache.{0,1} maven-cache > cache
307 + popd > /dev/null
308 + fi
309 +
310 + if [[ -z "${MAVEN_NODEP}" ]] && mfill app-maven/${PA}/${P}.ebuild; then
311 + java-ebuilder -p ../poms/${M}.pom -e ${ebd} -g --workdir . \
312 + -u ${SRC_URI} --slot ${SLOT:-0} --keywords ~amd64
313 + fi
314 +
315 + [[ ${SRC_URI} = *-sources.jar ]] || sed -i "/inherit/s/java-pkg-simple/java-pkg-binjar/" ${ebd}
316 +}
317 +
318 +mfill() {
319 + # recursively fill missing dependencies
320 + arts=$(sed -n -r 's,# (test\? )?(.*)-> !!!.*-not-found!!!,\2,p' < $1)
321 + if [[ -z "${arts}" ]]; then
322 + false # no need to java-ebuilder again
323 + else
324 + for a in ${arts}; do
325 + eval $(awk -F":" '{print "PG="$1, "MA="$2, "MV="$3}' <<< ${a})
326 + gebd
327 + done
328 + return
329 + fi
330 +}
331 +
332 +if [[ $1 == *.ebuild ]]; then
333 + mfill $1
334 +else
335 + eval $(awk -F":" '{print "PG="$1, "MA="$2, "MV="$3}' <<< $1)
336 + gebd
337 +fi
338
339 diff --git a/src/main/java/org/gentoo/java/ebuilder/maven/MavenCache.java b/src/main/java/org/gentoo/java/ebuilder/maven/MavenCache.java
340 index 1c139c1..1295856 100644
341 --- a/src/main/java/org/gentoo/java/ebuilder/maven/MavenCache.java
342 +++ b/src/main/java/org/gentoo/java/ebuilder/maven/MavenCache.java
343 @@ -43,13 +43,13 @@ public class MavenCache {
344 final Map<String, List<CacheItem>> artifactIds = cache.get(groupId);
345
346 if (artifactIds == null) {
347 - return null;
348 + return "!!!groupId-not-found!!!";
349 }
350
351 final List<CacheItem> versions = artifactIds.get(artifactId);
352
353 if (versions == null) {
354 - return null;
355 + return "!!!artifactId-not-found!!!";
356 }
357
358 final MavenVersion mavenVersion = new MavenVersion(version);
359 @@ -156,7 +156,7 @@ public class MavenCache {
360
361 if (versions == null) {
362 versions = new ArrayList<>(10);
363 - artifactIds.put(cacheItem.getPkg(), versions);
364 + artifactIds.put(cacheItem.getArtifactId(), versions);
365 }
366
367 versions.add(cacheItem);
368
369 diff --git a/src/main/java/org/gentoo/java/ebuilder/maven/MavenEbuilder.java b/src/main/java/org/gentoo/java/ebuilder/maven/MavenEbuilder.java
370 index c6e18bd..067ea80 100644
371 --- a/src/main/java/org/gentoo/java/ebuilder/maven/MavenEbuilder.java
372 +++ b/src/main/java/org/gentoo/java/ebuilder/maven/MavenEbuilder.java
373 @@ -72,10 +72,18 @@ public class MavenEbuilder {
374 sbCP.append(',');
375 }
376
377 - sbCP.append(dependency.getSystemDependency().
378 - replaceAll(".*/", "").
379 - replaceAll("\\[.*\\]", "").
380 - replace(":", "-"));
381 + String[] parts = dependency.getSystemDependency().
382 + replaceAll(".*/", "").
383 + replaceAll("\\[.*\\]", "").
384 + split(":");
385 + String PN = parts[0].replaceAll("-r\\d+$", "");
386 + if (parts.length == 2) {
387 + PN = PN.substring(0, PN.lastIndexOf('-'));
388 + if (!parts[1].equals("0")) {
389 + PN += "-" + parts[1];
390 + }
391 + }
392 + sbCP.append(PN);
393 });
394
395 return sbCP.toString();
396 @@ -301,7 +309,7 @@ public class MavenEbuilder {
397 mavenProject.getCommonDependencies(), null);
398 }
399
400 - if (!mavenProject.getTargetVersion().isEmpty()) {
401 + if (mavenProject.getTargetVersion()!=null) {
402 writeDependenciesInfo(writer, mavenProject.getPomFile(),
403 mavenProject.getTestDependencies(), "test?");
404 }
405 @@ -633,11 +641,6 @@ public class MavenEbuilder {
406 writer.println('"');
407 }
408
409 - writer.print("JAVA_SRC_DIR=\"");
410 - writer.print(config.getWorkdir().relativize(
411 - mavenProject.getSourceDirectory()));
412 - writer.println('"');
413 -
414 if (mavenProject.hasResources()) {
415 writer.print("JAVA_RESOURCE_DIRS=\"");
416
417
418 diff --git a/src/main/java/org/gentoo/java/ebuilder/maven/MavenParser.java b/src/main/java/org/gentoo/java/ebuilder/maven/MavenParser.java
419 index 52449dc..ba876f2 100644
420 --- a/src/main/java/org/gentoo/java/ebuilder/maven/MavenParser.java
421 +++ b/src/main/java/org/gentoo/java/ebuilder/maven/MavenParser.java
422 @@ -112,10 +112,10 @@ public class MavenParser {
423 }
424
425 try {
426 - process.waitFor(1, TimeUnit.MINUTES);
427 + process.waitFor(10, TimeUnit.MINUTES);
428 } catch (final InterruptedException ex) {
429 config.getErrorWriter().println("ERROR: mvn process did not finish "
430 - + "within 1 minute, exiting.");
431 + + "within 10 minute, exiting.");
432 Runtime.getRuntime().exit(1);
433 }
434
435 @@ -389,9 +389,6 @@ public class MavenParser {
436 case "artifactId":
437 mavenProject.setArtifactId(reader.getElementText());
438 break;
439 - case "build":
440 - parseProjectBuild(mavenProject, reader);
441 - break;
442 case "dependencies":
443 parseProjectDependencies(mavenProject, mavenCache,
444 reader);
445 @@ -509,7 +506,7 @@ public class MavenParser {
446 String groupId = null;
447 String artifactId = null;
448 String version = null;
449 - String scope = null;
450 + String scope = "compile";
451
452 while (reader.hasNext()) {
453 reader.next();
454 @@ -528,6 +525,11 @@ public class MavenParser {
455 case "version":
456 version = reader.getElementText().replace("-SNAPSHOT",
457 "");
458 + /* crazy version from
459 + * org.khronos:opengl-api:gl1.1-android-2.1_r1 */
460 + if (version.equals("gl1.1-android-2.1_r1")) {
461 + version = "2.1.1";
462 + }
463 break;
464 default:
465 consumeElement(reader);
466
467 diff --git a/src/main/java/org/gentoo/java/ebuilder/maven/MavenProject.java b/src/main/java/org/gentoo/java/ebuilder/maven/MavenProject.java
468 index adec6a6..af05c7c 100644
469 --- a/src/main/java/org/gentoo/java/ebuilder/maven/MavenProject.java
470 +++ b/src/main/java/org/gentoo/java/ebuilder/maven/MavenProject.java
471 @@ -63,7 +63,7 @@ public class MavenProject {
472 /**
473 * Source encoding.
474 */
475 - private String sourceEncoding = "1.7";
476 + private String sourceEncoding = "UTF-8";
477 /**
478 * Source compile version.
479 */
480 @@ -71,7 +71,7 @@ public class MavenProject {
481 /**
482 * Target compile version.
483 */
484 - private String targetVersion;
485 + private String targetVersion = "1.7";
486 /**
487 * Test resource directories.
488 */
489 @@ -155,7 +155,7 @@ public class MavenProject {
490 * @return list of dependencies
491 */
492 public List<MavenDependency> getCompileDependencies() {
493 - return getDependencies(new String[]{"provided", "system"});
494 + return getDependencies(new String[]{"provided"});
495 }
496
497 /**
498
499 diff --git a/src/main/java/org/gentoo/java/ebuilder/portage/MavenVersion.java b/src/main/java/org/gentoo/java/ebuilder/portage/MavenVersion.java
500 index 002ea5a..e603943 100644
501 --- a/src/main/java/org/gentoo/java/ebuilder/portage/MavenVersion.java
502 +++ b/src/main/java/org/gentoo/java/ebuilder/portage/MavenVersion.java
503 @@ -14,7 +14,7 @@ public class MavenVersion implements Comparable<MavenVersion> {
504 * Pattern for parsing maven version number.
505 */
506 private static final Pattern PATTERN_VERSION = Pattern.compile(
507 - "^(\\d+)(?:\\.(\\d+))?(?:\\.(\\d+))?(?:-(.*))?$");
508 + "^(\\d+)(?:\\.(\\d+))?(?:[\\.b](\\d+))?(?:[\\.-](.*))?$");
509 /**
510 * Incremental version number.
511 */
512
513 diff --git a/src/main/java/org/gentoo/java/ebuilder/portage/PortageParser.java b/src/main/java/org/gentoo/java/ebuilder/portage/PortageParser.java
514 index c2cc976..aa8a14b 100644
515 --- a/src/main/java/org/gentoo/java/ebuilder/portage/PortageParser.java
516 +++ b/src/main/java/org/gentoo/java/ebuilder/portage/PortageParser.java
517 @@ -45,6 +45,10 @@ public class PortageParser {
518 * Current java utilities eclass name.
519 */
520 private static final String ECLASS_JAVA_UTILS = "java-utils-2";
521 + /**
522 + * Current ant utilities eclass name.
523 + */
524 + private static final String ECLASS_ANT_TASKS = "ant-tasks";
525 /**
526 * Pattern for parsing SLOT with bash substring.
527 */
528 @@ -126,6 +130,8 @@ public class PortageParser {
529 return ECLASS_JAVA_PKG_SIMPLE;
530 } else if (inheritLine.contains(ECLASS_JAVA_UTILS)) {
531 return ECLASS_JAVA_UTILS;
532 + } else if (inheritLine.contains(ECLASS_ANT_TASKS)) {
533 + return ECLASS_ANT_TASKS;
534 } else {
535 return null;
536 }