IntelliJ NOTITIA hodie habet analysrem Javae codicem static antecedens, qui in suis facultatibus longe post tales "veteranos" relinquit ut и . Eius numerosae "inspectiones" in variis aspectibus codicem reprimunt, a stilo coding ad cimices typicos.
Attamen, dum eventus analysin tantum in loci instrumento IDE elit ostendit, parum utilia sunt ad processum evolutionis. Static analysis Cum primus gradus pipeline aedificandi, eius eventus qualitates portae definiant, et aedificium deficiat si qualitates portae non transmittantur. Notum est TeamCity CI integrari cum idea. Sed etiam si TeamCity non uteris, facile experiri potes inspectiones ideae currentis in aliquo alio ministro CI. Moneo te videre quomodo id fieri possit utens idea communitatis Editionis, Jenkins et Monitiones NG plugin.
Gradus 1. Curre ad analysis in vase atque fama
In primis, idea currentis IDE (in applicatione desktop!) intra systema CI, quod interface graphicum non habet, dubius et valde molestus videri potest. Fortunate, idea tincidunt ad currendum facultatem providit и ex mandato versus. Praeterea, ut idea hoc modo currat, subsystem graphics subsystem non requiritur et haec officia in testam textu ministrantium perfici possunt.
Inspectiones launched per scripturam bin/inspect.sh ex idea institutionem presul. Parametri sunt:
- plenum iter ad project (relativi non valet);
- iter ad .xml fasciculum cum occasus inspectionis (solet intra project in .idea/inspectionProfiles/Project_Default.xml).
- plenum iter ad folder in quo .xml tabulae cum relationibus in analysi proventuum reponenda sunt.
Donec sit amet malesuada quam
- iter ad Java SDK in IDE figurabitur, alioquin analysis non laborabit. Hae occasus in lima configuratione continentur
jdk.table.xmlin idea global configuratione folder. Idea configurationis globalis ipsa sita est in directorio domus utentis per defaltam, sed hoc loco in fileidea.properties. - Proiectum enucleatum validum esse debet ideae propositi, pro quo debebis aliquas tabellas committere quae versioni temperare solent, nempe:
.idea/inspectionProfiles/Project_Default.xml- occasus analyser, manifesto adhibebuntur cum inspectiones in continente currentes;.idea/modules.xml- alioquin errorem dabimus "Hoc consilium nullum modulorum habet";.idea/misc.xml- Aliter habebimus errorem 'JDK non configuratum proprie ad hoc propositum';*.iml-файлы— aliter errorem de non figurata JDK in modulo feremus.
Etsi haec files plerumque inclusa sunt .gitignore, nulla indicia specifica ad ambitum cuiusdam elit - dissimilem continent, exempli gratia fasciculi workspace.xmlubi talis notitia continetur, et ideo non est necesse committere.
Patens solutio est JDK involucrum una cum idea Editionis Vulgatae in vas in forma parata ut "conparari" in analysi inceptis. Vasa basi aptum eligamus, et hoc est quod noster Dockerfile erit:
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 -v2Per optionem idea.config.path Ideam coacti sumus quaerere eius globalem configurationem in folder /etc/idea, quia res incerta est et saepe omnino absunt utentis domicilii in CI laborante.
Haec tabella exscripta est vasi similis: jdk.table.xml, quod continet vias ad OpenJDK in receptaculo inaugurato (similis fasciculi e proprio presul cum idea uncinis sumi potest pro fundamento);
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>Perfecti imaginem .
Priusquam progrediamur, scriptor reprehendo ideae analystoris currere in continente;
docker run --rm -v <путь/к/вашему/проекту>:/var/project inponomarev/intellij-idea-analyzerAnalysis feliciter currere debet, et multae .xml tabulae cum relationibus analysentium in scopo/ideae_inspectiones subfolder apparere debent.
Nunc iam non est dubium quin idea analystoris analystoris solum in aliquo CI ambitu currere possit, et ad secundum gradum progredimur.
Gradus 2. Propono et famam resolvere
Renuntiatio in forma .xml imaginum media pugna est, nunc opus est ut homines lectitari possint. Et etiam eius eventus adhibeantur in portis qualitatibus - logica ad determinandum utrum acceptae mutationis transeat vel deficiat secundum criteria qualitatem.
Hoc nos adiuvabit quae mense Ianuario MMXIX dimissa est. Sub adventum eius multa singula plugina ad operandum analysi statice proventuum apud Jenkins (CheckStyle, FindBugs, PMD, etc.) nunc obsoletae notantur.
Plugin duabus partibus constat:
- multa analyser nuntius aerarii ( omnes analysers scientiarum notas ab AcuCobol ad ZPT Lint) comprehendit.
- una fama inspectoris omnibus.
Elenchus rerum, quae Monitiones NG resolvere possunt, monita e Javae compilator et monita e Maven tigna exsecutionis includunt: quamvis constanter conspicua sint, raro specie enucleata sunt. IntelliJ Idea relationum comprehenduntur etiam in indice formarum recognitarum.
Cum plugin novum sit, initio bene cum Jenkins Pipeline intercedit. Gradum constructum cum sua participatione hoc videbimus (solum plugin indicamus quod forma fama cognoscitur et quid lima lustrari debet);
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')]
)
}Renuntiatio interface talis est:

Commode haec compositio universalis est omnibus analystoribus recognitis. Continet diagramma interactivum distributionis, quae invenit categoriam et graphum dynamicorum motuum in numero repertorum. In extrema paginae emittere potes. Sola res quae recte ad ideae inspectiones non operabatur, facultas erat in Jenkins codice directe browse (quamvis pro aliis relationibus, exempli gratia Checkstyle, hoc plugin pulchre hoc facere potest). Hoc simile est cimex in idea fama parser quae figi debet.
Inter lineamenta Monitionum NG facultas est inventiones aggregati ex diversis fontibus in una relatione et programmate Quality Portae, incluso "ratchet" pro conventu relationi. Some Quality Gates programming documentation is available — Attamen, non integrum est, et fontem codicis spectare habes. E contra, ad plenam potestatem eorum quae aguntur, « scalare » independenter impleri potest (vide meum. de hoc argumento).
conclusio,
Priusquam hanc materiam parare incipiam, quaerere decrevi: quis iam de hoc argumento scripsit Habre? Tantum inveni с ubi dicit:
Quantum scio, nulla est integratio cum Jenkins vel maven plugin […] Principio, quilibet fanaticus amicos facere potuit cum idea vulgatae editionis et Jenkins, multi hoc solum prodessent.
Bene, post biennium Monitiones NG Plugin habemus, et tandem haec amicitia ad fruitionem pervenit!
Source: www.habr.com
