IntelliJ IDEA ืืื ืืืึทื ื ืื ืืขืจืกื ืึทืืืึทื ืกืืจืืข ืกืืึทืืืง ื'ืืื ืงืึธื ืึทื ืึทืืืืขืจ, ืืืึธืก ืืื ืืืื ืงืืืคึผืึทืืืืึทืืื ืืึธืื ืืืืึทื ืืื ืืขืจ ืึทืืึท "ืืืขืืขืจืึทื ืก" ืืื
ืึธืืขืจ, ืืื ืืึทื ื ืืื ืื ืึทื ืึทืืืกืืก ืจืขืืืืืึทืื ืืขื ืขื ืืืืื ืืขืืืืื ืืื ืื ืืืืข ืฆืืืื ื ืคืื ืื ืืขืืืขืืึธืคึผืขืจ ืก IDE, ืืื ืืขื ืขื ืคืื ืงืืืื ื ืืฆื ืคึฟืึทืจ ืื ืึทื ืืืืืงืืื ื ืคึผืจืึธืฆืขืก. ืกืืึทืืืง ืึทื ืึทืืืกืืก
ืฉืจืื 1. ืืืืคื ืื ืึทื ืึทืืืกืืก ืืื ืืขื ืงืึทื ืืืื ืขืจ ืืื ืืึทืงืืืขื ืึท ืืึทืจืืื
ืืื ืขืจืฉืืขืจ, ืืขืจ ืืขืืึทื ืง ืคืื ืคืืืกื ืืืง ืึท IDE (ืืขืกืงืืึทืคึผ ืึทืคึผืืึทืงืืืฉืึทื!) ืืื ืึท ืกื ืกืืกืืขื ืืืึธืก ืืื ื ืืฉื ืึท ืืจืึทืคืืงืึทื ืฆืืืื ื ืงืขื ืืืกืงืืืขื ืกืึธืคืขืงืืืง ืืื ืืืืขืจ ืืจืึทืืึทืืกืึทื. ืฆืื ืืืืง, IDEA ืืขืืืขืืึธืคึผืขืจืก ืืึธืื ืฆืืืขืฉืืขืื ืื ืคืืืืงืืื ืฆื ืืืืคื
ืื ืกืคึผืขืงืฉืึทื ื ืืขื ืขื ืืึธื ืืฉื ืืื ืึท ืฉืจืืคื bin/inspect.sh
ืคืื ืื IDEA ืื ืกืืึทืืืจืื ื ืืืขืืืืืึทืืขืจ. ืื ืคืืจืืื ืื ืคึผืึทืจืึทืืขืืขืจืก ืืขื ืขื:
- ืคืื ืืืขื ืฆื ืื ืคึผืจืืืขืงื (ืงืึธืจืขืื ืึธื ืขืก ืืขื ืขื ื ืืฉื ืืขืฉืืืฆื),
- ืืืขื ืฆื ืื .ืงืกืื ืืขืงืข ืืื ืืืจืืงืืง ืกืขืืืื ืืก (ืืืืฉืึทืืืึทืื ืืืื ืืื ืื ืคึผืจืืืขืงื ืืื .idea/inspectionProfiles/Project_Default.xml),
- ืคืื ืืจื ืฆื ืืขืจ ืืขืงืข ืืื ืืืึธืก .ืงืกืื ืืขืงืขืก ืืื ืจืืคึผืึธืจืฅ ืืืืฃ ืื ืึทื ืึทืืืกืืก ืจืขืืืืืึทืื ืืืขื ืืืื ืกืืึธืจื.
ืืื ืืขืจืฆื, ืขืก ืืื ืืขืจืืืึทืจื ืึทื
- ืืขืจ ืืจื ืฆื ืื Java SDK ืืืขื ืืืื ืงืึทื ืคืืืืขืจื ืืื ืื 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 ืงืึทืืืื ืืื ืึทืืืฉืึทื ืืื ืึท ืงืึทื ืืืื ืขืจ ืืื ืึท ืคืึธืจืขื ืืจืืื ืฆื ืืืื "ืคึผืืืื" ืืืืฃ ืื ืึทื ืึทืืืืื ืคึผืจืึทืืืฉืขืงืก. ืืึธืืืจ ืงืืืึทืื ืึท ืคึผืึทืกืืง ืืึทืืข ืงืึทื ืืืื ืขืจ, ืืื ืืึธืก ืืื ืืืึธืก ืืื ืืืขืจ 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
, ืืืืึทื ืืขืจ ืืึทื ืืฆืขืจ 'ืก ืืืื ืืขืงืข ืืืขื ืืจืืขืื ืืื ืกื ืืื ืึท ืืืืืืขืจ ืืึทื ืืื ืึธืคื ืืึธืจ ื ืืืึธ.
ืืึธืก ืืื ืืื ืื ืืขืงืข ืงืึทืคึผืื ืฆื ืืขื ืงืึทื ืืืื ืขืจ ืงืืงื ืืื: 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
ืื ืึทื ืึทืืืกืืก ืืึธื ืืืืคื ืืฆืืื, ืืื ืคืืืข .ืงืกืื ืืขืงืขืก ืืื ืึทื ืึทืืืืขืจ ืจืืคึผืึธืจืฅ ืืึธื ืืืื ืืขืืืืื ืืื ืื ืืึทืจืืขื/ืืืข_ืื ืกืคึผืขืงืฉืึทื ื ืกืืืคืึธืืืขืจ.
ืืืฆื ืขืก ืืื ื ืื ืืขืจ ืงืืื ืฆืืืืืคื ืึทื ืื IDEA ืึทื ืึทืืืืขืจ ืงืขื ืขื ืืืื ืืืืคื ืกืืึทื ืืึทืืึธื ืข ืืื ืงืืื ืกื ืกืืืืืืข, ืืื ืืืจ ืืึทื ืืืืฃ ืฆื ืื ืจืืข ืฉืจืื.
ืฉืจืื 2. ืืืืึทื ืืื ืคืื ืึทื ืืขืจืงืืืึทืื ืืขื ืืึทืจืืื
ืืึทืงืืืขื ืืขื ืืึทืจืืื ืืื ืื ืคืึธืจืขื ืคืื .ืงืกืื ืืขืงืขืก ืืื ืืึทืื ืื ืฉืืึทืื; ืืืฆื ืืืจ ืืึทืจืคึฟื ืฆื ืืึทืื ืขืก ืืืื ืขืืืืืง ืคึฟืึทืจ ืืขื ืืฉ. ืืื ืืืื ืืืึทื ืจืขืืืืืึทืื ืืึธื ืืืื ืืขื ืืฆื ืืื ืงืืืึทืืืืขื ืืืืขืจื - ืื ืืึธืืืง ืคึฟืึทืจ ืืืืขืจืืึทื ืื ื ืฆื ืื ืื ืืขื ืืืขื ืขื ืืขืจืื ื ืคึผืึทืกืื ืึธืืขืจ ืคืืืื ืืืื ืงืืืึทืืืืขื ืงืจืืืืืจืืึท.
ืืืก ืืืขื ืืื ืื ืืขืืคื
ืืขืจ ืคึผืืืืื ืืืฉืืืื ืคืื ืฆืืืื ืืืืื:
- ืคืืืข ืึทื ืึทืืืืขืจ ืึธื ืืึธื ืงืึทืืขืงืืขืจื (
ืืึทื ืฅ ืจืฉืืื ืืืื ืึทืืข ืืืืกื ืฉืืคืืืขืืข ืึทื ืึทืืืืขืจื ืคืื AcuCobol ืฆื ZPT Lint), - ืึท ืืืื ืืึทืจืืื ืฆืืงืืงืขืจ ืคึฟืึทืจ ืืื ืึทืืข.
ืื ืจืฉืืื ืคืื ืืื ืื ืืืึธืก Warnings NG ืงืขื ืขื ืึทื ืึทืืืื ืืืื ืืืึธืจื ืื ืื ืคืื ืื Java ืงืึทืืคึผืืืืขืจ ืืื ืืืึธืจื ืื ืื ืคืื Maven ืืืจืืคืืจืื ื ืืึธืืก: ืืึธืืฉ ืืื ืืขื ืขื ืงืขืกืืืืขืจ ืงืขื ืืืง, ืืื ืืขื ืขื ืจืึทืจืขืื ืกืคึผืึทืกืืคืืงืื ืึทื ืึทืืืืื. IntelliJ IDEA ืจืืคึผืึธืจืฅ ืืขื ืขื ืืืื ืึทืจืืึทื ืืขืจืขืื ื ืืื ืืขืจ ืจืฉืืื ืคืื ืืขืจืงืขื ื ืคึฟืึธืจืืึทืืืจืื ืืขื.
ืืื ื ืื ืคึผืืืืื ืืื ื ืืึท, ืขืก ืืืืืขืก ืื ืืขืจืึทืงืฅ ืืขืืื ื ืืื Jenkins Pipeline. ืืขืจ ืืืืขื ืฉืจืื ืืื ืืืื ืึธื ืืืื ืืืขื ืงืืงื ืืื ืืึธืก (ืืืจ ื ืึธืจ ืืึธืื ืื ืคึผืืืืื ืืืึธืก ืืึทืจืืื ืคึฟืึธืจืืึทื ืืืจ ืืขืจืงืขื ืขื ืืื ืืืึธืก ืืขืงืขืก ืืึธื ืืืื ืกืงืึทื ื):
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 ืื ืกืคึผืขืงืฉืึทื ื ืืื ืื ืคืืืืงืืื ืฆื ืืืขืืขืจ ืงืึธื ืืืืื ืืื Jenkins (ืืึธืืฉ ืคึฟืึทืจ ืื ืืขืจืข ืจืืคึผืึธืจืฅ, ืืืฉื Checkstyle, ืืขื ืคึผืืืืื ืงืขื ืขื ืืึธื ืืึธืก ืืืืืึทืคืื). ืขืก ืงืืงื ืืื ืืึธืก ืืื ืึท ืืฉืืง ืืื ืื IDEA ืืึทืจืืื ืคึผืึทืจืกืขืจ ืืืึธืก ืืึทืจืฃ ืืืื ืคืึทืจืคืขืกืืืงื.
ืฆืืืืฉื ืื ืคึฟืขืึดืงืืืื ืคืื Warnings NG ืืื ืื ืคืืืืงืืื ืฆื ืฆืื ืืืคืืืกื ืคืืื ืืื ืื ืคืื ืคืึทืจืฉืืืขื ืข ืงืืืืื ืืื ืืืื ืืึทืจืืื ืืื ืคึผืจืึธืืจืึทื ืงืืืึทืืืื ืืึทืืขืก, ืึทืจืืึทื ืืขืจืขืื ื ืึท "ืงืจืึทืืฉืขื" ืคึฟืึทืจ ืื ืจืขืคึฟืขืจืขื ืฅ ืคึฟืึทืจืืึทืืืื ื. ืขืืืขืืข ืงืืืึทืืืื ืืึทืืขืก ืคึผืจืึธืืจืึทืืืื ื ืืึทืงืืืืขื ืืืืฉืึทื ืืื ืื ืืืฆื
ืกืึธืฃ
ืืืืืขืจ ืืื ืึธื ืืืืื ืฆื ืฆืืืจืืืื ืืขื ืืึทืืขืจืืึทื, ืืื ืืึทืฉืืึธืกื ืฆื ืืืื: ืืื ืืืขืจ ืขืก ืื ืฉืืื ืืขืฉืจืืื ืืืืฃ ืืขื ืืขืืข ืืืืฃ Habrรฉ? ืืื ืืื ื ืืจ ืืขืคืื ืขื
ืืื ืืืืึทื ืืื ืืื ืืืืกื, ืขืก ืืื ืงืืื ืื ืึทืืจืืืฉืึทื ืืื Jenkins ืึธืืขืจ ืึท ืืึทืืืขื ืคึผืืืืื [โฆ] ืืื ืคึผืจืื ืฆืืคึผ, ืงืืื ืขื ืืืืืึทืกื ืงืขื ืืึทืื ืคืจืขื ืื ืืื IDEA Community Edition ืืื Jenkins, ืคืืืข ืืืึธืื ื ืึธืจ ื ืืฅ ืคืื ืืขื.
ื ื, ืฆืืืื ืืึธืจ ืฉืคึผืขืืขืจ ืืืจ ืืึธืื ืืืึธืจื ืื ืื NG ืคึผืืืืื, ืืื ืืขืกืึธืฃ ืื ืคึฟืจืืึทื ืืฉืึทืคึฟื ืืื ืืขืงืืืขื ืฆื ืคืจืืื!
ืืงืืจ: www.habr.com