Gentoo Logo
Gentoo Spaceship




Note: Due to technical difficulties, the Archives are currently not up to date. GMANE provides an alternative service for most mailing lists.
c.f. bug 424647
List Archive: gentoo-java
Navigation:
Lists: gentoo-java: < Prev By Thread Next > < Prev By Date Next >
Headers:
To: gentoo-java@g.o
From: Martin von Gagern <Martin.vGagern@...>
Subject: Re: java-pkg-simple and java-mvn-src eclasses
Date: Sat, 03 Jan 2009 13:55:01 +0100
Hi!

After some the replies from Serkan and Alistair, I updated my
java-pkg-simple.eclass. Modifications:
* Inherit only java-utils-2, and have the ebuilds inherit java-pkg-2
* renamed JAVA_DEPEND to JAVA_GENTOO_CLASSPATH in correspondence to
  EANT_GENTOO_CLASSPATH, now also allow space-separated items
* Introduced JAVA_SRC_DIR so people can specify directories with sources
* Introduced JAVA_ENCODING to not depend on default locale; default
  setting of UTF-8 should fail for non-UTF-8 sources to expose error
* Introduced JAVAC_ARGS and JAVADOC_ARGS for more fine-grained control
* Added QA check to complain if build.xml or pom.xml exists
* Added javadoc and dosrc support

I'd commit the attached file along with an unmodified java-mvn-src and
appropriately modified istack ebuilds to java-experimental if I read no
objections here in the near future.

Greetings,
 Martin
# Eclass for simple bare-source Java packages
#
# Copyright (c) 2004-2008, Gentoo Foundation
#
# Licensed under the GNU General Public License, v2
#
# $Header: $

inherit java-utils-2

if ! hasq java-pkg-2 ${INHERITED}; then
	eerror "java-pkg-simple eclass can only be inherited AFTER java-pkg-2"
fi

# -----------------------------------------------------------------------------
# @eclass-begin
# @eclass-summary Eclass for Java sources without build instructions
#
# This class is intended to build pure Java packages from Java sources
# without the use of any build instructions shipped with the sources.
# There is no support for resources besides the generated class files,
# or for generating source files, or for controlling the META-INF of
# the resulting jar, although these issues may be addressed by an
# ebuild by putting corresponding files into the target directory
# before calling the src_compile function of this eclass.
# -----------------------------------------------------------------------------

EXPORT_FUNCTIONS src_compile src_install

# We are only interested in finding all java source files, wherever they may be.
S="${WORKDIR}"

# -----------------------------------------------------------------------------
# @variable-external JAVA_GENTOO_CLASSPATH
# @variable-default ""
#
# Comma or space separated list of java packages to include in the
# class path. The packages will also be registered as runtime
# dependencies of this new package. Dependencies will be calculated
# transitively. See "java-config -l" for appropriate package names.
# -----------------------------------------------------------------------------
# JAVA_GENTOO_CLASSPATH

# -----------------------------------------------------------------------------
# @variable-external JAVA_SRC_DIR
# @variable-default ""
#
# Directories relative to ${S} which contain the sources of the
# application. The default of "" will be treated mostly as ${S}
# itself. For the generated source package (if source is listed in
# ${JAVA_PKG_IUSE}), it is important that these directories are
# actually the roots of the corresponding source trees.
# -----------------------------------------------------------------------------
# JAVA_SRC_DIR

# -----------------------------------------------------------------------------
# @variable-external JAVA_ENCODING
# @variable-default UTF-8
#
# The character encoding used in the source files
# -----------------------------------------------------------------------------
: ${JAVA_ENCODING:=UTF-8}

# -----------------------------------------------------------------------------
# @variable-external JAVAC_ARGS
# @variable-default ""
#
# Additional arguments to be passed to javac
# -----------------------------------------------------------------------------
# JAVAC_ARGS

# -----------------------------------------------------------------------------
# @variable-external JAVADOC_ARGS
# @variable-default ""
#
# Additional arguments to be passed to javadoc
# -----------------------------------------------------------------------------
# JAVADOC_ARGS

# ------------------------------------------------------------------------------
# @eclass-src_compile
#
# src_compile for simple bare source java packages. Finds all *.java
# sources in ${JAVA_SRC_DIR}, compiles them with the classpath
# calculated from ${JAVA_GENTOO_CLASSPATH}, and packages the resulting
# classes to ${PN}.jar.
#
# variables:
# JAVA_GENTOO_CLASSPATH - list java packages to put on the classpath.
# JAVA_ENCODING - encoding of source files, used by javac and javadoc
# JAVA_SRC_DIR - directories containing source files, relative to ${S}
# JAVAC_ARGS - additional arguments to be passed to javac
# JAVADOC_ARGS - additional arguments to be passed to javadoc
# ------------------------------------------------------------------------------
java-pkg-simple_src_compile() {
	local classes=target/classes apidoc=target/apidoc

	# QA checks
	[[ "$(find . -name build.xml -o -name pom.xml)" ]] &&
		java-pkg_announce-qa-violation "Package ships with a build file, use that instead of java-pkg-simple!"

	# gather sources
	find ${JAVA_SRC_DIR:-*} -name \*.java > sources.lst
	mkdir -p ${classes} || die "Could not create target directory"

	# compile
	local classpath=${classes} atom
	for atom in ${JAVA_GENTOO_CLASSPATH}; do
		classpath="${classpath}:$(java-pkg_getjars --with-dependencies ${atom})" \
			|| die "getjars failed for ${atom}"
	done
	debug-print "CLASSPATH=${classpath}"
	java-pkg-simple_verbose-cmd \
		ejavac -d ${classes} -encoding ${JAVA_ENCODING} \
		-cp "${classpath}" ${JAVAC_ARGS} @sources.lst

	# javadoc
	if hasq doc ${JAVA_PKG_IUSE} && use doc; then
		mkdir -p ${apidoc}
		java-pkg-simple_verbose-cmd \
			javadoc -d ${apidoc} \
			-encoding ${JAVA_ENCODING} -docencoding UTF-8 -charset UTF-8 \
			${JAVADOC_ARGS:- -quiet} @sources.lst || die "javadoc failed"
	fi

	# package
	local jar_args="cf ${PN}.jar"
	if [[ -e ${classes}/META-INF/MANIFEST.MF ]]; then
		jar_args="cfm ${PN}.jar ${classes}/META-INF/MANIFEST.MF"
	fi
	java-pkg-simple_verbose-cmd \
		jar ${jar_args} -C ${classes} . || die "jar failed"
}

# ------------------------------------------------------------------------------
# @eclass-src_install
#
# src_install for simple single jar java packages. Simply packages the
# contents from the target directory and installs it as ${PN}.jar. If
# the file target/META-INF/MANIFEST.MF exists, it is used as the
# manifest of the created jar.
# ------------------------------------------------------------------------------
java-pkg-simple_src_install() {
	local classes=target/classes apidoc=target/apidoc

	# main jar
	java-pkg-simple_verbose-cmd \
		java-pkg_dojar ${PN}.jar

	# javadoc
	if hasq doc ${JAVA_PKG_IUSE} && use doc; then
		java-pkg-simple_verbose-cmd \
			java-pkg_dojavadoc ${apidoc}
	fi

	# dosrc
	if hasq source ${JAVA_PKG_IUSE} && use source; then
		local srcdirs=""
		if [[ ${JAVA_SRC_DIR} ]]; then
			local parent child
			for parent in ${JAVA_SRC_DIR}; do
				for child in ${parent}/*; do
					srcdirs="${srcdirs} ${child}"
				done
			done
		else
			# take all directories actually containing any sources
			srcdirs="$(cut -d/ -f1 sources.lst | sort -u)"
		fi
		java-pkg-simple_verbose-cmd \
			java-pkg_dosrc ${srcdirs}
	fi
}

# ------------------------------------------------------------------------------
# @internal-function java-pkg-simple_verbose-cmd
#
# Print a command before executing it. To give user some feedback
# about what is going on, where the time is being spent, and also to
# help debugging ebuilds.
#
# @param $@ - command to be called and its arguments
# ------------------------------------------------------------------------------
java-pkg-simple_verbose-cmd() {
	echo "$*"
	"$@"
}

# ------------------------------------------------------------------------------
# @eclass-end
# ------------------------------------------------------------------------------
Attachment:
signature.asc (OpenPGP digital signature)
References:
java-pkg-simple and java-mvn-src eclasses
-- Martin von Gagern
Navigation:
Lists: gentoo-java: < Prev By Thread Next > < Prev By Date Next >
Previous by thread:
Re: java-pkg-simple and java-mvn-src eclasses
Next by thread:
istack-commons version numbers
Previous by date:
Re: java-pkg-simple and java-mvn-src eclasses
Next by date:
istack-commons version numbers


Updated Jun 17, 2009

Summary: Archive of the gentoo-java mailing list.

Donate to support our development efforts.

Copyright 2001-2013 Gentoo Foundation, Inc. Questions, Comments? Contact us.