IntelliJ IDEA Π΄Π΅Π½Π΅Ρ Π³ΠΎ ΠΈΠΌΠ° Π½Π°ΡΠ½Π°ΠΏΡΠ΅Π΄Π½ΠΈΠΎΡ ΡΡΠ°ΡΠΈΡΠ΅Π½ Java Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ Π½Π° ΠΊΠΎΠ΄, ΠΊΠΎΡ Π²ΠΎ ΡΠ²ΠΎΠΈΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΎΡΡΠ°Π²Π° Π΄Π°Π»Π΅ΠΊΡ Π·Π°Π΄ ΡΠ΅Π±Π΅ ΡΠ°ΠΊΠ²ΠΈ βΠ²Π΅ΡΠ΅ΡΠ°Π½ΠΈβ ΠΊΠ°ΠΊΠΎ ΡΡΠΎ ΡΠ΅ ΠΈ . ΠΠ΅ΡΠ·ΠΈΠ½ΠΈΡΠ΅ Π±ΡΠΎΡΠ½ΠΈ βΠΈΠ½ΡΠΏΠ΅ΠΊΡΠΈΠΈβ Π³ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠ²Π°Π°Ρ ΠΊΠΎΠ΄ΠΎΡ Π²ΠΎ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ Π°ΡΠΏΠ΅ΠΊΡΠΈ, ΠΎΠ΄ ΡΡΠΈΠ» Π½Π° ΠΊΠΎΠ΄ΠΈΡΠ°ΡΠ΅ Π΄ΠΎ ΡΠΈΠΏΠΈΡΠ½ΠΈ Π³ΡΠ΅ΡΠΊΠΈ.
ΠΠ΅ΡΡΡΠΎΠ°, ΡΓ¨ Π΄ΠΎΠ΄Π΅ΠΊΠ° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΠ΄ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠ° ΡΠ΅ ΠΏΡΠΈΠΊΠ°ΠΆΡΠ²Π°Π°Ρ ΡΠ°ΠΌΠΎ Π²ΠΎ Π»ΠΎΠΊΠ°Π»Π½ΠΈΠΎΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ Π½Π° IDE Π½Π° ΡΠ°Π·Π²ΠΈΠ²Π°ΡΠΎΡ, ΡΠΈΠ΅ ΡΠ΅ ΠΎΠ΄ ΠΌΠ°Π»Π° ΠΊΠΎΡΠΈΡΡ Π·Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡ Π½Π° ΡΠ°Π·Π²ΠΎΡ. Π‘ΡΠ°ΡΠΈΡΠΊΠ° Π°Π½Π°Π»ΠΈΠ·Π° ΠΠ°ΠΊΠΎ ΠΏΡΠ² ΡΠ΅ΠΊΠΎΡ ΠΎΠ΄ ΠΈΠ·Π³ΡΠ°Π΄Π±Π°ΡΠ° Π½Π° Π³Π°ΡΠΎΠ²ΠΎΠ΄ΠΎΡ, Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ ΡΡΠ΅Π±Π° Π΄Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°Π°Ρ ΠΊΠ²Π°Π»ΠΈΡΠ΅ΡΠ½ΠΈ ΠΏΠΎΡΡΠΈ, Π° ΠΈΠ·Π³ΡΠ°Π΄Π±Π°ΡΠ° ΡΡΠ΅Π±Π° Π΄Π° ΠΏΡΠΎΠΏΠ°Π΄Π½Π΅ Π°ΠΊΠΎ Π½Π΅ ΡΠ΅ ΠΏΠΎΠΌΠΈΠ½Π°Ρ ΠΊΠ²Π°Π»ΠΈΡΠ΅ΡΠ½ΠΈΡΠ΅ ΠΏΠΎΡΡΠΈ. ΠΠΎΠ·Π½Π°ΡΠΎ Π΅ Π΄Π΅ΠΊΠ° TeamCity CI Π΅ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠ°Π½ ΡΠΎ IDEA. ΠΠΎ, Π΄ΡΡΠΈ ΠΈ Π°ΠΊΠΎ Π½Π΅ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ TeamCity, ΠΌΠΎΠΆΠ΅ΡΠ΅ Π»Π΅ΡΠ½ΠΎ Π΄Π° ΡΠ΅ ΠΎΠ±ΠΈΠ΄Π΅ΡΠ΅ Π΄Π° ΠΈΠ·Π²ΡΡΠΈΡΠ΅ IDEA ΠΈΠ½ΡΠΏΠ΅ΠΊΡΠΈΠΈ Π½Π° ΠΊΠΎΡ Π±ΠΈΠ»ΠΎ Π΄ΡΡΠ³ CI ΡΠ΅ΡΠ²Π΅Ρ. ΠΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΡΠ΅ ΠΊΠ°ΠΊΠΎ ΡΠΎΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΠΏΡΠ°Π²ΠΈ ΡΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π½Π° IDEA Community Edition, Jenkins ΠΈ ΠΏΡΠΈΠΊΠ»ΡΡΠΎΠΊΠΎΡ Warnings NG.
Π§Π΅ΠΊΠΎΡ 1. ΠΠ·Π²ΡΡΠ΅ΡΠ΅ ΡΠ° Π°Π½Π°Π»ΠΈΠ·Π°ΡΠ° Π²ΠΎ ΠΊΠΎΠ½ΡΠ΅ΡΠ½Π΅ΡΠΎΡ ΠΈ Π΄ΠΎΠ±ΠΈΡΡΠ΅ ΠΈΠ·Π²Π΅ΡΡΠ°Ρ
ΠΠ° ΠΏΠΎΡΠ΅ΡΠΎΠΊΠΎΡ, ΠΈΠ΄Π΅ΡΠ°ΡΠ° Π·Π° Π²ΠΎΠ΄Π΅ΡΠ΅ Π½Π° IDE (Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° Π·Π° ΡΠ°Π±ΠΎΡΠ½Π° ΠΏΠΎΠ²ΡΡΠΈΠ½Π°!) Π²ΠΎ CI ΡΠΈΡΡΠ΅ΠΌ ΡΡΠΎ Π½Π΅ΠΌΠ° Π³ΡΠ°ΡΠΈΡΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·Π³Π»Π΅Π΄Π° ΡΠΎΠΌΠ½ΠΈΡΠ΅Π»Π½Π° ΠΈ ΠΌΠ½ΠΎΠ³Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΡΠΈΡΠ½Π°. ΠΠ° ΡΡΠ΅ΡΠ°, ΡΠ°Π·Π²ΠΈΠ²Π°ΡΠΈΡΠ΅ Π½Π° IDEA ΠΎΠ±Π΅Π·Π±Π΅Π΄ΠΈΡΠ° ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°ΡΠ΅ ΠΈ ΠΎΠ΄ ΠΊΠΎΠΌΠ°Π½Π΄Π½Π°ΡΠ° Π»ΠΈΠ½ΠΈΡΠ°. ΠΠΎΠΊΡΠ°Ρ ΡΠΎΠ°, Π·Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΡΡΠΈ 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:
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 Π΅ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π° ΠΎΠ΄ Π±ΠΈΡΠΊΠ°ΡΠ° ΡΠ΅Π³Π° ΡΡΠ΅Π±Π° Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈΡΠ΅ ΡΠΈΡΠ»ΠΈΠ² Π·Π° Π»ΡΡΠ΅. Π, ΠΈΡΡΠΎ ΡΠ°ΠΊΠ°, Π½Π΅Π³ΠΎΠ²ΠΈΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ°Ρ Π²ΠΎ ΠΏΠΎΡΡΠΈΡΠ΅ Π·Π° ΠΊΠ²Π°Π»ΠΈΡΠ΅Ρ - Π»ΠΎΠ³ΠΈΠΊΠ°ΡΠ° Π·Π° ΡΡΠ²ΡΠ΄ΡΠ²Π°ΡΠ΅ Π΄Π°Π»ΠΈ ΠΏΡΠΈΡΠ°ΡΠ΅Π½Π°ΡΠ° ΠΏΡΠΎΠΌΠ΅Π½Π° ΠΏΠΎΠΌΠΈΠ½ΡΠ²Π° ΠΈΠ»ΠΈ Π½Π΅ ΡΡΠΏΠ΅Π²Π° ΡΠΏΠΎΡΠ΅Π΄ ΠΊΡΠΈΡΠ΅ΡΠΈΡΠΌΠΈΡΠ΅ Π·Π° ΠΊΠ²Π°Π»ΠΈΡΠ΅Ρ.
ΠΠ²Π° ΡΠ΅ Π½ΠΈ ΠΏΠΎΠΌΠΎΠ³Π½Π΅ , ΠΊΠΎΡ Π±Π΅ΡΠ΅ ΠΎΠ±ΡΠ°Π²Π΅Π½ Π²ΠΎ ΡΠ°Π½ΡΠ°ΡΠΈ 2019 Π³ΠΎΠ΄ΠΈΠ½Π°. Π‘ΠΎ Π½Π΅Π³ΠΎΠ²ΠΎΡΠΎ ΠΏΠΎΡΠ°Π²ΡΠ²Π°ΡΠ΅, ΠΌΠ½ΠΎΠ³Ρ ΠΏΠΎΠ΅Π΄ΠΈΠ½Π΅ΡΠ½ΠΈ ΠΏΡΠΈΠΊΠ»ΡΡΠΎΡΠΈ Π·Π° ΡΠ°Π±ΠΎΡΠ° ΡΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ ΠΎΠ΄ ΡΡΠ°ΡΠΈΡΠΊΠ° Π°Π½Π°Π»ΠΈΠ·Π° Π²ΠΎ ΠΠ΅Π½ΠΊΠΈΠ½Ρ (CheckStyle, FindBugs, PMD, ΠΈΡΠ½.) ΡΠ΅Π³Π° ΡΠ΅ ΠΎΠ·Π½Π°ΡΠ΅Π½ΠΈ ΠΊΠ°ΠΊΠΎ Π·Π°ΡΡΠ°ΡΠ΅Π½ΠΈ.
ΠΡΠΈΠΊΠ»ΡΡΠΎΠΊΠΎΡ ΡΠ΅ ΡΠΎΡΡΠΎΠΈ ΠΎΠ΄ Π΄Π²Π° Π΄Π΅Π»Π°:
- Π±ΡΠΎΡΠ½ΠΈ ΡΠΎΠ±ΠΈΡΠ°ΡΠΈ Π½Π° ΠΏΠΎΡΠ°ΠΊΠΈ ΠΎΠ΄ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ( Π³ΠΈ Π²ΠΊΠ»ΡΡΡΠ²Π° ΡΠΈΡΠ΅ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΈ ΠΏΠΎΠ·Π½Π°ΡΠΈ Π½Π° Π½Π°ΡΠΊΠ°ΡΠ° ΠΎΠ΄ 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 Π±Π΅ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎΡΡΠ° Π·Π° ΠΏΡΠ΅Π»ΠΈΡΡΡΠ²Π°ΡΠ΅ Π½Π° ΠΊΠΎΠ΄ΠΎΡ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π²ΠΎ ΠΠ΅Π½ΠΊΠΈΠ½Ρ (ΠΈΠ°ΠΊΠΎ Π·Π° Π΄ΡΡΠ³ΠΈ ΠΈΠ·Π²Π΅ΡΡΠ°ΠΈ, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ Checkstyle, ΠΎΠ²ΠΎΡ ΠΏΡΠΈΠΊΠ»ΡΡΠΎΠΊ ΠΌΠΎΠΆΠ΅ Π΄Π° Π³ΠΎ Π½Π°ΠΏΡΠ°Π²ΠΈ ΡΠΎΠ° ΠΏΡΠ΅ΠΊΡΠ°ΡΠ½ΠΎ). ΠΠ·Π³Π»Π΅Π΄Π° ΠΎΠ²Π° Π΅ Π³ΡΠ΅ΡΠΊΠ° Π²ΠΎ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡΠΎΡ Π·Π° ΠΈΠ·Π²Π΅ΡΡΠ°ΠΈ IDEA ΡΡΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΡΠ΅ ΠΏΠΎΠΏΡΠ°Π²ΠΈ.
ΠΠ΅ΡΡ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠΈΡΠ΅ Π½Π° Warnings NG Π΅ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΠ° Π΄Π° ΡΠ΅ Π·Π±ΠΈΡΠ°Ρ Π½Π°ΠΎΠ΄ΠΈ ΠΎΠ΄ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΈΠ·Π²ΠΎΡΠΈ Π²ΠΎ Π΅Π΄Π΅Π½ ΠΈΠ·Π²Π΅ΡΡΠ°Ρ ΠΈ Π΄Π° ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΡΠ° Quality Gates, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΠΈ βΡΠ°ΡΡΠ΅Π»ΠΊΠ°β Π·Π° ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠ½ΠΎΡΠΎ ΡΠΎΠ±ΡΠ°Π½ΠΈΠ΅. ΠΠΎΡΡΠ°ΠΏΠ½Π° Π΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠ° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° Π·Π° Quality Gates - ΡΠ΅ΠΏΠ°ΠΊ, Π½Π΅ Π΅ ΠΊΠΎΠΌΠΏΠ»Π΅ΡΠ΅Π½, ΠΈ ΠΌΠΎΡΠ° Π΄Π° Π³ΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΡΠ΅ ΠΈΠ·Π²ΠΎΡΠ½ΠΈΠΎΡ ΠΊΠΎΠ΄. ΠΠ΄ Π΄ΡΡΠ³Π° ΡΡΡΠ°Π½Π°, Π·Π° ΡΠ΅Π»ΠΎΡΠ½Π° ΠΊΠΎΠ½ΡΡΠΎΠ»Π° Π²ΡΠ· ΠΎΠ½Π° ΡΡΠΎ ΡΠ΅ ΡΠ»ΡΡΡΠ²Π°, βΡΡΠ°ΠΊΠ»Π°ΡΠ°β ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ° Π½Π΅Π·Π°Π²ΠΈΡΠ½ΠΎ (Π²ΠΈΠ΄ΠΈ ΠΌΠΎΠ΅ Π·Π° ΠΎΠ²Π°Π° ΡΠ΅ΠΌΠ°).
ΠΠ°ΠΊΠ»ΡΡΠΎΠΊ
ΠΡΠ΅Π΄ Π΄Π° ΠΏΠΎΡΠ½Π°ΠΌ Π΄Π° Π³ΠΎ ΠΏΠΎΠ΄Π³ΠΎΡΠ²ΡΠ²Π°ΠΌ ΠΎΠ²ΠΎΡ ΠΌΠ°ΡΠ΅ΡΠΈΡΠ°Π», ΡΠ΅ΡΠΈΠ² Π΄Π° ΠΏΡΠ΅Π±Π°ΡΡΠ²Π°ΠΌ: Π΄Π°Π»ΠΈ Π½Π΅ΠΊΠΎΡ Π²Π΅ΡΠ΅ ΠΏΠΈΡΡΠ²Π°Π» Π½Π° ΠΎΠ²Π°Π° ΡΠ΅ΠΌΠ° Π½Π° Π₯Π°Π±ΡΠ΅? ΠΠ°ΡΠ΄ΠΎΠ² ΡΠ°ΠΌΠΎ Ρ ΠΊΠ°Π΄Π΅ ΡΡΠΎ Π²Π΅Π»ΠΈ:
ΠΠΎΠ»ΠΊΡ ΡΡΠΎ Π·Π½Π°ΠΌ, Π½Π΅ΠΌΠ° ΠΈΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡΠ° ΡΠΎ ΠΠ΅Π½ΠΊΠΈΠ½Ρ ΠΈΠ»ΠΈ ΠΌΠ°Π²Π΅Π½ ΠΏΡΠΈΠΊΠ»ΡΡΠΎΠΊ [β¦] ΠΠΎ ΠΏΡΠΈΠ½ΡΠΈΠΏ, ΡΠ΅ΠΊΠΎΡ Π΅Π½ΡΡΠ·ΠΈΡΠ°ΡΡ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π΄ΡΡΠΆΠΈ ΡΠΎ IDEA Community Edition ΠΈ Jenkins, ΠΌΠ½ΠΎΠ³ΡΠΌΠΈΠ½Π° Π±ΠΈ ΠΈΠΌΠ°Π»Π΅ ΡΠ°ΠΌΠΎ ΠΊΠΎΡΠΈΡΡ ΠΎΠ΄ ΠΎΠ²Π°.
ΠΠ°, Π΄Π²Π΅ Π³ΠΎΠ΄ΠΈΠ½ΠΈ ΠΏΠΎΠ΄ΠΎΡΠ½Π° Π³ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Warnings NG Plugin, ΠΈ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ ΠΎΠ²Π° ΠΏΡΠΈΡΠ°ΡΠ΅Π»ΡΡΠ²ΠΎ ΡΠ΅ ΠΎΡΡΠ²Π°ΡΠΈ!
ΠΠ·Π²ΠΎΡ: www.habr.com
