นี่คือ Tabula ซึ่งเป็นระบบการบริหารนักศึกษาของมหาวิทยาลัย Warwick รวมถึงโมดูลต่างๆ มากมาย มีโครงการ JIRA ภายใน
ปัจจุบันโมดูลที่อยู่ใน Tabula คือ:
เรามีการตั้งค่า Docker ที่สามารถใช้กับ docker-compose
เพื่อสร้างและปรับใช้ Tabula ภายในเครื่องได้
คุณควรจะสามารถเข้าถึงซอร์สและไบนารีจาก mvn.elab.warwick.ac.uk เมื่อคุณแก้ไขการขึ้นต่อกัน หากคุณใช้ IDE (เราขอแนะนำ IntelliJ IDEA) นี่ควรหมายความว่าคุณจะได้รับโค้ดที่สมบูรณ์และแหล่งที่มาดั้งเดิมของการขึ้นต่อกันที่ยังไม่เป็นโอเพ่นซอร์สโดยสมบูรณ์
wrapper gradle ควรสามารถสร้าง wars ได้ หากคุณรัน ./gradlew war
จากไดเร็กทอรีรูท มันควรสร้าง api/build/libs/api.war
และ web/build/libs/ROOT.war
หมายเหตุ macOS : head
มาตรฐานบน macOS อาจไม่เข้ากันกับ docker/init.sh
คุณอาจต้องการรับ ghead
จาก Homebrew และแทนที่อินสแตนซ์ในสคริปต์ก่อนที่จะรัน
ขั้นแรก ให้รัน docker/init.sh
(เช่น รันจากรูทของโปรเจ็กต์ แทนที่จะรัน cd
ลงในไดเร็กทอรี docker) สิ่งนี้จะถามคำถามสามข้อกับคุณ:
urn:localdev.warwick.ac.uk:tabula:service
- คุณจะได้รับรหัสนี้เมื่อลงทะเบียนเพื่อรับ ID ผู้ให้บริการ SSO กับทีมงานเว็บ ITS) สิ่งนี้จะสร้างไฟล์คุณสมบัติที่จำเป็นเพื่อเรียกใช้ Tabula ใน docker/data
คุณไม่จำเป็นต้องเรียกใช้ docker/init.sh
อีกครั้ง ยกเว้นเมื่อมีการเปลี่ยนแปลงคุณสมบัติที่จำเป็น หากคุณเพียงแค่เปลี่ยนไฟล์คุณสมบัติ คุณก็สามารถเปลี่ยนไฟล์เหล่านี้ได้โดยตรงโดยไม่ต้องสร้างใหม่
ตอนนี้คุณสามารถเริ่มคอนเทนเนอร์ Docker ด้วย sudo docker-compose up --build
(อีกครั้ง คุณจะต้อง --build
เมื่อมีการเปลี่ยนแปลงการกำหนดค่าเท่านั้น) สิ่งนี้จะทำให้ทุกอย่างทำงานได้และคุณควรได้รับ 404 สำหรับ https://localdev.warwick.ac.uk/ (และพรอมต์การรับรองความถูกต้องพื้นฐาน 401 สำหรับ http://localdev.warwick.ac.uk:8080/manager)
ตอนนี้คุณสามารถปรับใช้แอปพลิเคชันด้วย ./gradlew cargoDeployRemote
ซึ่งจะเชื่อมต่อกับแอปพลิเคชัน Manager บน Tomcat และปรับใช้แอปพลิเคชันที่นั่น หากคุณทำการเปลี่ยนแปลงและต้องการปรับใช้ใหม่โดยไม่ต้องเริ่มต้นใหม่ คุณสามารถเรียกใช้ ./gradlew cargoRedeployRemote
; หากคุณใช้ JRebel และคุณได้ตั้งค่ากับเซิร์ฟเวอร์ระยะไกลอย่างถูกต้อง คุณควรจะสามารถทำการเปลี่ยนแปลงได้โดยไม่ต้องปรับใช้ใหม่
เมื่อคุณเปิดใช้งานแอปพลิเคชันแล้ว มันจะพ่นข้อผิดพลาดบางอย่างที่คาดไว้เมื่อไม่มีข้อมูลใด ๆ ในฐานข้อมูลหรือ Elasticsearch คุณจะต้องไปที่ https://localdev.warwick.ac.uk/sysadmin (หมายเหตุ สิ่งนี้กำหนดให้ผู้ใช้ที่เข้าสู่ระบบของคุณเป็นสมาชิกของ WebGroup in-tabula-local-dev-sysadmins
คุณสามารถแก้ไขได้ docker/data/tomcat/lib/tabula.properties
ที่สร้างขึ้นเพื่อใช้กลุ่มอื่น)
เจ้าหน้าที่สามารถสร้าง WebGroups ในระบบ WebGroups หรือคุณสามารถใช้กลุ่มที่มีอยู่ เช่น all-staff
เพื่ออนุญาตให้มีเจ้าหน้าที่ในมหาวิทยาลัย (ตัวอย่าง)
คลิกในกล่องทั้ง 3 ช่องสำหรับ "สร้างดัชนีเหตุการณ์การตรวจสอบใหม่จาก" "สร้างดัชนีโปรไฟล์ใหม่จาก" และ "สร้างดัชนีสตรีมการแจ้งเตือนใหม่จาก" เพื่อให้มีการเติมข้อมูลด้วยวันที่ แล้วคลิก "ดัชนี" สิ่งนี้ควรเสร็จสิ้นทันทีเนื่องจากจะไม่มีการสร้างดัชนีข้อมูล แต่จะสร้างโครงสร้างดัชนีใน Elasticsearch
จากนั้นให้เริ่มการนำเข้าที่มุมขวาบน:
ตามที่ tabula.properties
ระบุว่านี่เป็นอินสแตนซ์แบบแซนด์บ็อกซ์ การดำเนินการนี้จะเสร็จสิ้นอย่างรวดเร็วและมีข้อมูลปลอมทั้งหมด
จากนั้นคุณสามารถไปที่ "รายการแผนกในระบบ" คลิกแผนกและ "ดูผู้ดูแลระบบแผนก" เพื่อให้สิทธิ์ การเปิดใช้งานโหมดพระเจ้าจะทำให้ผู้ใช้ของคุณสามารถข้ามการตรวจสอบสิทธิ์และเพิ่มสิทธิ์ทั่วไปได้
ติดตั้ง Tomcat 8.5 ล่าสุดได้จากที่นี่: http://tomcat.apache.org/download-80.cgi - บน Unix มันสมเหตุสมผลแล้วที่จะแยก Tomcat ออกเป็น /opt
จากนั้นเชื่อมโยงมันไปที่ /usr/local/tomcat-8
หรือที่ไหนก็ได้ที่สะดวก จากนั้นคุณสามารถอัพเกรด Tomcat โดยไม่ทำลายการกำหนดค่าใด ๆ เพียงแค่เปลี่ยน symlink นั้น
สร้างไดเร็กทอรีฐานใหม่สำหรับการกำหนดค่าและการปรับใช้ของ Tabula เช่น /var/tomcat/instances/tabula
โครงสร้างและเนื้อหาของไดเร็กทอรีนี้ควรเป็นดังนี้:
tabula/
├── bin/
│ └── setenv.sh
├── conf/
│ ├── context.xml
│ ├── fim-ds.xml
│ ├── server.xml
│ ├── sits-ds.xml
│ ├── tabula-ds.xml
│ └── web.xml
├── lib/
│ ├── jtds-1.3.1.jar
│ ├── logback.xml
│ ├── ojdbc8.jar
│ ├── postgresql-42.2.5.jar
│ ├── tabula.properties
│ ├── tabula-sso-config.xml
│ └── warwick-logging-1.1-all.jar
├── logs/
├── temp/
├── webapps/
└── work/
คุณอาจพบว่าการเชื่อมโยง /usr/local/tomcat-8/instances
กับ /var/tomcat/instances
มีประโยชน์หากคุณพอใจกับเค้าโครงสไตล์ Jboss
เนื้อหาของไฟล์เหล่านี้มีดังนี้:
bin/setenv.sh
นี่คือสคริปต์ที่เรียกใช้เพื่อตั้งค่าตัวแปรสภาพแวดล้อมสำหรับอินสแตนซ์ที่กำลังทำงานอยู่ คุณอาจต้องการใช้เพื่อตั้งค่าการจัดการหน่วยความจำ, JRebel, การดีบัก ฯลฯ
ไฟล์ตัวอย่างสามารถพบได้ใน config/servers/augustus/bin
conf/context.xml
ซึ่งประกอบด้วยทรัพยากรที่จะรวมไว้ในเซิร์ฟเวอร์ - ในกรณีนี้ เฉพาะแหล่งข้อมูล JNDI เท่านั้น คุณสามารถใช้เอนทิตี XML รวมเพื่อให้สิ่งเหล่านี้อยู่ในไฟล์แยกกัน
มีตัวอย่าง context.xml
และแหล่งข้อมูลตัวอย่างบางส่วนใน config/servers/augustus/conf
conf/server.xml
คำแนะนำเกี่ยวกับวิธีการรันเซิร์ฟเวอร์ รวมถึงพอร์ตที่จะผูกไว้ นี่ค่อนข้างเป็นมาตรฐานนะ
มีตัวอย่าง server.xml
ใน config/servers/augustus/conf
conf/web.xml
นี่เป็นเพียงคัดลอกจากไดเร็กทอรี conf
ในการติดตั้ง Tomcat 8 ฉันไม่สามารถให้ Tomcat ทำงานโดยไม่คัดลอกได้ ซึ่งมันแย่นิดหน่อย
lib/warwick-logging-1.1.jar
คุณสามารถรับสิ่งนี้ได้จากhttps://pkg.elab.warwick.ac.uk/ch.qos.logback/warwick-logging-1.1-all.jar
โปรดทราบว่าการพึ่งพานี้จะแทนที่การพึ่งพาก่อนหน้าใน logback, logstash-logback-encoder, jackson และ slf4j-api
lib/jtds-1.3.1.jar
คุณสามารถรับสิ่งนี้ได้จากhttps://pkg.elab.warwick.ac.uk/net.sourceforge.jtds/jtds-1.3.1.jar
lib/ojdbc8.jar
คุณสามารถรับสิ่งนี้ได้จากhttps://pkg.elab.warwick.ac.uk/oracle.com/ojdbc8.jar
lib/postgresql-42.2.5.jar
คุณสามารถรับสิ่งนี้ได้จากhttp://central.maven.org/maven2/org/postgresql/postgresql/42.2.5/postgresql-42.2.5.jar
lib/logback.xml
การกำหนดค่าการล็อกแบ็ค อีกทางเลือกหนึ่งคือรวมแพ็คเกจนี้เข้ากับ WARs แต่นั่นจะไม่อนุญาตให้เราเปลี่ยนการกำหนดค่าต่อเซิร์ฟเวอร์
lib/tabula.properties
คุณสมบัติส่งผ่านเข้าสู่แอป คุณสามารถรับหนึ่งในการทดสอบแบบตารางแล้วปรับแต่งให้เป็นแบบส่วนตัว
อย่าเพิ่งใช้คีย์จาก tabula-test หรืออินสแตนซ์อื่นๆ ให้สร้างคีย์ใหม่สำหรับอินสแตนซ์ในเครื่องของคุณโดยการรัน ./gradlew generateEncryptionKey
และใช้กับ objectstore.encryptionKey
, turnitin.tca.signingSecret
และ tabula.database.encryptionKey
lib/tabula-sso-config.xml
guff การกำหนดค่า SSO ปกติ คุณจะต้องเพิ่มการกำหนดค่านี้ในการลงชื่อเข้าใช้เว็บเพื่อให้ SSO ทำงานได้ ตรวจสอบให้แน่ใจว่ามีส่วน <trustedapps />
ไม่เช่นนั้นคุณ จะ เห็น NPE จากหนึ่งในไลบรารี crypto ของ Bouncycastle นอกจากนี้ ตรวจสอบให้แน่ใจว่าแหล่งข้อมูลคลัสเตอร์ตรงกับตัวอย่าง - การกำหนดค่าเก่าอาจไม่ตรงกัน ซึ่งจะทำให้ ไม่พบข้อยกเว้นกับแหล่งข้อมูล
น่าเสียดายที่วิธีเดียวที่จะทำให้สิ่งนี้ใช้งานได้บน Tomcat คือการติดตั้ง ActiveMQ ในเครื่อง
ติดตั้ง ActiveMQ จากแพ็คเกจ repo และเพิ่มการกำหนดค่าใหม่ด้วยชื่อนายหน้า Tabula
แพ็คเกจ ActiveMQ ใน repo utopic ใช้งานไม่ได้อย่างสมบูรณ์ ดังนั้นเราจะใช้ repo ภายนอกเพื่อรับเวอร์ชันล่าสุด
sudo apt-add-repository 'deb http://dl.bintray.com/jmkgreen/deb /'
sudo apt-get update
sudo apt-get install activemq
ละเว้นคำเตือนเกี่ยวกับแพ็คเกจที่ไม่ได้รับการรับรองความถูกต้อง เมื่อเสร็จแล้ว ให้แก้ไข /etc/activemq/activemq.xml
และมองหาตำแหน่งที่เขียนว่า brokerName="localhost"
- เปลี่ยนเป็น brokerName="tabula"
รีสตาร์ท ActiveMQ ด้วย sudo service activemq restart
ตั้งค่าต่อไปนี้ใน tabula.properties
ของคุณ :
activemq.broker=tcp://localhost:61616
หากต้องการดำเนินการนี้ในเครื่อง คุณมีตัวเลือก 2-3 วิธี:
สำหรับอูบุนตู:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
sudo apt-get update && sudo apt-get install elasticsearch -y
คุณจะต้องแก้ไข /etc/elasticsearch/elasticsearch.yml
เพื่อตั้งค่า cluster.name: tabula
(หรือตั้งค่า elasticsearch.cluster.name=elasticsearch
ใน tabula.properties
เมื่อฉันรันมันในเครื่อง มันจะไม่เริ่มทำงานเมื่อบู๊ตตามค่าเริ่มต้น แต่ฉันสามารถเริ่มต้นด้วย sudo systemctl start elasticsearch
ได้ เรียกใช้ sudo systemctl enable elasticsearch
เพื่อให้ทำงานขณะบูต
ตั้งค่าคุณสมบัติต่อไปนี้ใน tabula.properties
ของคุณ :
elasticsearch.cluster.nodes=amoru.lnx.warwick.ac.uk:9200,amogu.lnx.warwick.ac.uk:9200,amomu.lnx.warwick.ac.uk:9200
elasticsearch.cluster.name=tabula-dev
elasticsearch.index.prefix=your-name-goes-here
โปรด ตรวจสอบให้แน่ใจว่าคุณเปลี่ยน elasticsearch.index.prefix
ไม่เช่นนั้นคุณอาจเขียนทับดัชนีของผู้อื่น หากคุณประสบปัญหาไฟร์วอลล์ ให้ตะโกนใน #devops
หมายเหตุ: อย่างน้อยบน Ubuntu คุณอาจต้องรีบูตเพื่อทำความสะอาดสภาพแวดล้อมของคุณหลังจากเปลี่ยน JDK แย่จังเลย ถ้าใครปรับปรุงได้ก็จะดีมากเลย
เพิ่ม webupd8team PPA หากคุณยังไม่ได้:
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
ตั้งค่า Java 8 เป็น JDK เริ่มต้น: sudo apt-get install oracle-java8-set-default
คุณจะต้องตั้งค่าตัวแปรสภาพแวดล้อมสอง CATALINA_HOME
และ CATALINA_BASE
เมื่อเริ่มต้น Tomcat CATALINA_HOME
คือไดเร็กทอรีที่ติดตั้ง Tomcat และ CATALINA_BASE
คือไดเร็กทอรีที่มีไฟล์กำหนดค่าด้านบน
จากนั้นคุณสามารถใช้ $CATALINA_HOME/bin/catalina.sh
เพื่อเริ่มเซิร์ฟเวอร์ในเบื้องหน้า หรือ startup.sh
เพื่อเริ่มเซิร์ฟเวอร์ในเบื้องหลัง
ตัวอย่างสคริปต์เริ่มต้นสำหรับ Tabula อาจเป็น:
#!/bin/bash
# Clear out work and temp because I'm a massive pessimist
cd /var/tomcat/instances/tabula
rm -rf work/* temp/*
export CATALINA_HOME=/usr/local/tomcat-8
export CATALINA_BASE=/var/tomcat/instances/tabula
echo "Starting Tomcat server"
${CATALINA_HOME}/bin/catalina.sh run $@
ตั้งค่า Apache vhost โดยอ้างอิงไฟล์รวมใน config/servers/common/vhosts
- ใช้ rewrites.inc
เพื่อการพัฒนา Tabula เต็มรูปแบบ
คุณต้องมี HTTPS vhost สำหรับ SSO ดังนั้นหากคุณจะตั้งค่า vhost เพียงรายการเดียว ก็ควรจะเป็น HTTPS ไฟล์รวมอ้างอิงแผนที่เพื่อให้พอร์ตใช้งาน ดังนั้นคุณอาจต้องกำหนดพอร์ตของคุณด้วยสามบรรทัด เช่น
RewriteMap api txt:/etc/apache2/tabulaport.txt
RewriteMap proxy txt:/etc/apache2/tabulaport.txt
RewriteMap scheduler txt:/etc/apache2/tabulaport.txt
บรรทัดด้านบนควรชี้ไปที่ไฟล์ที่มีบรรทัดนี้ (สมมติว่าพอร์ต Tomcat เริ่มต้น 8080):
port 8080
คัดลอก gradle-local-example.properties
เป็น gradle-local.properties
และแก้ไขคุณสมบัติในนั้นเพื่อให้ตรงกับระบบของคุณ gradle-local.properties
จะถูกละเว้นโดย Git
หากอัปเดตจาก Tabula เวอร์ชันเก่า อย่าลืมใช้การย้ายฐานข้อมูลล่าสุดจาก config/scripts/schema
หากคุณได้รับ IllegalStateException
จาก Lucene แสดงว่าดัชนีตัวใดตัวหนึ่งของคุณล้าสมัย ค้นหาตำแหน่งของมัน (ดูใน tabula.properties
สำหรับ base.data.dir
และดูภายในไดเร็กทอรี index
ภายใน) ลบดัชนีที่เกี่ยวข้อง (เช่น rm -fr BASE_DATA_DIR/index/notifications
) และสร้างใหม่จาก /sysadmin ภายในแอป
รัน ./gradlew deployToTomcat
เพื่อสร้างแอปและคัดลอก WAR ที่ระเบิดไปยังตำแหน่งที่คุณระบุในไฟล์คุณสมบัติของคุณ
Gradle จะเริ่มต้นเซิร์ฟเวอร์สังกะสีสำหรับทำการคอมไพล์แบบเพิ่มหน่วย แต่นั่นจะคงอยู่ในช่วงเวลาที่ Gradle daemon ทำงานเท่านั้น - สิ่งนี้ทำให้ค่อนข้างไม่มีประสิทธิภาพในการทำคอมไพล์จำนวนมาก (โชคดีที่ความเร็วในการคอมไพล์ค่อนข้างดี แม้แต่สำหรับ Scala)
ผลการทดสอบหน่วย Gradle ไปที่ไฟล์ HTML ซึ่งค่อนข้างดี ดังนั้นคุณอาจไม่ต้องการใช้เวลานานเกินไปในการพยายามทำให้คอนโซลเอาต์พุตละเอียดมากขึ้น
หากคุณเรียกใช้ npm run watch
จากภายในโฟลเดอร์ web
ในแท็บ นั่นจะสร้างเนื้อหาอย่างต่อเนื่อง จากนั้น JRebel จะซิงค์สิ่งเหล่านี้กับสงคราม พร้อมกับเนื้อหา WEB-INF เช่น มุมมอง Freemarker
คำสั่ง Gradle ที่มีประโยชน์อื่นๆ:
./gradlew test deployToTomcat
- รันการทดสอบในระหว่างการปรับใช้ด้วย (ไม่มีการรันการทดสอบตามค่าเริ่มต้น)./gradlew web:deployToTomcat
- ปรับใช้โมดูลเดียว แต่สร้างการพึ่งพาโมดูลเหมือนทั่วไป (โปรดจำไว้ว่า Tomcat จะยังคงปรับใช้สงครามเก่าเว้นแต่คุณจะลบออก!)./gradlew test
- รันการทดสอบ แสดงสแต็กเทรซของความล้มเหลวในคอนโซลและเอาต์พุตที่เหมาะสมไปยังไฟล์ HTML./gradlew web:test --tests *.ApplicationTest
- รันการทดสอบเฉพาะ./gradlew -PintegrationTest test -Dtoplevel.url=https://yourhost.warwick.ac.uk
- รันการทดสอบการทำงาน (เริ่มอินสแตนซ์ Tomcat ก่อน)./gradlew -PintegrationTest test -Dtoplevel.url=https://yourhost.warwick.ac.uk --tests *.CourseworkModuleManagerTest
- รันการทดสอบการทำงานเฉพาะ./gradlew cucumber
- รันการทดสอบแตงกวา (เทียบกับ tabula-test.warwick.ac.uk)./gradlew cucumber -Dserver.environment=production
- รันการทดสอบแตงกวากับการผลิต./gradlew cucumber -Dfeature.name=gzip
- รันสถานการณ์จำลองของแตงกวาสำหรับคุณลักษณะเดียว./gradlew --continuous
- รวบรวมแหล่งข้อมูลอย่างต่อเนื่องตามที่บันทึกไว้ใน IDE ของคุณ./gradlew test --continuous
- รวบรวมซอร์สอย่างต่อเนื่องและรันการทดสอบตามที่บันทึกไว้ใน IDE ของคุณ (การทดสอบจะทำงานเมื่อผ่านเท่านั้น)./gradlew web:test --tests *.ApplicationTest --continuous
- คอมไพล์และรันการทดสอบเดียวอย่างต่อเนื่อง./gradlew generateEncryptionKey
- พิมพ์คีย์เข้ารหัสที่เข้ารหัส Base64 เพื่อใช้ใน tabula.properties
สำหรับพื้นที่จัดเก็บอ็อบเจ็กต์หรือฐานข้อมูล web
โมดูลมีการเรียกไปยัง npm run build
เพื่อสร้างสินทรัพย์ด้วย Webpack ซึ่งเป็นส่วนหนึ่งของการปรับใช้ คุณสามารถรันสิ่งนี้ได้ด้วยตนเองเพื่อสร้างเนื้อหาสแตติกใหม่ลงใน build/rootContent
(ซึ่ง JRebel จะตรวจสอบการเปลี่ยนแปลง)
หากคุณไม่ต้องการยุ่งกับ webpack เลย คุณสามารถโทร ./gradlew webpack
เพื่อสร้างเนื้อหาใหม่ได้
คำสั่ง npm
ที่มีประโยชน์อื่นๆ:
npm run build
- สร้างสินทรัพย์การผลิตทั้งหมดแล้วออกnpm run dev
- สร้างสินทรัพย์เพื่อการพัฒนาและออกnpm run watch
- ดูการเปลี่ยนแปลงของไฟล์และสร้างสินทรัพย์การพัฒนาใหม่ ในขณะนี้ เรายังมีไลบรารี JS จำนวนมากใน src/main/assets/static/libs/
- สิ่งเหล่านี้ควรค่อยๆ ถูกแทนที่ด้วยการจัดการการพึ่งพาที่เหมาะสมใน package.json
(เราทำสิ่งนี้กับ ID7 แล้ว) หากคุณต้องการอัปเดต ID7 ให้เปลี่ยนหมายเลขเวอร์ชันใน package.json
และรัน npm install
(บิลด์จะดำเนินการนี้โดยอัตโนมัติ)
config
servers
common
- สิ่งที่เซิร์ฟเวอร์ส่วนใหญ่ใช้สำหรับการกำหนดค่า Apache เป็นต้นscripts
schema
- สคริปต์การย้าย SQL สำหรับการเปลี่ยนแปลงสคีมาฐานข้อมูลapi|common|web
- โมดูล Tabulasrc
main
scala
- ไฟล์ต้นฉบับของสกาล่าjava
- ไฟล์ต้นฉบับ Javaresources
- ไฟล์ที่ไม่ใช่โค้ดที่จะพร้อมใช้งานในคลาสพาธของแอปassets
- ไฟล์ JS/CSS ฯลฯ ที่จะประมวลผลโดย webpack ก่อนที่จะเพิ่มลงใน WARwebapp
- ไฟล์ที่ไม่ใช่โค้ดอื่นๆ ที่ประกอบขึ้นเป็น WARartwork
- กราฟิกต้นฉบับไม่รวมอยู่ในแอป แต่ใช้เพื่อสร้างภาพนิ่ง โดยปกติจะเป็น SVG/Inkscapetest
console
ในโมดูล Gradle จะซ้อนทับทรัพยากรจาก common
เมื่อสร้าง WAR ในโอเวอร์เลย์ ไฟล์ที่มีอยู่จะไม่ถูกเขียนทับ ดังนั้นคุณจึงสามารถกำหนดไฟล์ที่มีชื่อเดียวกันเพื่อแทนที่ลักษณะการทำงานที่จะกำหนดไว้ในโอเวอร์เลย์ได้
common/.../WEB-INF
-> WEB-INF
- เริ่มต้น applicationContext.xml
และรวมถึงบางส่วนที่สามารถแทนที่ได้web/.../WEB-INF/spring-component-scan-context.xml
-> WEB-INF/spring-component-scan-context.xml
- แทนที่ค่าว่างเริ่มต้นจากทั่วไป มีให้ที่นี่: เอกสารสำหรับนักพัฒนา