วิธีที่ดีที่สุดในการเพิ่มการรองรับ Gradle ให้กับโครงการ IntelliJ


168

ฉันดูไปรอบ ๆ แล้วและไม่พบทางออกที่ดีที่สุดในการแปลงโครงการ IntelliJ ที่มีอยู่เป็น Gradle ฉันทำงานในสภาพแวดล้อมแบบทีมและปัจจุบันเราแชร์ไฟล์. ipr เนื่องจากเรามีการกำหนดค่าการสร้างบางอย่างที่เราติดตาม เราจะกำจัดพวกที่ชอบ Gradle ในที่สุด แต่ฉันไม่สามารถทำสิ่งต่าง ๆ มากเกินไปจนกว่าการแปลง Gradle จะเสร็จสิ้น

นอกจากนี้ไฟล์ต้นฉบับ Java ของเรายังอยู่ในรูทของไดเรกทอรี src แทน src / main / java ตามที่เป็นมาตรฐาน

มีวิธีที่ฉันสามารถเพิ่ม Gradle ให้กับโครงการของฉันที่จะไม่ทำให้ฉันลบและสร้างโครงการ IntelliJ ของฉันขึ้นมาใหม่และจะไม่ทำให้คนอื่นสับสนเมื่อพวกเขาทำ Git pull?


2
เพื่อที่จะตอบคำถามของไดเรกทอรีต้นทางของคุณ - คุณต้องแทนที่ไดเรกทอรีต้นทางเริ่มต้นกับsourceSets ดูวิธีที่เราทำสิ่งนี้ในไดรเวอร์ MongoDB Java: github.com/mongodb/mongo-java-driver/blob/…
Trisha

คำตอบ:


208

เพิ่ม:

build.gradle 

ในโฟลเดอร์โครงการรากของคุณและใช้ปลั๊กอินเช่น:

apply plugin: 'idea'
//and standard one
apply plugin: 'java'

และด้วยไฟนี้จากบรรทัดคำสั่ง:

gradle cleanIdea 

และหลังจากนั้น:

gradle idea

หลังจากนั้นทุกอย่างจะทำงาน


7
เมื่อพยายามแก้ไขปัญหานี้มีใครบ้างที่พบข้อผิดพลาด "โมดูล 'xx' ไม่สนับสนุนการไล่ระดับสีหรือไม่ถ้าเป็นเช่นนั้นจะแก้ไขได้อย่างไร
Marquis Blount

ขอบคุณสิ่งนี้ทำให้ฉันเป็นบ้าและฉันไม่สามารถหาวิธีที่จะทำให้ IntelliJ รีเฟรชการพึ่งพาโครงการหลังจากเพิ่มลงใน build.gradle
Amala

แนวคิดแบบ gradle (ขึ้นอยู่กับ ideaProject, ideaModule, ideaWorkspace) ไม่ได้ผลสำหรับฉันเนื่องจาก ideaModule ยังคงล้มเหลว แต่ความคิดของโครงการ gradle ทำงานได้ดีและโครงการเปิดใช้งาน Gradle แล้ว
paranza

เอาล่ะมีปัญหากับวิธีนี้ คุณจะได้รับข้อผิดพลาด "ไม่สามารถใช้การอ้างอิงกับ groovy.lang.closure" ได้ ลองใช้โซลูชันนี้แทน: stackoverflow.com/a/17168175/2517730
Yar

1
สิ่งนี้ค่อนข้างล้าสมัยเนื่องจากความคิดของ Gradle plugin ยังคงเป็นรีสอร์ทสำหรับโครงการความคิดแบบใช้ไฟล์ในขณะที่โครงการแบบใช้โฟลเดอร์เป็นมาตรฐานและมีประโยชน์มากกว่า
Xerus

74

ไม่จำเป็นต้องลบ.imlไฟล์ใด ๆ ติดตามสิ่งนี้:

  • ปิดโครงการ
  • File -> Open... และเลือกสิ่งที่คุณสร้างขึ้นใหม่ build.gradle
  • IntelliJ จะถามคุณว่าคุณต้องการ:
    • Open Existing Project
    • Delete Existing Project and Import
  • เลือกตัวเลือกที่สองและคุณทำเสร็จแล้ว

ฉันจะแก้ไขปัญหาว่าโครงการใหม่จะต้องอยู่ในโฟลเดอร์อื่นได้อย่างไร
barracuda317

สิ่งนี้จะเพิ่ม JAR จากโครงสร้างโครงการของคุณหรือไม่ ไลบรารีเป็นการอ้างอิงและสร้าง EAR (โดยใช้ปลั๊กอิน) ตามที่กำหนดไว้ใน Project Structure | สิ่งประดิษฐ์?
NOTiFY

@NOTiFY ฉันสงสัยว่ามันทำ มันเทียบเท่ากับการตรวจสอบโครงการตั้งแต่เริ่มต้น
Michal Kordas

@Michal Kordas ฉันเพิ่มการพึ่งพาทั้งหมดด้วยมือไม่ได้ใช้เวลาใกล้กับที่ฉันคาดไว้และเพิ่มการสร้าง WAR, JAR & EAR มีคำขอคุณลักษณะสำหรับสิ่งนี้ที่ JetBrains youtrack.jetbrains.com/issue/IDEABKL-6990
NOTiFY

46

อีกวิธีง่ายกว่า

เพิ่มของคุณ

build.gradle

ไฟล์ไปยังรากของโครงการของคุณ ปิดโครงการ ลบไฟล์ * .iml ด้วยตนเอง จากนั้นเลือก "นำเข้าโครงการ ... " นำทางไปยังไดเรกทอรีโครงการของคุณเลือกไฟล์build.gradleและคลิกตกลง


21

ใน IntelliJ 2017.2.4 ฉันเพิ่งปิดโครงการและเปิดใหม่อีกครั้งและฉันได้รับการโต้ตอบถามฉันว่าฉันต้องการเชื่อมโยงกับbuild.gradleซึ่งเปิดกล่องโต้ตอบการนำเข้าสำหรับโครงการ Gradle หรือไม่

ไม่จำเป็นต้องลบไฟล์ใด ๆ หรือเพิ่มความคิดปลั๊กอินbuild.gradle


2
สามารถยืนยันผลงานนี้ได้เป็นอย่างดี เพียงแค่รัน gradle init ในรูทโปรเจ็กต์จากนั้นคุณจะได้รับกล่องโต้ตอบในครั้งต่อไปที่คุณเปิดโปรเจ็กต์
Alex H.

16

เช่นเดียวกับการอ้างอิงในอนาคตหากคุณมีMavenโครงการทั้งหมดที่คุณต้องทำคือทำgradle initในไดเรกทอรีโครงการของคุณซึ่งจะสร้างbuild.gradleและการอ้างอิงอื่น ๆ แล้วทำgradle buildในไดเรกทอรีเดียวกัน


2
สิ่งที่น่าสนใจ: การสร้าง Gradle Builds ใหม่ - หมายเหตุ: gradle initสามารถสร้างโครงการประเภทต่าง ๆ ได้หลากหลายและแม้แต่จะรู้วิธีการแปลpom.xmlไฟล์อย่างง่ายไปเป็น Gradle
Guy Coder

7

ฉันใช้ IntelliJ รุ่น 12

ฉันแก้ไขปัญหาที่คล้ายกันโดยการสร้างโครงการใหม่ทั้งหมดและ "การตรวจสอบจากการควบคุมเวอร์ชัน" การผสานสองโครงการในภายหลังนั้นค่อนข้างง่าย


1
  1. เพิ่มbuild.gradleในไดเรกทอรีรากของโครงการ

  2. จากนั้นเพียงแค่File->Invalidate Caches / Restart

นี่คือ build.gradle พื้นฐานสำหรับโครงการ Java:

plugins {
    id 'java'
}

sourceCompatibility = '1.8'
targetCompatibility = '1.8'
version = '1.2.1'
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.