JavaRush /Java Blog /Random-TK /IntelliJ ideýasy: Aýyrmak, düzmek, çalyşmak (ýa-da beýlek...
Viacheslav
Dereje

IntelliJ ideýasy: Aýyrmak, düzmek, çalyşmak (ýa-da beýleki adamlaryň ýalňyşlyklaryny nädip düzetmeli)

Toparda çap edildi
“Tigiri täzeden dikeltmäň” üstünlikli we netijeli işlemek üçin esasy düzgünlerden biridir. Ownöne öz tigiriňizi täzeden dikeltmek islemeýän bolsaňyz, başga biriniň rulunyň egri bolup, tigirleri inedördül bolanda näme etmeli? Bu syn, beýleki adamlaryň kitaphanalaryny “soňky ýol” hökmünde düzetmegiň usuly we bu meseläni kompýuteriňizden nädip giňeltmelidigi barada gysgaça maglumat bermek üçin niýetlenendir.
IntelliJ ideýasy: Aýrylmak, düzmek, çalyşmak (ýa-da beýleki adamlaryň ýalňyşlyklaryny nädip düzetmeli) - 1

Giriş

Biziň hemmämiz bir gural ýa-da başga bir gural ulanýarys. Sometimesöne käwagt gurallar düýbünden laýyk däl ýa-da ýalňyşlyklar bolýar. Java diliniň aýratynlyklary sebäpli, zerur bolan gurallaryň özüni alyp barşyny düzedip bileris. Taslamalara goşant goşanymyzda we çekmek haýyşlaryny iberenimizde gowy (bu ýerde has köp okap bilersiňiz: " GitHub - Taslamalara goşant goşmak "). Emma derrew kabul edilmezligi ýa-da hatda kabul edilmezligi hem mümkin. Emma taslamanyň zerurlyklary üçin indi zerur. Ine, şu makalada döredijiler hökmünde elýeterli gurallary görkezer diýip umyt edýärin. Gepleşjek aşakdaky ädimlerimizi ýerine ýetirmeli bolarys:
  • Mysal üçin synag programmasyny taýýarlaň (Gibernate taslamasynyň mysalyny ulanyp)
  • Üýtgeýän ýeri tapmak
  • Üýtgetmek
  • Ammary ýerleşdirmek
Aşakdaky ädimleriň hemmesi Windows OS üçin berilýär, ýöne nix ulgamlary üçin analoglar bar. Şonuň üçin zerur bolsa olary gaýtalap bilersiňiz.

Temany taýýarlamak

Şeýlelikde, bize synag taslamasy gerek. Gibernate biziň üçin ideal, sebäbi ... bu "moda, moda, döwrebap". Gaty jikme-jik maglumat bermerin, sebäbi ... Makala Gibernate hakda däl. Hemme zady çalt we ýerine ýetireris. Dogry işläp düzüjiler ýaly, gurluşyk ulgamyny ulanarys. Mysal üçin, Gradle bu makala üçin gurulmaly ( https://gradle.org/install/ ) biziň üçin hem laýykdyr. Ilki bilen taslama döretmeli. Maveniň munuň üçin arhetipleri bar , Gradle munuň üçin ýörite plugin bar: Gradle Init . Şeýlelik bilen, buýruk setirini size mälim bolan görnüşde açyň. Taslama üçin katalog dörediň, oňa gidiň we buýrugy ýerine ýetiriň:

mkdir javarush 
cd javarush 
gradle init --type java-application
IntelliJ ideýasy: Aýrylmak, düzmek, çalyşmak (ýa-da beýleki adamlaryň ýalňyşlyklaryny nädip düzetmeli) - 2
Taslamany import etmezden ozal, nädip gurmalydygyny görkezýän faýla käbir üýtgeşmeler girizeliň. Bu faýly gurmak skripti we build.gradle diýip atlandyrýarlar. Gradle init ýerine ýetiren katalogymyzda ýerleşýär. Şonuň üçin ony açýarys (mysal üçin, start build.gradle buýrugy bilen Windows-da). Şol ýerde “ garaşlylyk ” blokyny tapýarys , ýagny baglylyklar. Ulanyljak üçünji tarap bankalaryň hemmesi şu ýerde beýan edilýär. Indi bu ýerde nämäni suratlandyrmalydygyna düşünmeli. Gibernate web sahypasyna gideliň ( http://hibernate.org/ ). Gibernate ORM bilen gyzyklanýarys . Iň soňky goýberiş gerek. Çep tarapdaky menýuda “Çykar” bölümi bar. “Iň soňky durnuk” saýlaň. Aşak aýlaň we “Esasy ýerine ýetiriş (JPA-ny öz içine alýar)” tapyň. Ozal JPA goldawyny aýratyn birikdirmeli bolýardy, ýöne indi hemme zat ýönekeýleşdi we diňe bir garaşlylyk ýeterlik. Şeýle hem, Gibernate ulanyp, maglumatlar bazasy bilen işlemeli bolarys. Munuň üçin iň ýönekeý warianty - H2 maglumat bazasyny alalyň . Saýlaw edildi, ine, baglylyklarymyz:

dependencies {
    // Базовая зависимость для Hibernate (новые версии включают и JPA)
    compile 'org.hibernate:hibernate-core:5.2.17.Final'
    // База данных, к которой мы будем подключаться
    compile 'com.h2database:h2:1.4.197'
    // Use JUnit test framework
    testCompile 'junit:junit:4.12'
}
Gowy, indiki näme? Gibernate sazlamaly. Gibernate-de " Başlamak boýunça gollanma " bar, ýöne bu samsyk we kömekden has köp päsgelçilik. Şonuň üçin geliň, dogry adamlar ýaly göni “ Ulanyjy gollanmasyna ” geçeliň. Mazmunyň tablisasynda “ Bootstrapping ” diýip terjime edilýän “Bootstrap” bölümini görýäris. Diňe size gerek zat. Ol ýerde köp akylly sözler ýazylypdyr, ýöne esasy zat, synp ýolunda META-INF katalogy bolmaly we persistence.xml faýly bolmaly. Standart boýunça synp ýolunda “çeşmeler” katalogy bar. Şonuň üçin görkezilen katalogy döredýäris: mkdir src\main\resources\META-INF persistence.xml faýly dörediň we açyň. Resminamalarda “Mysal 268. META-INF / persistence.xml konfigurasiýa faýly” mysaly bar, ondan mazmuny alarys we persistence.xml faýlyna ýerleşdireris. Ondan soň IDE-i işe giriziň we döredilen taslamamyzy oňa import ediň. Indi maglumatlar bazasyna bir zat ýazdyrmaly. Bu bir zat diýilýän zat. Kärhanalar domen modeli diýlip atlandyrylýan bir zady aňladýar. Mazmunyň tablisasynda bolsa, “ 2. Domen modeli ” görýäris. Tekstiň aşagyna girýäris we “2.1. Kartalaşdyryş görnüşleri” bölüminde bir guramanyň ýönekeý mysalyny görýäris. Biraz gysgaldyp, özümize alalyň:
package entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;

@Entity(name = "Contact")
public class Contact {

    @Id
    @GeneratedValue
    private Integer id;

    private String name;

    public Contact(String name) {
        this.name = name;
    }
}
Indi bizde bir zady görkezýän synp bar. “Persistence.xml” -e gaýdyp geleliň we ol ýerde bir ýeri düzedeliň: Görkezilen ýerde classsynpymyzy görkezeris entity.Contact. Ajaýyp, galan zat başlamak. “Bootstrap” bölümine gaýdyp geleliň . Bize ýörite EE gurşawyny (ýagny, belli bir ulgam häsiýetini amala aşyrýan gurşaw) üpjün etjek programma serwerimiz ýoklugy sebäpli, SE gurşawynda işleýäris. Munuň üçin diňe “Mysal 269. Programma ýüklenen EntityManagerFactory” mysaly laýyk gelýär. Mysal üçin, muny edeliň:
public class App {
    public static void main(String[] args) {
        EntityManagerFactory emf = Persistence.createEntityManagerFactory("CRM");
        EntityManager em = emf.createEntityManager();
        em.getTransaction().begin();
        Contact contact = new Contact("Vasya");
        em.persist(contact);
        em.getTransaction().commit();
        Query sqlQuery = em.createNativeQuery("select count(*) from contact");
        BigInteger count = (BigInteger) sqlQuery.getSingleResult();
        emf.close();
        System.out.println("Entiries count: " + count);
    }
}
Hurray, mowzugymyz taýýar. Bu bölümi taşlamak islemedim , sebäbi ... Indiki baplar üçin mowzugymyzyň nähili ýüze çykandygyna düşünmek maslahat berilýär.

Üýtgeýän häsiýeti tapmak

“BigInteger” görnüşiniň hasaplaýyş meýdanynyň başlangyç ýerine geçeliň we şol ýerde ( BreakPoint ) nokat goýalyň. Islenýän setire girizilenden soň, bu Ctrl + F8 ýa-da Run -> Toggle Line Breakpoint menýusynyň üsti bilen amala aşyrylyp bilner. Soňra düzedişde esasy usulymyzy işledýäris (Run -> Debug):
IntelliJ ideýa: Aýrylmak, düzmek, çalyşmak (ýa-da başgalaryň ýalňyşlyklaryny nädip düzetmeli) - 3
Birazajyk mysaly, ýöne başlangyçda talap ýerleriniň sanyny üýtgetmek isleýändigimizi aýdalyň. Görşümiz ýaly, sqlQuery NativeQueryImpl. Basyň Ctrl+N, synpyň adyny ýazyň we oňa gidiň. Bir klasa baranymyzda, bu synpyň ýerleşýän ýerine geçeris we awtoskrolly açarys:
IntelliJ ideýa: Aýrylmak, düzmek, çalyşmak (ýa-da beýleki adamlaryň ýalňyşlyklaryny nädip düzetmeli) - 4
Ideanyň häzirki wagtda programmanyň deslapky kody nireden tapmalydygyny bilmeýändigini derrew belläliň (deslapky kody, ýagny). Şonuň üçin ol synp faýlynyň mazmunyny mähir bilen böldi:
IntelliJ ideýasy: Aýyrmak, düzmek, çalyşmak (ýa-da beýleki adamlaryň ýalňyşlyklaryny nädip düzetmeli) - 5
Şeýle hem, “IntelliJ Idea” penjiresiniň adynda Gradleň artefakty tygşytlaýan ýerinde ýazylandygyna üns beriň. Indi, ideýa sungat eserimiziň ýerleşýän ýoluna gireliň:
IntelliJ ideýasy: Aýrylmak, düzmek, çalyşmak (ýa-da beýleki adamlaryň ýalňyşlyklaryny nädip düzetmeli) - 6
Buýrugy ulanyp, buýruk setirindäki bu kataloga geçeliň cd way to каталогу. Derrew bellik ederin: taslamany çeşmeden gurmak mümkin bolsa, çeşmeden gurmak has gowudyr. Mysal üçin, Gibernate deslapky kody resmi web sahypasynda elýeterlidir. Islenýän wersiýa üçin alyp, ol ýerdäki ähli üýtgeşmeleri girizip, taslamada görkezilen gurluş skriptlerini ulanyp ýygnanmak has gowudyr. Makalada iň aýylganç warianty hödürleýärin - banka bar, ýöne deslapky kod ýok. 2-nji bellik: Gradle plaginleri ulanyp deslapky kody alyp biler. Jikme-jiklikler üçin Gradle ulanyp, javadoclary we bankanyň çeşmelerini nädip göçürip almaly .

Üýtgetmek

Üýtgeýän synpymyzyň haýsy bukjada ýerleşýändigine laýyklykda katalog gurluşyny döretmeli. Bu ýagdaýda: mkdir org\hibernate\query\internalşondan soň bu katalogda bir faýl döredýäris NativeQueryImpl.java. Indi bu faýly açýarys we synpyň ähli mazmunyny şol ýerdäki IDE-den göçürýäris (ideýanyň biziň üçin düzen şol bir görnüşi). Zerur setirleri üýtgediň. Mysal üçin:
IntelliJ ideýasy: Aýrylmak, düzmek, çalyşmak (ýa-da başgalaryň ýalňyşlyklaryny nädip düzetmeli) - 7
Indi faýly düzeliň. Biz edýäris : javac org\hibernate\query\internal\NativeQueryImpl.java. Wah, ony alyp, ýalňyşsyz düzüp bolmaz. Bir topar nyşan tapyp bilmedik, sebäbi ... üýtgedilip bilinýän synp, IntelliJ Idea adatça biziň üçin synp ýoluna goşýan beýleki synplar bilen baglanyşykly. IDE-lerimiziň ähli peýdalylygyny duýýarsyňyzmy? =) Bolýar, geliň özümiz goşalyň, bizem edip bileris. Geliň:
  • [1] - gibernate-ýadro-5.2.17.Final.jar
  • [2] - gibernate-jpa-2.1-api-1.0.0.Final.jar
Edil edişimiz ýaly: “Daşarky kitaphanalarda” “Taslama” görnüşinde zerur bankany tapyp basýarys Ctrl+Shift+C. Indi aşakdaky buýrugy döredeliň we ýerine ýetireliň: javac -cp [1];[2] org\hibernate\query\internal\NativeQueryImpl.java Netijede, banka faýlynda täzelenmeli java faýlynyň gapdalynda täze synp faýllary peýda bolar:
IntelliJ ideýa: Aýrylmak, düzmek, çalyşmak (ýa-da beýleki adamlaryň ýalňyşlyklaryny nädip düzetmeli) - 8
Hurray, indi banka täzelenmesini ýerine ýetirip bilersiňiz. Resmi materiallar bilen ugrukdyryp bileris : jar uf hibernate-core-5.2.17.Final.jar org\hibernate\query\internal\*.class Açyk IntelliJ Idea, faýl üýtgetmäge ýol bermez. Şonuň üçin banka täzelenmesini ýerine ýetirmezden ozal “Idea” -ny ýapmaly bolarsyňyz we täzelenenden soň açyň. Ondan soň IDE-ni açyp, dub gazyny täzeden işledip bilersiňiz. Arakesme nokatlary IDE täzeden başlamagyň arasynda täzeden düzülenok. Şonuň üçin programmanyň ýerine ýetirilişi öňki ýerinde durar. Voila, üýtgeşmelerimiziň nähili işleýändigini görýäris:
IntelliJ ideýasy: Aýrylmak, düzmek, çalyşmak (ýa-da başgalaryň ýalňyşlyklaryny nädip düzetmeli) - 9
Gowy. Emma bu ýerde sorag ýüze çykýar - näme sebäpli? Diňe gradle bir taslama guranda, baglylyklary we ammar bloklaryny seljerýär. Gradle belli bir ýerde ýerleşýän belli bir gurluşyk keşi bar (“ Gradle keş keşini nädip düzmeli? ” Serediň. Keşde garaşlylyk ýok bolsa, Gradle ony ammardan göçürip alar. Keşiň özi, soň Gradle kitaphananyň keşdedigini we hiç zat çykarmaýandygyny pikir edýär. cöne keşi arassalamak üýtgeşmelerimiziň ýitmegine sebäp bolar. Üstesine-de, bizden başga hiç kim gidip bilmez. Näçe oňaýsyzlyk. Näme etmeli? Hmm, ammardan göçürip alýanlar? Şonuň üçin ammarymyz, isleglerimiz we şahyrlarymyz bilen zerur. Bu indiki ädim.

Ammary ýerleşdirmek

Ammaryňyzy ýerleşdirmek üçin dürli mugt çözgütler bar: olaryň biri Artifactory , beýlekisi Apache Archive . Artifabrika moda, äheňli, döwrebap görünýär, ýöne bu meselede kynçylyk çekdim, artefaktlary dogry ýerleşdirmek islemedim we ýalňyş metadata döretdim. Şonuň üçin garaşylmadyk ýagdaýda özüm üçin Apache wersiýasy meniň üçin işledi. Şeýle bir owadan däldi, ýöne ygtybarly işleýär. Göçürip almak sahypasynda “Standalone” wersiýasyny gözläň we açyň. Olaryň " Çalt başlangyç " bar. Işledilenden soň, adrese çenli garaşmaly http://127.0.0.1:8080/#repositorylist. Ondan soň "Artifact ýüklemek" -i saýlaň:
IntelliJ ideýasy: Aýrylmak, düzmek, çalyşmak (ýa-da başgalaryň ýalňyşlyklaryny nädip düzetmeli) - 10
"Uploadüklemäge başla", soňra bolsa "Faýllary ýazdyr" -a basyň. Ondan soň ýaşyl üstünlik habary peýda bolar we artefakt “Göz aýlamak” bölüminde elýeterli bolar. Bu banka we pom faýllary üçin edilmeli:
IntelliJ ideýa: Aýrylmak, düzmek, çalyşmak (ýa-da başgalaryň ýalňyşlyklaryny nädip düzetmeli) - 11
Bu, pom faýlynda goşmaça gyşlamak garaşlylygynyň görkezilmegi bilen baglanyşykly. We bary-ýogy 1 ädim galdy - gurmak skriptimizdäki ammary görkeziň:

repositories {
    jcenter()
    maven {
        url "http://127.0.0.1:8080/repository/internal/"
    }
}
Şoňa görä-de, gibriniň wersiýasy bolar : compile 'org.hibernate:hibernate-core:5.2.17.Final-JAVARUSH'. Bularyň hemmesi, indi taslamamyz asyl nusgasyny däl-de, düzedilen wersiýamyzy ulanýar.

Netije

Tanyşan ýaly. Gyzykly boldy diýip umyt edýärin. Şeýle “hileler” seýrek ýerine ýetirilýär, ýöne birden iş talaplaryňyz ulanýan kitaphanalaryňyzyň kanagatlandyryp bilmejek şertlerini goýsa, näme etmelidigiňizi bilýärsiňiz. Hawa, ine şu görnüşde düzedip boljak birnäçe mysal:
  • Undertow atly web serweri bar. Belli bir wagta çenli, proksi ulanylanda, ahyrky ulanyjynyň IP-sini tapmaga mümkinçilik bermeýän bir näsazlyk bardy.
  • Wagtlaýynça, WildFly JPA belli bir usul bilen işledi, spesifikasiýa hasaba alynmady, bu kadadan çykmalar sebäpli. Ony sazlap bolmaýardy.
# Wiaçeslaw
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION