网站建设 网站优化,网站建设七大步骤,wordpress自带轮播,西湖区商城网站建设懒人神器 更新 大家注意一下#xff0c;由于在写入MANIFEST的时候#xff0c;Class-Path路径给的是 ../lib #xff0c;即上级目录的lib。 所以在对拍时如果手动移动了 jar包的位置#xff0c;需要保证 lib/ 文件夹在存放jar包的上一级目录下#xff0c;否则在运行时会报错…懒人神器 更新 大家注意一下由于在写入MANIFEST的时候Class-Path路径给的是 ../lib 即上级目录的lib。 所以在对拍时如果手动移动了 jar包的位置需要保证 lib/ 文件夹在存放jar包的上一级目录下否则在运行时会报错 ClassNotFound 也可以在源码中直接修改jar包的输出位置 一种可能的文件树如下 ├──src
│ ├─ Archer.jar
│ ├─ Berserker.jar
│ ├─ Caster.jar
| ├─ ....
| └─ Alterego.jar
├──lib
│ ├─ elevator-input-hw3-1.4-jar-with-dependencies.jar
│ └─ timable-output-1.1-raw-jar-with-dependencies.jar
└──your_pat.py 一键buildzip - jar 由于每次互测都要经过重复的操作 download - unzip - compile - run 本着一懒到底的原则以及想要进一步熟悉一下shell指令写了一个builder的脚本。 自己留着没意思就拿出来分享给大家了慢慢享用。 同时要感谢一下 fmh过程中帮我解决了许多问题还有 lqq 以身试法帮我测试~ 使用 pre 将所有下载的zip压缩包java源文件放入src文件夹中将本次作业的两个官方接口外部jar包放入lib文件夹中在 2. 中更改相应的lib文件的绝对路径保证最后文件目录树如下即可├──src
│ ├─ Archer.zip
│ ├─ Berserker.zip
│ ├─ Caster.zip
| ├─ ....
| └─ Alterego.zip
├──lib
│ ├─ elevator-input-hw3-1.4-jar-with-dependencies.jar
│ └─ timable-output-1.1-raw-jar-with-dependencies.jar
└──builder.sh run 运行 builder.sh然后就可以愉快地开始对拍啦注意如果有player上交的src文件有多个main入口有可能会出错。但同样的如果上交文件包含有多个入口官方评测可能也过不了这也是为什么rules中规定只能有一个入口实现思路 1. 解压缩并将lib中的外部包导入相应目录内 easy 2. 将src文件夹下的java编译为class文件 编译输出路径为player/out/注意 lib中的 -classpath 为绝对路径3. 将*.class打包成jar 难点坑点 在于MANIFEST.mf 的写入 保证 Main-Class: 带有相应的包路径 如 elevator3.Main保证 Class-Path: 为相对路径保证文件后有两个空行。因此为满足上述需求 由于.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.shcd 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/
namescat names.txt # attention# echo $names
for name in ${names[]}
domkdir $nameunzip $name.zip -d $namecp -a ../lib $name
donerm *.txt
rm *.zip
echo unzip successfully...# 2. compile to class
echo complie start...prefixjavac -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}dirsls
echo $dirsfor dir in ${dirs[]}
do# echo $dircd $dirmkdir outfind -name *.java srcpath.txt$command# rm srcpath.txtcd ..
doneecho compile successfully...# 3. pack to jar
echo packing to jar...for dir in ${dirs[]}
doecho $dircd $dir# write config information to MANIFEST.mfecho -n Main-Class: MANIFEST.mfgrep -l public static void main . -r | sed s/\\.\\///g | sed s/src\\///g | sed s/\\.java//g | sed s/\\//./g MANIFEST.mfsed 2, $d MANIFEST.mf | tee MANIFEST.mfecho Class-Path: ../lib/elevator-input-hw3-1.4-jar-with-dependencies.jar ../lib/timable-output-1.1-raw-jar-with-dependencies.jar MANIFEST.mfecho MANIFEST.mfmv MANIFEST.mf outcd outfind -name *.class classpath.txtjar cvfm $dir.jar MANIFEST.mf classpath.txtcd .. # from outcd .. # from player_dir
doneecho pack successfully... 如有问题欢迎留言交流 转载于:https://www.cnblogs.com/puzzledAtticus/p/10717183.html