IntelliJ IDEA Π΄Π½Π΅Ρ ΠΈΠΌΠ° Π½Π°ΠΉ-ΠΌΠΎΠ΄Π΅ΡΠ½ΠΈΡ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ Π½Π° ΡΡΠ°ΡΠΈΡΠ΅Π½ Java ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡΠΎ Π² ΡΠ²ΠΎΠΈΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΎΡΡΠ°Π²Ρ Π΄Π°Π»Π΅Ρ Π·Π°Π΄ ΡΠ΅Π±Π΅ ΡΠΈ ΡΠ°ΠΊΠΈΠ²Π° βΠ²Π΅ΡΠ΅ΡΠ°Π½ΠΈβ ΠΊΠ°ΡΠΎ
ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, Π΄ΠΎΠΊΠ°ΡΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ Π°Π½Π°Π»ΠΈΠ·Π° ΡΠ΅ ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ ΡΠ°ΠΌΠΎ Π² Π»ΠΎΠΊΠ°Π»Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π½Π° IDE Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°, ΡΠ΅ ΡΠ° ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ Π·Π° ΠΏΡΠΎΡΠ΅ΡΠ° Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ°. Π‘ΡΠ°ΡΠΈΡΠ΅Π½ Π°Π½Π°Π»ΠΈΠ·
Π‘ΡΡΠΏΠΊΠ° 1. Π‘ΡΠ°ΡΡΠΈΡΠ°ΠΉΡΠ΅ Π°Π½Π°Π»ΠΈΠ·Π° Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° ΠΈ ΠΏΠΎΠ»ΡΡΠ΅ΡΠ΅ ΠΎΡΡΠ΅Ρ
ΠΡΡΠ²ΠΎΠ½Π°ΡΠ°Π»Π½ΠΎ ΠΈΠ΄Π΅ΡΡΠ° Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° IDE (Π΄Π΅ΡΠΊΡΠΎΠΏ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅!) Π² CI ΡΠΈΡΡΠ΅ΠΌΠ°, ΠΊΠΎΡΡΠΎ Π½ΡΠΌΠ° Π³ΡΠ°ΡΠΈΡΠ΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° ΡΡΠΌΠ½ΠΈΡΠ΅Π»Π½Π° ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΠ±Π΅Π·ΠΏΠΎΠΊΠΎΠΈΡΠ΅Π»Π½Π°. ΠΠ° ΡΠ°ΡΡΠΈΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π° IDEA ΡΠ° ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠ»ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅
ΠΠ½ΡΠΏΠ΅ΠΊΡΠΈΠΈΡΠ΅ ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°Ρ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΠΊΡΠΈΠΏΡ bin/inspect.sh
ΠΎΡ ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΠΎΠ½Π½Π°ΡΠ° Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Π½Π° IDEA. ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ ΡΠ°:
- ΠΏΡΠ»Π΅Π½ ΠΏΡΡ Π΄ΠΎ ΠΏΡΠΎΠ΅ΠΊΡΠ° (ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»Π½ΠΈΡΠ΅ Π½Π΅ ΡΠ΅ ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Ρ),
- ΠΏΡΡ Π΄ΠΎ .xml ΡΠ°ΠΉΠ»Π° Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ Π·Π° ΠΈΠ½ΡΠΏΠ΅ΠΊΡΠΈΡ (ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΡΠ΅ Π½Π°ΠΌΠΈΡΠ° Π² ΠΏΡΠΎΠ΅ΠΊΡΠ° Π² .idea/inspectionProfiles/Project_Default.xml),
- ΠΏΡΠ»Π΅Π½ ΠΏΡΡ Π΄ΠΎ ΠΏΠ°ΠΏΠΊΠ°ΡΠ°, Π² ΠΊΠΎΡΡΠΎ ΡΠ΅ ΡΠ΅ ΡΡΡ ΡΠ°Π½ΡΠ²Π°Ρ .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 Community Edition Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ Π²ΡΠ² ΡΠΎΡΠΌΠ°, Π³ΠΎΡΠΎΠ²Π° Π·Π° βΠΈΠ·ΡΠΈΡΡΠ²Π°Π½Π΅β Π½Π° Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Π½ΠΈΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠΈ. ΠΠ΅ΠΊΠ° ΠΈΠ·Π±Π΅ΡΠ΅ΠΌ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡ ΠΎΡΠ½ΠΎΠ²Π΅Π½ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ ΠΈ ΡΠΎΠ²Π° ΡΠ΅ Π±ΡΠ΄Π΅ Π½Π°ΡΠΈΡΡ 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 ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Ρ ΠΎΡΡΠ΅ΡΠΈ Π½Π° Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠ° ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΏΠΎΡΠ²ΡΡ Π² ΠΏΠΎΠ΄ΠΏΠ°ΠΏΠΊΠ°ΡΠ° target/idea_inspections.
Π‘Π΅Π³Π° Π²Π΅ΡΠ΅ Π½ΡΠΌΠ° ΡΡΠΌΠ½Π΅Π½ΠΈΠ΅, ΡΠ΅ IDEA Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»Π½ΠΎ Π²ΡΠ² Π²ΡΡΠΊΠ° CI ΡΡΠ΅Π΄Π° ΠΈ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°ΠΌΠ΅ ΠΊΡΠΌ Π²ΡΠΎΡΠ°ΡΠ° ΡΡΡΠΏΠΊΠ°.
Π‘ΡΡΠΏΠΊΠ° 2. ΠΠΎΠΊΠ°Π·Π²Π°Π½Π΅ ΠΈ Π°Π½Π°Π»ΠΈΠ· Π½Π° ΠΎΡΡΠ΅ΡΠ°
ΠΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΎΡΡΠ΅ΡΠ° ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° .xml ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π΅ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π°ΡΠ° ΠΎΡ Π±ΠΈΡΠΊΠ°ΡΠ°; ΡΠ΅Π³Π° ΡΡΡΠ±Π²Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠ΅ΡΠΈΠΌ ΠΎΡ Ρ ΠΎΡΠ°. Π ΡΡΡΠΎ ΡΠ°ΠΊΠ° Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π² ΠΏΠΎΡΡΠΈΡΠ΅ Π·Π° ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ - Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π·Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π΅ Π΄Π°Π»ΠΈ ΠΏΡΠΈΠ΅ΡΠ°ΡΠ° ΠΏΡΠΎΠΌΡΠ½Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π° ΠΈΠ»ΠΈ Π½Π΅ ΠΎΡΠ³ΠΎΠ²Π°ΡΡ Π½Π° ΠΊΡΠΈΡΠ΅ΡΠΈΠΈΡΠ΅ Π·Π° ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ.
Π’ΠΎΠ²Π° ΡΠ΅ Π½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅
ΠΠ»ΡΠ³ΠΈΠ½ΡΡ ΡΠ΅ ΡΡΡΡΠΎΠΈ ΠΎΡ Π΄Π²Π΅ ΡΠ°ΡΡΠΈ:
- ΠΌΠ½ΠΎΠ³ΠΎΠ±ΡΠΎΠΉΠ½ΠΈ ΠΊΠΎΠ»Π΅ΠΊΡΠΎΡΠΈ Π½Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ Π½Π° Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΈ (
ΠΏΡΠ»Π΅Π½ ΡΠΏΠΈΡΡΠΊ Π²ΠΊΠ»ΡΡΠ²Π° Π²ΡΠΈΡΠΊΠΈ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΈ, ΠΈΠ·Π²Π΅ΡΡΠ½ΠΈ Π½Π° Π½Π°ΡΠΊΠ°ΡΠ° ΠΎΡ 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 Π΅ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡΠ° Π΄Π° ΡΠ΅ ΠΎΠ±ΠΎΠ±ΡΠ°Π²Π°Ρ ΠΎΡΠΊΡΠΈΡΠΈΡ ΠΎΡ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈ Π² Π΅Π΄ΠΈΠ½ ΠΎΡΡΠ΅Ρ ΠΈ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ°Ρ Quality Gates, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ βΡΡΠ΅ΡΡΠΎΡΠΊΠ°β Π·Π° ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠ½ΠΈΡ ΠΊΠΎΠΌΠΏΠ»Π΅ΠΊΡ. ΠΠ°Π»ΠΈΡΠ½Π° Π΅ ΡΠ°ΡΡ ΠΎΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠ½Π°ΡΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π½Π° Quality Gates
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
ΠΡΠ΅Π΄ΠΈ Π΄Π° Π·Π°ΠΏΠΎΡΠ½Π° Π΄Π° ΠΏΠΎΠ΄Π³ΠΎΡΠ²ΡΠΌ ΡΠΎΠ·ΠΈ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π», ΡΠ΅ΡΠΈΡ
Π΄Π° ΠΏΠΎΡΡΡΡΡ: Π½ΡΠΊΠΎΠΉ Π²Π΅ΡΠ΅ ΠΏΠΈΡΠ°Π» Π»ΠΈ Π΅ ΠΏΠΎ ΡΠ°Π·ΠΈ ΡΠ΅ΠΌΠ° Π² Π₯Π°Π±ΡΠ΅? ΠΠ°ΠΌΠ΅ΡΠΈΡ
ΡΠ°ΠΌΠΎ
ΠΠΎΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π·Π½Π°ΠΌ, Π½ΡΠΌΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Ρ Jenkins ΠΈΠ»ΠΈ maven ΠΏΠ»ΡΠ³ΠΈΠ½ [β¦] ΠΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏ Π²ΡΠ΅ΠΊΠΈ Π΅Π½ΡΡΡΠΈΠ°ΡΡ Π±ΠΈ ΠΌΠΎΠ³ΡΠ» Π΄Π° ΡΠ΅ ΡΠΏΡΠΈΡΡΠ΅Π»ΠΈ Ρ IDEA Community Edition ΠΈ Jenkins, ΠΌΠ½ΠΎΠ·ΠΈΠ½Π° ΡΠ°ΠΌΠΎ Π±ΠΈΡ Π° ΡΠΏΠ΅ΡΠ΅Π»ΠΈΠ»ΠΈ ΠΎΡ ΡΠΎΠ²Π°.
Π, Π΄Π²Π΅ Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΏΠΎ-ΠΊΡΡΠ½ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Warnings NG Plugin ΠΈ Π½Π°ΠΉ-Π½Π°ΠΊΡΠ°Ρ ΡΠΎΠ²Π° ΠΏΡΠΈΡΡΠ΅Π»ΡΡΠ²ΠΎ ΡΠ΅ ΠΎΡΡΡΠ΅ΡΡΠ²ΠΈ!
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: www.habr.com