গ্রেড সহ সোর্স জার কীভাবে তৈরি করবেন


155

আমি ওপেন সোর্স প্রকল্পের সাথে কাজ করছি যা গ্রেডেল দিয়ে নির্মিত। আমি এমন একটি (প্রকল্প)-উত্স.জার ফাইল তৈরি করতে চাই যা আমি আমার আইডিই (ইন্টেলিজ আইডিইএ) এ লোড করতে পারি এবং প্রকল্পটির মাধ্যমে ডিবাগ করতে পারি। আমি যদি ফাইলটি উত্পন্ন করতে পারি তবে কীভাবে লোড করতে হয় তা আমি জানি।

আমি প্রকল্পের জন্য উপলব্ধ গ্রেডের কাজগুলি সন্ধান করেছি এবং এমন একটি নেই যা উত্সের জার ফাইল তৈরি করে।

এই প্রকল্পের জন্য উত্স জার ফাইল উত্পন্ন করার সহজতম উপায় কী?

সংকলিত ক্লাসের ফাইলগুলি যুক্ত জার ফাইলে উত্স যুক্ত করা ভাল be

উত্তর:


242
task sourcesJar(type: Jar, dependsOn: classes) {
    classifier = 'sources'
    from sourceSets.main.allSource
}

task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}

artifacts {
    archives sourcesJar
    archives javadocJar
}

4
আমি দুর্দান্ত সুনির্দিষ্ট এবং আমার অনুমানের ভিত্তিতে এই উত্তরটি গ্রহণ করছি যা জাভা প্লাগইন ব্যবহার করে গ্রেড প্রকল্পগুলিতে কাজ করে। দুর্ভাগ্যক্রমে, আমার প্রকল্পটি যেহেতু আমি যে প্রকল্পটি ব্যবহার করছি তাতে জাভা প্লাগইন ব্যবহার হয় না it আমি যে ত্রুটিটি পেয়েছি তা হ'ল "টাস্কে সম্পত্তি 'উত্সসেটস' খুঁজে পাওয়া যায়নি: উত্স জার '।
পল ডি এডেন

যদি এটি গুরুত্বপূর্ণ হয় তবে প্রকল্পটি উল্লেখ করা হয়েছে hsqldb 2.2.8।
পল ডি ইডেন

আমার পরিস্থিতিতে, অলসোর্স সম্পত্তি। জাভা ফাইলগুলি তুলছিল না, আমাকে আমার সোর্স জার টাস্কটি ব্যবহার করতে হবে: উত্সসেটস.মাইন.জাভা থেকে, সোর্সসেটস.মাইন.সোর্সগুলি থেকে
ডগ এয়ার্স

5
আমি যদি ভুল না করি তবে আপনার ক্লাসের নির্ভরতা সম্পর্কিত নির্দিষ্টকরণেরও দরকার নেই। গ্রেডল কোনও কাজের ইনপুটগুলিকে দেখে, কোথা থেকে এসেছে তা নির্ধারণ করে এবং স্বয়ংক্রিয়ভাবে নির্ভরতা তৈরি করে। উদাহরণস্বরূপ জাভাদোকজার জ্যাভাদোক থেকে ফাইলগুলি টানছে, সুতরাং গ্রেডল স্বয়ংক্রিয়ভাবে নির্ভরশীল জাভাদোক যুক্ত করবে।
মাইকেজএক্স 6 আর

আমি কীভাবে অ্যান্ড্রয়েড স্টুডিওতে উত্পন্ন জজার ফাইলগুলি উল্লেখ করতে পারি? এগুলি আমি কোথায় রাখব?
জেজেডি

54

আপনি যদি অ্যান্ড্রয়েড ব্যবহার করছেন:

task sourcesJar(type: Jar) {
    from android.sourceSets.main.java.srcDirs
    classifier = 'sources'
}

task javadoc(type: Javadoc) {
    source = android.sourceSets.main.java.srcDirs
    classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}

task javadocJar(type: Jar, dependsOn: javadoc) {
    classifier = 'javadoc'
    from javadoc.destinationDir
}

artifacts {
    archives javadocJar
    archives sourcesJar
}

থেকে এখানে


34

আপনি যদি সংকলিত ক্লাস জেআর ফাইলটিতে উত্সগুলি যুক্ত করতে চান , যা আপনি এটি গ্রহণযোগ্য হবে বলেওছিলেন, আপনি এটি সহজেই করতে পারেন। আপনার বিল্ড ফাইলে কেবল নিম্নলিখিতটি যুক্ত করুন। আপনি দেখতে পারেন যে, তাত্ত্বিকভাবে, এটি উত্সগুলি পৃথক জেআর রাখার সমাধানের মতো is

 jar {
     from sourceSets.main.allSource
 }

পার্থক্যটি হ'ল আপনি এটি সোর্স জারের পরিবর্তে "জার" বলে মূল জেআর ফাইলটিতে যুক্ত করছেন।


অ্যান্ড্রয়েডের গ্রেড সিস্টেমে, আমি এই ত্রুটিটি পেয়েছি: "org.gradle.api.Project টাইপ প্রজেক্টের পক্ষে যুক্তিগুলির জন্য পদ্ধতি জার () খুঁজে পাইনি"
iamreptar

@ আইআমরেপটার এর পরিবর্তে আপনার সম্ভবত জিওর্ডানোকে (পরবর্তী উত্তরটির লেখক) জিজ্ঞাসা করা উচিত। আমি অ্যান্ড্রয়েড বিকাশকারী নই। stackoverflow.com/a/28969412/1480995
মাইকেল Oryl

31

গ্রেডল 6.0 হিসাবে সমাধান

ধরে নিই যে আপনি java/ 6 java-libraryপ্লাগইন গ্রেডল 6.0 বা তার পরে sourcesJarব্যবহার করেন , আপনি নিম্নলিখিত কনফিগারেশনটি ব্যবহার করে একটি কার্য পেতে পারেন :

java {
    withSourcesJar()
    // and/or analogously use “withJavadocJar()” to get a “javadocJar” task
}

যদি আপনি অতিরিক্তভাবে maven-publish/ ivy-publishপ্লাগইন ব্যবহার করেন (আজকাল সুপারিশকৃত), তবে এটি *-sources.jarআপনার প্রধান জাভা প্রকাশনার সাথে একটি শিল্পকলাও প্রকাশ করবে ।

গ্রেডল ডক্সও দেখুন ।


10

এই কাজ করা উচিত

assemble.dependsOn 'propertyJar'

task propertyJar(type: Jar) {
 archiveName = "myJarName.jar"
 from('src/main/resources') {
    include '**'
 }}

1
assemble.dependsOnpart এই অংশটির জন্য, যা এই কার্যটি স্বয়ংক্রিয়ভাবে চালিত করে।
Jarekczek

3

কোটলিন ডিএসএল সমমান হবে:

tasks {

    val sourcesJar by creating(Jar::class) {
        dependsOn(JavaPlugin.CLASSES_TASK_NAME)
        classifier = "sources"
        from(java.sourceSets["main"].allSource)
    }

    val javadocJar by creating(Jar::class) {
        dependsOn(JavaPlugin.JAVADOC_TASK_NAME)
        classifier = "javadoc"
        from(java.docsDir)
    }

    artifacts {
        add("archives", sourcesJar)
        add("archives", javadocJar)
    }
}

গ্রেডল 5.0 এর অধীনে আমার জন্য কাজ করা নয়: Project."java"সমাধান করে JavaPluginExtensionযা কোনও sourceSetsবা docsDirসম্পত্তি সরবরাহ করে না ।
বেন্টোলার

ব্যবহার করার চেষ্টা করুনfrom(sourceSets["main"].allJava)
ম্যাডহেড

পরিবর্তিত from(javadoc)এবংfrom(sourceSets["main"].allSource)
জিওভান্নি সিলভা

: এছাড়াও kotlin ডিএসএল উপায় দয়া করে উত্তর দিন একটি চেহারা আছে stackoverflow.com/a/60068986/2627884
amatkivskiy

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.