Skip to content

Instantly share code, notes, and snippets.

@afs
Last active December 5, 2020 12:05
Show Gist options
  • Save afs/10810a6916f969b87c220d00dafd76d1 to your computer and use it in GitHub Desktop.
Save afs/10810a6916f969b87c220d00dafd76d1 to your computer and use it in GitHub Desktop.
Run jena command tools and Fuseki (inc development mode)

Scripts for running:

  • Jena command line tools
  • Fuskei Main
  • Fuseki UI

either as a specific version, or in development running out of target/classes.

(scripts have system-local file names which will need adjusting to the local environment)

Symbolic links of the form

ln -s jena-cmd sparql

cause the use of the command name e.g.

sparql --version
#!/usr/bin/env bash
## Run Fuseki, include development code if it looks like it's available.
function check_dir() {
local NAME="$1"
local DIR="$2"
if [ ! -e "$DIR" ]
then
echo "$NAME: '$DIR' does not exist" 1>&2
exit 1
fi
if [ ! -d "$DIR" ]
then
echo "$NAME: '$DIR' exists but is not a directory" 1>&2
exit 1
fi
}
VER=''
if [[ "$1" == "-ver" || "$1" == "--ver" ]]
then
if [[ $# -lt 2 ]]
then
echo $USAGE 1>&2
exit 1
fi
VER="$2"
shift
shift
fi
ARGS="$@"
JVM_ARGS=${JVM_ARGS:--Xmx2000M}
MAIN="org.apache.jena.fuseki.main.cmds.FusekiMainCmd"
# Run release Fuseki
function release_fuseki() {
local VER="$1"
FUSEKI_JAR=$HOME/.m2/repo/org/apache/jena/jena-fuseki-server/$VER/jena-fuseki-server-$VER.jar
if [[ ! -e $FUSEKI_JAR ]]
then
(
echo "No jar: $FUSEKI_JAR"
if [[ $VER != '' ]]
then
D="org/apache/jena/jena-fuseki-server/$VER"
echo "Download the \"-server\" jar"
echo " wget https://repo1.maven.org/maven2/$D/jena-fuseki-server-$VER.jar"
echo " mkdir -p $HOME/.m2/repo/$D/"
echo " mv jena-fuseki-server-$VER.jar $HOME/.m2/repo/$D/"
echo "and rerun"
fi
) 1>&2
exit 1
fi
echo "Run: $FUSEKI_JAR"
exec java $JVM_ARG -jar "$FUSEKI_JAR" $ARGS
}
if [[ $VER != '' ]]
then
release_fuseki "$VER"
exit
fi
JH="${JH:-$HOME/ASF/afs-jena}"
#CMD=org.apache.jena.fuseki.cmds.FusekiBasicCmd
export FUSEKI_HOME="${FUSEKI_HOME:-$JH/jena-fuseki2}"
check_dir "FUSEKI_HOME" "$FUSEKI_HOME"
CPF="$HOME/sys/classpaths/fuseki"
if [ ! -e "$CPF" ]; then
echo "Need to create Fuseki classpath file"
echo "Ensure maven is up to date with the latest snapshots and then run"
echo "( cd $FUSEKI_HOME/jena-fuseki-server"
echo " mvn dependency:build-classpath \\"
echo " -DincludeScope=runtime -Dmdep.outputFile=$CPF )"
exit 1
fi
CP="$(cat $CPF)"
DEVJ="../jena-base ../jena-core ../jena-arq ../jena-shacl ../jena-cmds ../jena-text"
DEV="jena-fuseki-main jena-fuseki-core"
for X in $DEV $DEVJ
do
CPX="$FUSEKI_HOME/$X/target/classes"
if [ -e "$CPX" ]
then
CP="$CPX:$CP"
else
echo "No such directory: $CPX" 1>&2
exit 1
fi
done
# Prepend any development directories here
DEVDIRS="jena-core jena-tdb jena-arq"
for X in $DEVDIRS
do
CPX="$FUSEKI_HOME/../$X/target/classes"
if [ -e "$CPX" ]
then
CP="$CPX:$CP"
fi
done
if [ -z "$JAVA" ]
then
if [ -z "$JAVA_HOME" ]
then
JAVA=$(which java)
else
JAVA=$JAVA_HOME/bin/java
fi
fi
if [ -z "$JAVA" ]
then
(
echo "Cannot find a Java JDK."
echo "Please set either set JAVA or JAVA_HOME and put java (>=1.8) in your PATH."
) 1>&2
exit 1
fi
# Debug assistence
## echo "++++ Classpath:"
## echo "$(echo $CP | sed -e "s/:/\n/g")"
## exit
echo "Jena code: $JH"
if [[ $ARGS = "-path" || $ARGS = "--path" ]]
then
## echo $CP
echo "$CP" \
| sed -e 's/:/\n/g' \
| sed -e 's!^/home/afs/.m2/repo!Repo!g' \
| grep -v '^Repo'
exit
fi
exec "$JAVA" -cp "$CP" $JVM_ARGS $MAIN $ARGS
#!/usr/bin/env bash
VER=''
if [[ "$1" = "-ver" || "$1" == "--ver" ]]
then
if [[ $# -lt 2 ]]
then
echo $USAGE 1>&2
exit 1
fi
VER="$2"
shift
shift
fi
ARGS="$@"
export JH="${JH:-$HOME/ASF/afs-jena}"
function release_fuseki() {
local VER="$1"
export FUSEKI_HOME=~/jlib/apache-jena-fuseki-$VER
if [[ ! -e $FUSEKI_HOME || ! -d $FUSEKI_HOME ]]
then
echo "No such directory: $FUSEKI_HOME" 1>&2
exit 1
fi
export FUSEKI_BASE=$PWD/run
exec $FUSEKI_HOME/fuseki-server $ARGS
}
if [[ $VER != '' ]]
then
release_fuseki "$VER"
exit
fi
export FUSEKI_HOME="$JH/jena-fuseki2/jena-fuseki-webapp"
export FUSEKI_BASE=$PWD/run
if [[ ! -e $FUSEKI_BASE ]]
then
mkdir "$FUSEKI_BASE"
fi
## fuseki-dev script
function check_dir() {
local NAME="$1"
local DIR="$2"
if [ ! -e "$DIR" ]
then
echo "$NAME: '$DIR' does not exist" 1>&2
exit 1
fi
if [ ! -d "$DIR" ]
then
echo "$NAME: '$DIR' exists but is not a directory" 1>&2
exit 1
fi
}
export FUSEKI_HOME="${FUSEKI_HOME:-$PWD}"
check_dir "FUSEKI_HOME" "$FUSEKI_HOME"
export FUSEKI_BASE="${FUSEKI_BASE:-$FUSEKI_HOME/run}"
check_dir "FUSEKI_BASE" "$FUSEKI_BASE"
#CPF="$FUSEKI_HOME/fuseki.classpath"
CPF="$HOME/sys/classpaths/fuseki-full"
if [ ! -e "$CPF" ]; then
echo "Need to create Fuseki classpath file"
echo "Ensure maven is upto date with the latest snapshots and then run"
echo "( cd $FUSEKI_HOME "
echo " mvn dependency:build-classpath \\"
echo " -DincludeScope=runtime -Dmdep.outputFile=$CPF )"
exit 1
fi
CP="$(cat $CPF)"
# Add development directories.
if [ -e "$FUSEKI_HOME/classes" ]
then
CP="$FUSEKI_HOME/classes:$CP"
elif [ -e "$FUSEKI_HOME/target/classes" ]
then
CP="$FUSEKI_HOME/target/classes:$CP"
fi
# Prepend any development directories here
DEVDIRS="jena-core jena-tdb jena-arq jena-text jena-base jena-fuseki2/jena-fuseki-core jena-fuseki2/jena-fuseki-webapp"
for X in $DEVDIRS
do
CPX="$FUSEKI_HOME/../../$X/target/classes"
if [ -e "$CPX" ]
then
CP="$CPX:$CP"
fi
done
## echo "$CP"
## exit
FUSEKI_LOG="" #${FUSEKI_LOG:-}
if [ -z "$JAVA" ]
then
if [ -z "$JAVA_HOME" ]
then
JAVA=$(which java)
else
JAVA=$JAVA_HOME/bin/java
fi
fi
if [ -z "$JAVA" ]
then
(
echo "Cannot find a Java JDK."
echo "Please set either set JAVA or JAVA_HOME and put java (>=1.8) in your PATH."
) 1>&2
exit 1
fi
JVM_ARGS=${JVM_ARGS:--Xmx1200M}
# Debug assistence
## echo "++++ Classpath:"
## echo "$(echo $CP | sed -e "s/:/\n/g")"
## exit
echo "Jena code: $JH"
if [[ $ARGS = "-path" || $ARGS = "--path" ]]
then
echo "$CP" \
| sed -e 's/:/\n/g' \
| sed -e 's!^/home/afs/.m2/repo!Repo!g' \
| grep -v '^Repo'
exit
fi
exec "$JAVA" -cp "$CP" $JVM_ARGS $FUSEKI_LOG org.apache.jena.fuseki.cmd.FusekiCmd "$@"
# Run as war file.
# java -jar jetty-runner.jar fuseki-server.war
#!/bin/bash
USAGE="$0 [--ver X.Y.Z] [--sdb] cmd arg ..."
VER=''
SDB=${SDB:-0}
JH="${JH:-$HOME/ASF/afs-jena}"
while [[ $# > 0 ]] ; do
case "$1" in
-ver|--ver|-version|--version)
if [[ $# -lt 2 ]]
then
echo $USAGE 1>&2
exit 1
fi
VER="$2"
if [[ "$VER" = "dev" ]]
then
VER=''
fi
shift
shift
;;
-dev|--dev)
JH="$HOME/ASF/afs-jena"
shift
;;
-master|--master)
JH="$HOME/Jena"
shift
;;
-sdb|--sdb)
SDB=1
shift
;;
-*)
echo "Unknown argument: $1" 1>&2
exit 1
;;
*)
break
;;
esac
done
## May be
if [[ -n $1 ]]
then
CMD="$1"
shift
else
CMD="CP"
fi
[[ $CMD =~ sdb.* ]] && { SDB=1 ; }
# Command to main class.
case $CMD in
"")
;;
rdfcat | rdfcompare | rdfcopy | rdfparse | schemagen )
CMD="jena.$CMD" ;;
sparql | arq | qparse | iri | juuid | rsparql | rupdate | rset | uparse | update | wwwdec | wwwenc | qexpr | qtest )
CMD="arq.$CMD" ;;
riot | ntriples | nquads | turtle | trig | infer | utf8 | rdfxml | json | rdflangtest )
CMD="riotcmd.$CMD" ;;
shacl )
CMD="shacl.$CMD" ;;
shacl_test )
CMD="shacl.shacl_test" ;;
tdbbackup | tdbdump | tdbloader | tdbquery | tdbstats | tdbupdate )
CMD="tdb.$CMD" ;;
tdbloader2 )
export "JENA_CP=$CP"
exec tdbloader2.script "$@"
;;
##sdb*)
sdbconfig | sdbdelete | sdbdump | sdbinfo | sdbload | sdbprint | sdbquery | sdbupdate | sdbsql | sdbtruncate )
CMD="sdb.$CMD" ;;
CP)
;;
*.*)
# A main named directly.
;;
*)
echo "Unknown : $CMD"
exit 1 ;;
esac
function release_jena() {
if [[ $SDB == 1 ]] ; then
## Need to put jena-sdb on the classpath. It's not in lib/*.
echo "SDB support only in dev mode" 1>&2
exit 1
fi
if [[ ! -e "$HOME/jlib/apache-jena-$VER/" ]]
then
echo "No version installed for $VER" 1>&2
exit 1
fi
CP="$HOME/jlib/apache-jena-$VER/lib/"'*'
JVM_ARGS=${JVM_ARGS:-}
exec java $JVM_ARGS -cp "$CP" "$CMD" "$@"
}
if [[ -n $VER ]]
then
release_jena "$@"
exit
fi
# Development execution
CPF="$HOME/sys/classpaths/jena"
if [ ! -e "$CPF" ]; then
echo "Need to create Jena Cmds classpath file"
echo "Ensure maven is up to date with the latest snapshots and then run"
echo "( cd $JH/jena-cmds"
echo " mvn dependency:build-classpath \\"
echo " -DincludeScope=test -Dmdep.outputFile=$CPF )"
exit 1
fi
CP="$(cat $CPF)"
# Prepend target classes
read -r -d '' DEV << EOM
jena-cmds
jena-base
jena-core
jena-arq
jena-shacl
jena-tdb
jena-db/jena-dboe-base
jena-db/jena-dboe-index
jena-db/jena-dboe-transaction
jena-db/jena-dboe-trans-data
jena-db/jena-dboe-storage
jena-db/jena-tdb2
EOM
if [[ $SDB != 0 ]]
then
DEV="$DEV jena-sdb"
fi
for DIR in $DEV
do
for D in "$JH/$DIR/target/test-classes" "$JH/$DIR/target/classes"
#for D in "$JH/$DIR/target/classes"
do
if [ -e "$D" ]
then
CP="$D:$CP"
else
echo "Not found: $D" 1>&2
fi
done
done
if [[ $SDB == 1 ]] ; then
if [[ -z $SDB_JDBC ]] ; then
echo "No JDBC drivers (must set SDB_JDBC)" 1>&2
fi
CP="$CP:$SDB_JDBC"
fi
if [[ $CMD == "CP" ]]
then
# "uniq" because of classes and test-classes.
CP_DEV=$(echo "$CP" | sed -e 's/:/\n/g' | grep target | sed -e "s!^${JH%/}/!dev: !" | sed -e 's!/target/.*!!' | uniq)
CP_JAR=$(echo "$CP" | sed -e 's/:/\n/g' | grep "^${M2_REPO}" | sed -e "s!^${M2_REPO%/}/!jar: !")
echo "$CP_DEV"
##echo "$CP_JAR"
exit 1
fi
LOGGING="${LOGGING:--Dlog4j.configurationFile=file:$JH/apache-jena/log4j2.properties}"
#JVM_ARGS="-Xss10M"
JVM_ARGS=${JVM_ARGS:-}
exec java $LOGGING $JVM_ARGS-cp "$CP" "$CMD" "$@"
#!/bin/bash
CMD=$(basename $0)
jena "$CMD" "$@"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment