IntelliJ IDEA ዛሬ በጣም የላቀ የማይንቀሳቀስ የጃቫ ኮድ ተንታኝ አለው፣ እሱም ከችሎታው አንፃር፣ ከእንደዚህ አይነት "አርበኞች" በጣም ወደኋላ ትቶአል።
ይሁን እንጂ የትንታኔው ውጤት በገንቢው የአካባቢ IDE ውስጥ ብቻ እስከታየ ድረስ ለዕድገቱ ሂደት ብዙም አይጠቅሙም። የማይንቀሳቀስ ትንተና
ደረጃ 1. ትንታኔውን በእቃ መያዣ ውስጥ ያካሂዱ እና ሪፖርት ያግኙ
መጀመሪያ ላይ IDE (የዴስክቶፕ አፕሊኬሽን!) በግራፊክ በይነገጽ በሌለው CI ሲስተም ውስጥ የማስኬድ ሀሳብ አጠራጣሪ እና በጣም አሳሳቢ ሊመስል ይችላል። እንደ እድል ሆኖ፣ የ IDEA ገንቢዎች የማሄድ ችሎታን ሰጥተዋል
ፍተሻ የሚጀመረው ስክሪፕት በመጠቀም ነው። bin/inspect.sh
ከ IDEA መጫኛ ማውጫ. የሚፈለጉት መለኪያዎች፡-
- ወደ ፕሮጀክቱ ሙሉ መንገድ (ዘመዶች አይደገፉም),
- ወደ .xml ፋይል የሚወስደው መንገድ የፍተሻ መቼቶች (ብዙውን ጊዜ በፕሮጀክቱ ውስጥ በ .idea/inspectionProfiles/Project_Default.xml) ውስጥ ይገኛል፣
- የ xml ፋይሎች የትንታኔ ውጤቶች ሪፖርቶች ወደሚቀመጡበት አቃፊ ሙሉ ዱካ።
በተጨማሪም, ይጠበቃል
- ወደ ጃቫ ኤስዲኬ የሚወስደው መንገድ በ IDE ውስጥ ይዋቀራል, አለበለዚያ ትንታኔው አይሰራም. እነዚህ ቅንብሮች በማዋቀሪያው ፋይል ውስጥ ይገኛሉ።
jdk.table.xml
በ IDEA ዓለም አቀፍ ውቅር አቃፊ ውስጥ። ነባሪው ሁለንተናዊ IDEA ውቅር ራሱ በተጠቃሚው የቤት ማውጫ ውስጥ አለ፣ ግን ይህ አካባቢበግልጽ ሊቀመጥ ይችላል በፋይል ውስጥidea.properties
. - የተተነተነው ፕሮጀክት ትክክለኛ የ IDEA ፕሮጀክት መሆን አለበት፣ ለዚህም አንዳንድ ጊዜ ችላ የተባሉ አንዳንድ ፋይሎች ለስሪት ቁጥጥር መሰጠት አለባቸው፣ ማለትም፡-
.idea/inspectionProfiles/Project_Default.xml
- የመተንተን ቅንጅቶች ፣ በእቃ መያዣ ውስጥ ምርመራዎችን ሲጀምሩ በግልፅ ጥቅም ላይ ይውላሉ ፣.idea/modules.xml
- አለበለዚያ "ይህ ፕሮጀክት ምንም ሞጁሎችን አልያዘም" የሚለውን ስህተት እናገኛለን,.idea/misc.xml
- ያለበለዚያ “JDK ለዚህ ፕሮጀክት በትክክል አልተዋቀረም” የሚለውን ስህተት እናገኛለን ፣*.iml-файлы
- ያለበለዚያ በሞጁሉ ውስጥ ስለ አንድ ያልተዋቀረ JDK ስህተት እናገኛለን።
ምንም እንኳን እነዚህ ፋይሎች ብዙውን ጊዜ በ ውስጥ ይካተታሉ .gitignore
, እነሱ ለአንድ የተወሰነ ገንቢ አካባቢ የተለየ መረጃ አልያዙም - ለምሳሌ ከፋይል በተለየ workspace.xml
, እንደዚህ አይነት መረጃ, ልክ, በተያዘበት, እና ስለዚህ እሱን መፈጸም አስፈላጊ አይደለም.
በራሱ፣ መውጫው ራሱ JDKን ከ IDEA Community Edition ጋር ወደ ኮንቴይነር በማሸግ በተተነተኑት ፕሮጀክቶች ላይ “ለመዘጋጀት” በተዘጋጀ ቅጽ ውስጥ መያዙን ይጠቁማል። ተስማሚ የመሠረት መያዣ እንምረጥ፣ እና የምናገኘው Dockerfile ይኸውና፡-
Dockerfile
FROM openkbs/ubuntu-bionic-jdk-mvn-py3
ARG INTELLIJ_VERSION="ideaIC-2019.1.1"
ARG INTELLIJ_IDE_TAR=${INTELLIJ_VERSION}.tar.gz
ENV IDEA_PROJECT_DIR="/var/project"
WORKDIR /opt
COPY jdk.table.xml /etc/idea/config/options/
RUN wget https://download-cf.jetbrains.com/idea/${INTELLIJ_IDE_TAR} &&
tar xzf ${INTELLIJ_IDE_TAR} &&
tar tzf ${INTELLIJ_IDE_TAR} | head -1 | sed -e 's//.*//' | xargs -I{} ln -s {} idea &&
rm ${INTELLIJ_IDE_TAR} &&
echo idea.config.path=/etc/idea/config >> idea/bin/idea.properties &&
chmod -R 777 /etc/idea
CMD idea/bin/inspect.sh ${IDEA_PROJECT_DIR} ${IDEA_PROJECT_DIR}/.idea/inspectionProfiles/Project_Default.xml ${IDEA_PROJECT_DIR}/target/idea_inspections -v2
አማራጩን በመጠቀም idea.config.path
IDEA ዓለም አቀፋዊ ውቅሩን በአቃፊው ውስጥ እንዲፈልግ አድርገናል። /etc/idea
, በ CI ውስጥ ባለው የሥራ ሁኔታ ውስጥ የተጠቃሚው የቤት አቃፊ ያልተወሰነ እና ብዙውን ጊዜ ሙሉ በሙሉ የማይገኝ ስለሆነ።
ወደ መያዣው የተቀዳው ፋይል እንደዚህ ይመስላል jdk.table.xml
በመያዣው ውስጥ ወደተጫነው የOpenJDK የሚወስዱትን መንገዶች የያዘ (ከእራስዎ የ IDEA ቅንብሮች ማውጫ ላይ ባለው ተመሳሳይ ፋይል ላይ የተመሠረተ ሊሆን ይችላል)
jdk.table.xml
<application>
<component name="ProjectJdkTable">
<jdk version="2">
<name value="1.8" />
<type value="JavaSDK" />
<version value="1.8" />
<homePath value="/usr/java" />
<roots>
<annotationsPath>
<root type="composite">
<root url="jar://$APPLICATION_HOME_DIR$/lib/jdkAnnotations.jar!/" type="simple" />
</root>
</annotationsPath>
<classPath>
<root type="composite">
<root url="jar:///usr/java/jre/lib/charsets.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/deploy.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/ext/access-bridge-64.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/ext/cldrdata.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/ext/dnsns.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/ext/jaccess.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/ext/jfxrt.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/ext/localedata.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/ext/nashorn.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/ext/sunec.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/ext/sunjce_provider.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/ext/sunmscapi.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/ext/sunpkcs11.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/ext/zipfs.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/javaws.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/jce.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/jfr.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/jfxswt.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/jsse.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/management-agent.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/plugin.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/resources.jar!/" type="simple" />
<root url="jar:///usr/java/jre/lib/rt.jar!/" type="simple" />
</root>
</classPath>
</roots>
<additional />
</jdk>
</component>
</application>
የተጠናቀቀ ምስል
ከመቀጠልዎ በፊት፣ የ IDEA ተንታኙን በመያዣው ውስጥ ለማስኬድ እንሞክር፡-
docker run --rm -v <путь/к/вашему/проекту>:/var/project inponomarev/intellij-idea-analyzer
ትንታኔው በተሳካ ሁኔታ መስራት አለበት፣ እና በርካታ የ.xml ፋይሎች ከ analyzer ሪፖርቶች ጋር በዒላማ/የሃሳብ_inspections ንዑስ አቃፊ ውስጥ መታየት አለባቸው።
አሁን የ IDEA analyzer በማንኛውም የሲአይኤ አከባቢ ከመስመር ውጭ ሊሰራ እንደሚችል ምንም ጥርጥር የለውም, እና ወደ ሁለተኛው ደረጃ እንሄዳለን.
ደረጃ 2. ሪፖርቱን ያሳዩ እና ይተንትኑ
በ.xml ፋይሎች መልክ ሪፖርት ማግኘት ውጊያው ግማሽ ነው፣ አሁን በሰው ሊነበብ የሚችል እንዲሆን ማድረግ ያስፈልጋል። እና ደግሞ ውጤቶቹ በጥራት በሮች ውስጥ ጥቅም ላይ መዋል አለባቸው - ተቀባይነት ያለው ለውጥ በጥራት መመዘኛዎች መሠረት ማለፍ ወይም አለማለፉን ለመወሰን አመክንዮ።
ይህ ይረዳናል
ተሰኪው ሁለት ክፍሎችን ያቀፈ ነው-
- ብዙ ተንታኝ መልእክት ሰብሳቢዎች (
የተሟላ ዝርዝር። ከ AcuCobol እስከ ZPT Lint በሳይንስ የሚታወቁትን ሁሉንም ተንታኞች ያካትታል) - ለሁሉም አንድ ነጠላ ሪፖርት ተመልካች.
ማስጠንቀቂያዎች NG ሊተነተንባቸው የሚችላቸው ነገሮች ዝርዝር የጃቫ ማጠናከሪያ ማስጠንቀቂያዎችን እና ከማቨን ማስፈጸሚያ ምዝግብ ማስታወሻዎችን ያካትታል፡ ምንም እንኳን በቋሚነት የሚታዩ ቢሆኑም ሆን ተብሎ የሚተነተነው አልፎ አልፎ ነው። IntelliJ IDEA ሪፖርቶች በሚታወቁ ቅርጸቶች ዝርዝር ውስጥም ተካትተዋል።
ተሰኪው አዲስ ስለሆነ መጀመሪያ ላይ ከጄንኪንስ ፓይላይን ጋር በደንብ ይገናኛል። ከእሱ ተሳትፎ ጋር ያለው የግንባታ ደረጃ ይህን ይመስላል (ለፕለጊኑ የትኛውን የሪፖርት ቅርጸት እንደምናውቅ እና የትኞቹ ፋይሎች መቃኘት እንዳለባቸው እንነግረዋለን)
stage ('Static analysis'){
sh 'rm -rf target/idea_inspections'
docker.image('inponomarev/intellij-idea-analyzer').inside {
sh '/opt/idea/bin/inspect.sh $WORKSPACE $WORKSPACE/.idea/inspectionProfiles/Project_Default.xml $WORKSPACE/target/idea_inspections -v2'
}
recordIssues(
tools: [ideaInspection(pattern: 'target/idea_inspections/*.xml')]
)
}
የሪፖርቱ በይነገጽ ይህን ይመስላል።
ይህ በይነገጽ ለሁሉም ሊታወቁ ለሚችሉ ተንታኞች ሁለንተናዊ መሆኑ ምቹ ነው። ግኝቶችን በምድብ የማሰራጨት በይነተገናኝ ገበታ እና በግኝቶች ብዛት ላይ ያለውን ተለዋዋጭ ለውጦች ግራፍ ይዟል። ከገጹ ግርጌ ላይ ባለው ፍርግርግ ውስጥ, ፈጣን ፍለጋ ማድረግ ይችላሉ. ለ IDEA ፍተሻዎች በትክክል ያልሰራው ብቸኛው ነገር ኮዱን በጄንኪንስ ውስጥ በቀጥታ የማሰስ ችሎታ ነው (ምንም እንኳን ለሌሎች ሪፖርቶች ለምሳሌ እንደ Checkstyle ፣ ይህ ተሰኪ በሚያምር ሁኔታ ሊያደርገው ይችላል)። በ IDEA ሪፖርት ተንታኝ ውስጥ መስተካከል ያለበት ስህተት ይመስላል።
ከማስጠንቀቂያዎች NG ባህሪያት መካከል ከተለያዩ ምንጮች የተገኙ ግኝቶችን በአንድ ዘገባ እና ፕሮግራም ጥራት ጌትስ ውስጥ ማጠቃለል መቻል፣ ለማጣቀሻ ስብሰባ ራትቼትን ጨምሮ። አንዳንድ የጥራት ጌትስ ፕሮግራሚንግ ሰነዶች አሉ።
መደምደሚያ
ይህንን ጽሑፍ ለማዘጋጀት ከመጀመሬ በፊት ለማየት ወሰንኩ፡ በዚህ ርዕስ ላይ አስቀድሞ ስለ Habré የጻፈው አለ? ያገኘሁት ብቻ ነው።
እኔ እስከማውቀው ድረስ ከጄንኪንስ ወይም ከማቨን ፕለጊን ጋር ምንም አይነት ውህደት የለም [...] በመርህ ደረጃ ማንኛውም ቀናተኛ የ IDEA Community Edition እና የጄንኪንስ ጓደኞችን ሊያደርግ ይችላል, ብዙዎቹ ከዚህ ብቻ ይጠቀማሉ.
ደህና፣ ከሁለት አመት በኋላ የማስጠንቀቂያ NG Plugin አለን፣ እና በመጨረሻም ይህ ጓደኝነት እውን ሆነ!
ምንጭ: hab.com