[ 懒人神器 ] —— OO一键build:.zip -> .jar

懒人神器

一键build:zip -> jar
由于每次互测都要经过重复的操作:

download -> unzip -> compile -> run

本着一懒到底的原则,以及想要进一步熟悉一下shell指令,写了一个builder的脚本。

自己留着没意思,就拿出来分享给大家了,慢慢享用。

使用

  • 将所有下载的zip压缩包(java源文件)放入src文件夹中
  • 将本次作业的两个官方接口(外部jar包)放入lib文件夹中
  • 2. 中,更改相应的lib文件的绝对路径
  • 保证最后文件目录树如下即可:
├──src
│  ├─ Archer
│  ├─ Berserker
│  ├─ Caster
|  ├─ ....
|  └─ Alterego
├──lib
│  ├─ elevator-input-hw3-1.4-jar-with-dependencies.jar
│  └─ timable-output-1.1-raw-jar-with-dependencies.jar
└──builder.sh
  • 注意如果有player上交的src文件有多个main入口,有可能会出错。(但同样的,如果上交文件包含有多个入口,官方评测可能也过不了,这也是为什么rules中规定只能有一个路口)

    实现思路

    1. 解压缩并将lib中的外部包导入相应目录内

    easy

    2. 将src文件夹下的java编译为class文件

  • 编译输出路径为player/out/
  • 注意 lib中的 -classpath 为绝对路径
    #### 3. 将*.class打包成jar
  • 难点(坑点) 在于MANIFEST.mf 的写入
    1. 保证 Main-Class: 带有相应的包路径 ,如 elevator3.Main
    2. 保证 Class-Path: 为相对路径
    3. 保证文件后有两个空行。
  • 因此,为满足上述需求:
    • 由于.class为二进制文件,无法直接解析,但out文件夹下的.class文件结果与.java相同,故可以通过grep检索.java文件,得到Main类包路径,再对得到的路径进行标准格式化操作即可。
    • 相对路径: .表示当前路径;..表示上一目录的路径
    • 需要有空行是真的坑,差点自闭···

源码



#!/bin/bash

# Pre-Condition:
# NOTHING

# Attention:
# *.zip will be deleted

# Procedure:
# 1. put all *.zip into the src/ folder
# 2. put the external .jar into lib/ folder
# 3. run './builder.sh'
# 4. the jar-files has been generated in the 'out' folder of the corresponding directory, enjoy!

# file-tree is as follows:
# dir
#  ├──src
#  ├──lib
#  └──builder.sh

cd src/
# 1. unzip and copy lib/ to src/
echo unzip start...

ls *.zip > temp.txt
sed 's/.zip//g' temp.txt > names.txt # sed 's/src/dst/'
names=`cat names.txt`   # attention

# echo $names
for name in ${names[@]}
do
    mkdir $name
    unzip $name.zip -d $name
    cp -a ../lib $name
done

rm *.txt
rm *.zip
echo unzip successfully...

# 2. compile to class
echo complie start...

prefix="javac -encoding utf-8 -d out/ @srcpath.txt "
lib="-classpath /C/Users/94831/Desktop/CourseCenter/OO/testShell/lib/elevator-input-hw3-1.4-jar-with-dependencies.jar:/C/Users/94831/Desktop/CourseCenter/OO/testShell/lib/timable-output-1.1-raw-jar-with-dependencies.jar "
command=${prefix}${lib}

dirs=`ls`
echo $dirs

for dir in ${dirs[@]}
do
    # echo $dir
    cd $dir
    mkdir out
    find -name "*.java" > srcpath.txt
    $command
    # rm srcpath.txt
    cd ..
done

echo compile successfully...

# 3. pack to jar
echo packing to jar...

for dir in ${dirs[@]}
do
    echo $dir
    cd $dir
    # write config information to MANIFEST.mf
    echo -n 'Main-Class: ' > MANIFEST.mf
    grep -l "public static void main" . -r | sed s/\\.\\///g | sed s/src\\///g | sed s/\\.java//g | sed s/\\//./g >> MANIFEST.mf
    sed '2, $d' MANIFEST.mf | tee MANIFEST.mf
    echo 'Class-Path: ../lib/elevator-input-hw3-1.4-jar-with-dependencies.jar ../lib/timable-output-1.1-raw-jar-with-dependencies.jar' >> MANIFEST.mf
    echo >> MANIFEST.mf
    mv MANIFEST.mf out

    cd out
    find -name "*.class" > classpath.txt
    jar cvfm $dir.jar MANIFEST.mf @classpath.txt
    cd ..   # from out
    cd ..   # from player_dir
done

echo pack successfully...

如有问题,欢迎留言交流!

原文地址:https://www.cnblogs.com/puzzledAtticus/p/10717183.html

时间: 2024-11-08 23:41:55

[ 懒人神器 ] —— OO一键build:.zip -> .jar的相关文章

「下载神器」aria2 懒人安装教程 [Windows]

是一款开源.轻量级的多协议命令行下载工具,支持 HTTP/HTTPS.FTP.SFTP.BitTorrent 和 Metalink 协议,拥有众多第三方支持插件,被誉为「下一代下载工具」和「下载神器」,然而由于安装配置复杂,挡住了许多人的使用.青小蛙带来 aria2 懒人版安装教程,简单粗暴,下面就开始.@Appinn 由于是懒人版安装教程,我们先不深究如何具体配置 aria2 了,直接拿来用就好了. 首先,下载青小蛙重新打包了一下的懒人版 aria2 程序包(百度盘链接,密码: gafp):

懒人用 php + nginx + mysql + redis

以前一直用apache,直接下个wamp一键安装ok能用了,今天用nginx服务器了,苦B的装php装mysql装nginx再装redis,还有麻烦的配置和版本的对应,装完我十分不爽就琢磨着能不能把wamp的Apache换成nginx接着用所以实现吧, 我的wamp是安装在D盘的目录如下D:\wamp: 把nginx解压包放在这里D:\wamp\bin\ 因为wamp的php的配置文件时放在 D:\wamp\bin\apache\apache2.2.22\bin之下面的 所以在这里拷贝一份php

详细的OS X Yosemite 10.10懒人版安装教程

永远记住一句话:难,是因为不会.先是要放宽心态,才更利于解决安装过程中这样那样的问题.多尝试多动脑,不要有过份的依赖.很多问题到解决以后,才发现是如此的简单,我装黑苹果是拿来使用的,所以我的目的是装好,好用,比Windows虚拟机好用.如果不能的话,也就没有折腾的必要.所以,我们必须以这种心态来折腾黑苹果,就轻松许多. 本教程适合笔记本带有Intel HD3000和Intel HD4000笔记本安装,如果其他的机型也可以试试哦 由于自己在学校里学习iOS开发了, 自己也有白苹果了(MacBook

懒人邮件群发日发50-100万封不打码不换IP不需发件箱大站协议系统营销软件100%进收件箱

用一种新的技术思维去群发邮件 一种不用换IP,不需要任何发件箱的邮件群发方式 一种不需要验证码,不需要**代码变量的邮件群发方式 即使需要验证码也能全自动识别验证码的超级智能软件 教你最核心的邮件群发思维和软件群发技术图片链接不是 问题50%~90%进入收件箱让你不再为进垃圾箱而发愁 每天群发100万封邮件不再是难题 懒人技术升级版大站协议邮件群发 提供的不仅仅是软件更重要的是群发技术 邮件群发神器简介:什么是懒人群发技术大站协议升级版? 懒人群发大站协议升级版,是通过签署邮件群发服务器协议的大

NotRxJava懒人专用指南

NotRxJava懒人专用指南 原文链接 : NotRxJava guide for lazy folks 原文作者 : Yaroslav Heriatovych 译文出自 : 开发技术前线 www.devtf.cn 译者 : Rocko 校对者: Mr.Simple 状态 : 完成校对 如果你是一位 Android 开发者,那么这些天你可能已经听到或看到一些关于 RxJava 满天飞的宣传了.RxJava 是一个能让你摆脱编写一些复杂繁琐的代码去处理异步事件的库.一旦开始在你的项目中使用,你会

大道至简第二章—懒人的方法

大道至简第二章—懒人的方法 僰道有故蜀王兵阑亦有神,作大滩江中.其崖崭峻,不可凿:乃积薪烧之.故其处悬崖有赤白五色. ----华阳国志卷三-蜀志 在第一章中作者引用愚公移山的典故向我们介绍了编程的精义,以愚公为例向我们介绍了个编程人员应具备的素质.而在第二章,作者通过蜀郡太守李冰烧石破山建造都江堰的故事告诉我们我们只是勤奋是不够的.如果李冰像愚公那样日复一日的敲石碎山,就不会有空闲时间去观察,去思考了.那也不会有“积薪烧之”的事情了.所以李冰乃是闲人一枚. 人的精力是有限的.愚公而愚公可以多吃点

懒人日记 之 自己到底有多懒

一:起因 0 之前写过类似的关于懒人与智能化的关系的博文,不善于学习,不善于发现问题,解决问题的根源 -- 懒: 1 过去的一年,变化最大的是:每当遇到一个问题,及时的记录下来,并自行的分析并解决掉,而不是让问题躺在那里或者等着别人来解决 -- 依赖: 2 遇到问题之时,方是增长知识的最佳时刻:遇到的问题就像一个人的灵感,需要及时的记录下来,因为一生中能有几回灵感 -- 灵感: 3 盗版的office word,每次打开都会遇到讨厌的提示框 -- 下载一个注册机即可: 4 盗版的win7系统,整

大道至简——做个懒人

懒人有懒法 ——读<大道至简>第二章“是懒人创造了方法”有感 愚公移山靠的是坚持不懈,然而随着事物的进化,李冰凿山也不再是坚持不懈的凿山了,而是选择“积薪烧之”了.李冰会烧而不是凿原因是什么呢?如果他和愚公一样一味的督促团队凿石开山,那他就没有时间学习观察了,就一定不会发现烧的这种方法.他却不是这样的,他应该是个闲人,有时间看火烧石头的闲人.而闲人懒人也一定有自己的懒方法,愚公可以拼命努力,让今天的工作量超出一倍,但是毕竟人的精力有限,再怎么努力也不可能很快完成,有个好方法就可以事半功倍.所以

读《大道至简-- 第二章 是懒人造就了方法》 有感

社会的进步.科学的发展,无不是靠这些“懒人”. 懒人造就了方法,这句话一点也没错.突然间想想那些聪明的人,大多都是懒人.因为想得多,所以做得少.因为想得多,所以思维得到了锻炼,变得越来越聪明.懒人造就了方法,当一件事情需要很大功夫才能做完时,勤快人想得是马上去做,尽快完成,而懒人想得是怎样做省力,怎样做最节省时间,此时懒人创造了一系列的方法.越勤快,越没有机会找到更快的方法.因为勤快人的脑子里想的并不是方法相关的东西.很多时候,做一个懒人还是很有必要的. 愚公和李冰同样是在凿山,但是愚公每天都在