热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Maven多module打包示例

一整体结构项目根pom

一 整体结构

  

  项目根pom



dtsf
com.suning.dtsf
RDRS-V3.8.0.rc

4.0.0
dtsf-worker

pom

dtsf-worker-core
dtsf-worker-api
dtsf-worker-writer-kafka
dtsf-worker-reader-replformysql
dtsf-worker-sink-reader
dtsf-worker-sink-writer
dtsf-worker-writer-hbase
dtsf-worker-sink-pgwriter

二 core项目

  

  1 package.xml

xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
worker

dir
tar.gz

false


src/main/bin
/bin

*.*

775


../../dtsf-biz/target/classes/conf
conf

*.*





target/classes/logback.xml
conf


target/classes/worker.properties
conf


target/classes/javaopts
conf




true
/lib
runtime
true

slf4j-nop*



  startup.sh

#!/bin/bash
if [ -f "/etc/profile" ];then
source /etc/profile
fi
current_path=`pwd`
case "`uname`" in
Linux)
bin_abs_path=$(readlink -f $(dirname $0))
;;
*)
bin_abs_path=`cd $(dirname $0); pwd`
;;
esac
base=${bin_abs_path}/..
worker_cOnf=$base/conf/worker.properties
logback_cOnfigurationFile=$base/conf/logback.xml
java_opts_file=$base/conf/javaopts
export LANG=en_US.UTF-8
export BASE=$base
if [ -e $java_opts_file ]; then
source $java_opts_file
fi
if [ -f $base/bin/worker.pid ] ; then
ps -fe | grep dtsf-worker | grep -v grep > /dev/null 2>&1
if [ $? -ne 0 ];then
echo "dtsf worker is hung up"
rm -f worker.pid
else
echo "found worker.pid , Please run stop.sh first ,then startup.sh" 2>&2
exit 1
fi
fi
if [ ! -d $base/logs/worker ] ; then
mkdir -p $base/logs/worker
fi
if [ ! -d $base/logs/gc ] ; then
mkdir -p $base/logs/gc
fi
## set java path
if [ -z "$JAVA" ] ; then
JAVA=$(which java)
fi
if [ -z "$JAVA" ]; then
echo "Cannot find a Java JDK. Please set either set JAVA or put java (>=1.5) in your PATH." 2>&2
exit 1
fi
case "$#"
in
0 )
;;
1 )
var=$*
if [ -f $var ] ; then
worker_cOnf=$var
else
echo "THE PARAMETER IS NOT CORRECT.PLEASE CHECK AGAIN."
exit
fi;;
2 )
var=$1
if [ -f $var ] ; then
worker_cOnf=$var
else
if [ "$1" = "debug" ]; then
DEBUG_PORT=$2
DEBUG_SUSPEND="y"
JAVA_DEBUG_OPT="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=$DEBUG_PORT,server=y,suspend=$DEBUG_SUSPEND"
fi
fi;;
* )
echo "THE PARAMETERS MUST BE TWO OR LESS.PLEASE CHECK AGAIN."
exit;;
esac
str=`file -L $JAVA | grep 64-bit`
if [ -n "$JAVA_OPTS_CONF" ]; then
JAVA_OPTS=$JAVA_OPTS_CONF
elif [ -n "$str" ]; then
JAVA_OPTS="-server -Xms32G -Xmx32G -Xmn2048m -XX:SurvivorRatio=2 -Xss256k -XX:-UseAdaptiveSizePolicy -XX:MaxTenuringThreshold=15 -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:+HeapDumpOnOutOfMemoryError -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:${BASE}/logs/gc/gc-worker-%t.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=20 -XX:GCLogFileSize=1024K"
else
JAVA_OPTS="-server -Xms1024m -Xmx1024m -XX:NewSize=256m -XX:MaxNewSize=256m -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:${BASE}/logs/gc/gc-worker-%t.log -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=20 -XX:GCLogFileSize=1024K"
fi
JAVA_OPTS=" $JAVA_OPTS -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Dfile.encoding=UTF-8"
# -Dcom.sun.management.jmxremote.port=9333 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
WORKER_OPTS="-DappName=dtsf-worker -Dlogback.cOnfigurationFile=$logback_configurationFile -Djava.opts.file=$java_opts_file -Dworker.cOnf=$worker_conf -Dworker.home=$base"
if [ -e $worker_conf -a -e $logback_configurationFile ]
then
for i in $base/lib/*;
do CLASSPATH=$i:"$CLASSPATH";
done
CLASSPATH="$base/conf:$CLASSPATH";
echo "cd to $bin_abs_path for workaround relative path"
cd $bin_abs_path
echo LOG CONFIGURATION : $logback_configurationFile
echo worker conf : $worker_conf
echo CLASSPATH :$CLASSPATH
echo JAVA_OPTS :$JAVA_OPTS
$JAVA $JAVA_OPTS $JAVA_DEBUG_OPT $WORKER_OPTS -classpath .:$CLASSPATH com.suning.dtsf.worker.core.boot.WorkerBooter 1>>$base/logs/worker/worker.log 2>&1 &
echo $! > $base/bin/worker.pid
echo "cd to $current_path for continue"
cd $current_path
else
echo "worker conf("$worker_conf") OR log configration file($logback_configurationFile) is not exist,please create then first!"
fi
echo "worker has been started."
#echo "append worker cron script"
#if [ ! -f "/var/spool/cron/root" ];then
# touch /var/spool/cron/root
#fi
#grep "startup.sh" /var/spool/cron/root
#if [ $? -ne 0 ];then
# cron_asterisk="* * * * *"
# cron_cOntent="$base/bin/startup.sh"
# echo "$cron_asterisk sh $cron_content" >> /var/spool/cron/root
# if [ -f "/etc/init.d/crond" ];then
# /etc/init.d/crond restart
# fi
#fi

  stop.sh

#!/bin/bash
echo "uninstall cron"
grep "startup.sh" /var/spool/cron/root
if [ $? -eq 0 ];then
sed -i "/startup.sh/d" /var/spool/cron/root
if [ ! -f "/etc/init.d/crond" ];then
/etc/init.d/crond restart
fi
fi
cygwin=false;
linux=false;
case "`uname`" in
CYGWIN*)
cygwin=true
;;
Linux*)
linux=true
;;
esac
get_pid() {
STR=$1
PID=$2
if $cygwin; then
JAVA_CMD="$JAVA_HOME\bin\java"
JAVA_CMD=`cygpath --path --unix $JAVA_CMD`
JAVA_PID=`ps |grep $JAVA_CMD |awk '{print $1}'`
else
if $linux; then
if [ ! -z "$PID" ]; then
JAVA_PID=`ps -C java -f --width 1000|grep "$STR"|grep "$PID"|grep -v grep|awk '{print $2}'`
else
JAVA_PID=`ps -C java -f --width 1000|grep "$STR"|grep -v grep|awk '{print $2}'`
fi
else
if [ ! -z "$PID" ]; then
JAVA_PID=`ps aux |grep "$STR"|grep "$PID"|grep -v grep|awk '{print $2}'`
else
JAVA_PID=`ps aux |grep "$STR"|grep -v grep|awk '{print $2}'`
fi
fi
fi
echo $JAVA_PID;
}
base=`dirname $0`/..
pidfile=$base/bin/worker.pid
if [ ! -f "$pidfile" ];then
echo "worker is not running. exists"
exit
fi
pid=`cat $pidfile`
if [ "$pid" == "" ] ; then
pid=`get_pid "appName=dtsf-worker"`
fi
echo -e "`hostname`: stopping worker $pid ... "
kill $pid
LOOPS=0
while (true);
do
gpid=`get_pid "appName=dtsf-worker" "$pid"`
if [ "$gpid" == "" ] ; then
echo "Oook! cost:$LOOPS"
if [ -f "$pidfile" ];then
`rm $pidfile`
fi
break;
fi
let LOOPS=LOOPS+1
sleep 1
done

  pom.xml



dtsf-worker
com.suning.dtsf
RDRS-V3.8.0.rc

4.0.0
dtsf-worker-core

......




org.apache.maven.plugins
maven-compiler-plugin

8
8



org.apache.maven.plugins
maven-jar-plugin
3.1.0



com.ucar.datalink.worker.core.boot.WorkerBooter



**/logback.xml
**/worker.properties




maven-assembly-plugin




com.ucar.datalink.worker.core.boot.WorkerBooter


dtsf
${project.parent.parent.build.directory}

src/main/assembly/package.xml




package

single






三 reader-mysql

  

  package.xml 

xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
reader-mysql

dir

false


true
/

com.suning.dtsf:dtsf-worker-reader-replformysql



false
/lib
runtime
true

com.suning.dtsf:dtsf-worker-api
fastjson*
lz4*
slf4j*
log4j
connect-api*
kafka-clients*
commons-logging*
simpleclient*



  pom.xml



dtsf-worker
com.suning.dtsf
RDRS-V3.8.0.rc

4.0.0
dtsf-worker-reader-replformysql

......




maven-assembly-plugin



src/main/assembly/package.xml

reader-replformysql
false
${project.parent.parent.build.directory}/dtsf-worker/plugin/reader




package

single






 



推荐阅读
  • Logging all MySQL queries into the Slow Log
    MySQLoptionallylogsslowqueriesintotheSlowQueryLog–orjustSlowLog,asfriendscallit.However,Thereareseveralreasonstologallqueries.Thislistisnotexhaustive:Belowyoucanfindthevariablestochange,astheyshouldbewritteninth ... [详细]
  • Android异步处理一:使用Thread+Handler实现非UI线程更新UI界面Android异步处理二:使用AsyncTask异步更新UI界面Android异步处理三:Handler+Loope ... [详细]
  • Jupyter Notebook多语言环境搭建指南
    本文详细介绍了如何在Linux环境下为Jupyter Notebook配置Python、Python3、R及Go四种编程语言的环境,包括必要的软件安装和配置步骤。 ... [详细]
  • 本文详细介绍了如何调整 Kettle 的内存配置以优化性能,并指导用户如何正确设置日志输出中的时间类型,确保数据处理和监控的准确性。 ... [详细]
  • 本文介绍了如何在 Spring Boot 项目中使用 spring-boot-starter-quartz 组件实现定时任务,并将 cron 表达式存储在数据库中,以便动态调整任务执行频率。 ... [详细]
  • 文章目录Golang定时器Timer和Tickertime.Timertime.NewTimer()实例time.AfterFunctime.Tickertime.NewTicke ... [详细]
  • 在探讨 MySQL 正则表达式 REGEXP 的功能与应用之前,我们先通过一个小实验来对比 REGEXP 和 LIKE 的性能。通过具体的代码示例,我们将评估这两种查询方式的效率,以确定 REGEXP 是否值得深入研究。实验结果将为后续的详细解析提供基础。 ... [详细]
  • 深入解析 Golang 中 Context 的功能与应用
    本文详细探讨了 Golang 中 Context 的核心功能及其应用场景,通过深入解析其工作机制,帮助读者更好地理解和运用这一重要特性,对于提升代码质量和项目开发效率具有重要的参考价值。 ... [详细]
  • 本文探讨了在使用JavaMail发送电子邮件时,抄送功能未能正常工作的问题,并提供了详细的代码示例和解决方法。 ... [详细]
  • 在尝试启动Java应用服务器Tomcat时,遇到了org.apache.catalina.LifecycleException异常。本文详细记录了异常的具体表现形式,并提供了有效的解决方案。 ... [详细]
  • 本文详细介绍了Android系统的四层架构,包括应用程序层、应用框架层、库与Android运行时层以及Linux内核层,并提供了如何关闭Android系统的步骤。 ... [详细]
  • 在Java开发中,保护代码安全是一个重要的课题。由于Java字节码容易被反编译,因此使用代码混淆工具如ProGuard变得尤为重要。本文将详细介绍如何使用ProGuard进行代码混淆,以及其基本原理和常见问题。 ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中安装 Python 3.7 的步骤,包括编译工具的安装、Python 3.7 源码的下载与编译、软链接的创建以及常见错误的处理方法。 ... [详细]
  • 作为一名Android应用开发新手,我在尝试将MediaPlayer处理逻辑从MainActivity分离到另一个类时遇到了问题。尽管搜索了很长时间,但仍未找到满意的解决方案。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
author-avatar
手机用户2502873837
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有