গ্রেড সহ বহু-প্রকল্পের পরীক্ষা নির্ভরতা


153

আমার একটি বহু-প্রকল্প কনফিগারেশন রয়েছে এবং আমি গ্রেড ব্যবহার করতে চাই।

আমার প্রকল্পগুলি এরকম:

  • প্রকল্প এ

    • -> src/main/java
    • -> src/test/java
  • প্রকল্প বি

    • -> src/main/java( প্রকল্প এsrc/main/java উপর নির্ভর করে )
    • -> src/test/java( প্রকল্প এsrc/test/java উপর নির্ভর করে )

আমার প্রজেক্ট বি build.gradle ফাইলটি এরকম:

apply plugin: 'java'
dependencies {
  compile project(':ProjectA')
}

কাজটি compileJavaদুর্দান্ত কাজ করে তবে প্রকল্প এcompileTestJava থেকে পরীক্ষার ফাইলটি সংকলন করে না ।


2
সম্ভাব্য প্রতিলিপির: stackoverflow.com/questions/5144325/gradle-test-dependency
মাইক Rylander

উত্তর:


122

অবহেলিত - গ্রেডল 5.6 এবং উপরেের জন্য এই উত্তরটি ব্যবহার করুন ।

ইন প্রকল্প বি , আপনি শুধু একটি যোগ করতে হবে testCompileনির্ভরতা:

dependencies {
  ...
  testCompile project(':A').sourceSets.test.output
}

গ্রেডল 1.7 দিয়ে পরীক্ষিত।


7
শ্রেণীর বৈশিষ্ট্যটি প্রত্যাখ্যান করা হয়েছে - পরিবর্তে আউটপুট ব্যবহার করুন।
ফেল্লার

12
এটি গ্রেডল ১.৩ এ কাজ করে না কারণ উত্সসেটগুলি এখন কোনও প্রকল্পের সর্বজনীন সম্পত্তি নয়।
ডেভিড পার্সসন

3
উপরের সমাধানটি মনে রাখবেন gradle testClassesবিল্ড স্ট্রাকচারটি আসলে বৈধ হওয়ার আগে কমপক্ষে একটি আগে প্রয়োজন । যেমন Eclipse প্লাগইন আপনাকে এর আগে এই প্রকল্পটি আমদানি করতে দেয় না। এটা সত্যিই লজ্জাজনক testCompile project(':A')কাজ করে না। @ ডেভিডপারসন: ফেডারার গ্রেডল ১.7 নিয়ে পরীক্ষা করার পর থেকে "গ্রেডল ১.৩" "আর" বিরোধিতা করে না।
প্যাট্রিক বার্গনার

3
আমার জন্য কাজ করেনি। বিজ্ঞপ্তি নির্ভরতা: সংকলন টেস্টজভা \ ---: পরীক্ষার ক্লাস \ ---: সংকলন টেস্টজভা (*)
রাহুলমোহন

8
এটি করবেন না, প্রকল্পগুলি অন্য প্রকল্পগুলিতে পৌঁছানোর কথা নয়। পরিবর্তে নিকিতার উত্তরটি ব্যবহার করুন, এটি সঠিকভাবে একটি প্রকল্প নির্ভরতা হিসাবে মডেলিং করুন।
স্টেফান ওহমে

63

সহজ উপায় হ'ল প্রকল্প বি তে সুস্পষ্ট কার্য নির্ভরতা যুক্ত করা:

compileTestJava.dependsOn tasks.getByPath(':ProjectA:testClasses')

প্রজেক্টএর জন্য অতিরিক্ত আর্টিক্ট কনফিগারেশন তৈরি করা সহজ (তবে আরও স্পষ্ট) উপায়:

task myTestsJar(type: Jar) { 
  // pack whatever you need...
}

configurations {
  testArtifacts
}

artifacts {
   testArtifacts myTestsJar
}

এবং প্রকল্পের জন্য testCompileনির্ভরতা যুক্ত করুন

apply plugin: 'java'
dependencies {
  compile project(':ProjectA')
  testCompile project(path: ':ProjectA', configuration: 'testArtifacts')
}

3
আমি এটি চেষ্টা করেছি (সহজ উপায়) এবং এটি নিশ্চিত করে যে এটি পরীক্ষার ক্লাসগুলি তৈরি করে, এটি ক্লাসস্প্যাটে পরীক্ষার পথ যোগ করে না তাই আমার প্রকল্প প্রকল্পের পরীক্ষাগুলি যা প্রজেক্টএ পরীক্ষার ক্লাসগুলির উপর নির্ভর করে এখনও তৈরি করতে ব্যর্থ হয়।
pjz

1
@ ডিএমওবিয়াস আপনাকে testArtifactsএই জাতীয় কনফিগারেশন যুক্ত করতে হবে : configurations { testArtifacts } আরও তথ্যের জন্য গ্রেডল
নিকিতা

7
গ্রেডল 1.8 এ আপনি from sourceSets.test.outputসম্ভবত উত্তরটির classifier = 'tests'জায়গায় এবং সম্ভবত চাইতে পারেন// pack whatever you need...
পিটার ল্যামবার্গ ২

1
নিশ্চিত করেছেন যে গ্রেডল ১.১২ এর সাথে সম্পূর্ণ সমাধানটি ব্যবহার করে @ পিটারল্যামবার্গের প্রস্তাবিত সংযোজনগুলি প্রত্যাশা অনুযায়ী কাজ করবে। Eclipse এ প্রকল্পের আমদানিকে প্রভাবিত করে না।
স্যফিট

3
এটি গ্রেডেল ৪.7 এ আমার জন্য কাজ করে। তাদের কাছে এখন ডকস. gradle.org/current/dsl/…
নাথান উইলিয়ামস

19

এটি এখন গ্রেডলে প্রথম শ্রেণীর বৈশিষ্ট্য হিসাবে সমর্থিত। প্লাগইন সহ javaবা মডিউলগুলিতে java-libraryএমন একটি java-test-fixturesপ্লাগইন অন্তর্ভুক্ত থাকতে পারে যা সহায়িকারীর সাথে গ্রাস করার জন্য সহায়ক শ্রেণি এবং সংস্থানগুলি উন্মোচিত করে testFixtures। শৈল্পিক এবং শ্রেণিবদ্ধের বিরুদ্ধে এই পদ্ধতির সুবিধা হ'ল:

  • সঠিক নির্ভরতা ব্যবস্থাপনা (বাস্তবায়ন / এপিআই)
  • পরীক্ষার কোড থেকে আলাদা বিচ্ছেদ (পৃথক উত্স সেট)
  • শুধুমাত্র ইউটিলিটিগুলি প্রকাশ করার জন্য পরীক্ষার ক্লাসগুলি ফিল্টার করার দরকার নেই
  • গ্রেডল দ্বারা রক্ষণাবেক্ষণ

উদাহরণ

:modul:one

modul / এক / build.gradle

plugins {
  id "java-library" // or "java"
  id "java-test-fixtures"
}

modul / এক / src / testFixtures / জাভা / কম / উদাহরণস্বরূপ / Helper.java

package com.example;
public class Helper {}

:modul:other

modul / অন্যান্য / build.gradle

plugins {
  id "java" // or "java-library"
}
dependencies {
  testImplementation(testFixtures(project(":modul:one")))
}

modul / অন্যান্য / src / পরীক্ষা / জাভা / কম / উদাহরণস্বরূপ / অন্যান্য / SomeTest.java

package com.example.other;
import com.example.Helper;
public class SomeTest {
  @Test void f() {
    new Helper(); // used from :modul:one's testFixtures
  }
}

আরও পড়া

আরও তথ্যের জন্য ডকুমেন্টেশন দেখুন: https://docs.gradle.org/current/userguide/ java_testing.html# sec:
java_test_fixtures

এটি 5.6 তে যুক্ত করা হয়েছিল: https://docs.gradle.org/5.6/release-notes.html#test-fixtures- for- java-projects


তারা এন্ড্রয়েডে এটি সমর্থন করার জন্য কাজ করছে, ইস্যুজেট্রেকের জিওলাইভিউ
অ্যালবার্ট ভিলা ক্যালভো

18

আমি সম্প্রতি নিজেরাই এই সমস্যাটি নিয়ে এসেছি এবং এর উত্তর খুঁজে পাওয়া লোকই এটি একটি কঠিন বিষয়।

আপনি যে ভুলটি করছেন তা ভাবছে যে কোনও প্রকল্পের তার পরীক্ষার উপাদানগুলি একইভাবে রফতানি করা উচিত যেভাবে এটি তার প্রাথমিক শিল্পকলা এবং নির্ভরতা রফতানি করে।

ব্যক্তিগতভাবে যা আমি অনেক বেশি সাফল্য পেয়েছিলাম তা গ্র্যাডলে একটি নতুন প্রকল্প তৈরি করছিল। আপনার উদাহরণে, আমি এটির নাম দেব

প্রকল্প এ_স্টেস্ট -> এসআরসি / প্রধান / জাভা

আপনার বর্তমানে প্রকল্প এ / এসসিআর / পরীক্ষা / জাভাতে থাকা ফাইলগুলি আমি এসআরসি / মেইন / জাভাতে রেখে দেব। আপনার প্রকল্পের যে কোনও পরীক্ষার সংকলন নির্ভরতা তৈরি করুন প্রকল্প এটেষ্টের একটি নির্ভরশীলতা সংকলন করুন।

তারপরে প্রকল্প এ_স্টেস্টকে একটি প্রকল্প বি এর নির্ভরযোগ্যতা নির্ভর করুন omp

উভয় প্রকল্পের লেখকের দৃষ্টিকোণ থেকে আপনি এটিকে যুক্তিযুক্ত না করলেও আমি মনে করি যখন আপনি জুনিট এবং স্কেলেস্টের মতো প্রকল্পগুলি (এবং অন্যদের জন্য চিন্তা করেন) তখন এটি অনেক অর্থবোধ করে। যদিও ফ্রেমওয়ার্কগুলি পরীক্ষার সাথে সম্পর্কিত হলেও তারা তাদের নিজস্ব কাঠামোর মধ্যে "পরীক্ষার" লক্ষ্যগুলির অংশ হিসাবে বিবেচনা করা হয় না - তারা প্রাথমিক নিদর্শনগুলি তৈরি করে যা অন্য প্রকল্পগুলি কেবল তাদের পরীক্ষার কনফিগারেশনের মধ্যেই ব্যবহার করে। আপনি কেবল একই প্যাটার্নটি অনুসরণ করতে চান।

এখানে তালিকাভুক্ত অন্যান্য উত্তরগুলি করার চেষ্টা করা ব্যক্তিগতভাবে আমার জন্য কার্যকর হয়নি (গ্রেডেল ১.৯ ব্যবহার করে) তবে আমি খুঁজে পেয়েছি যে প্যাটার্নটি আমি এখানে বর্ণনা করি তা যাইহোক একটি পরিষ্কার সমাধান।


হ্যাঁ, দিন শেষে এই পদ্ধতির পক্ষে বেছে নিয়েছেন।
কোমা

এটিই সেরা পন্থা! আমি প্রকল্পের A তে টেস্ট কোডটি রেখেছি এবং কেবলমাত্র উভয় এসসিআরসি / পরীক্ষা / জাভা এবং বি এসসিআর / পরীক্ষা / জাভা উভয়ের জন্য নির্ভরতা এটেষ্টে স্থানান্তরিত করব। তারপরে প্রকল্প এ_স্টেস্টকে এ এবং বি উভয়ের পরীক্ষার বাস্তবায়ন নির্ভরতা করুন
এরিক সিলন

17

আমি জানি এটি একটি পুরানো প্রশ্ন তবে আমার ঠিক একই সমস্যা ছিল এবং যা চলছে তা নির্ধারণ করার জন্য কিছু সময় ব্যয় করেছি। আমি গ্রেডল 1.9 ব্যবহার করছি। সমস্ত পরিবর্তনগুলি প্রকল্পের মধ্যে হওয়া উচিত inbuild.gradle

প্রজেক্টবি থেকে টেস্ট ক্লাস ব্যবহার করতে প্রকল্পের পরীক্ষায়:

testCompile files(project(':ProjectA').sourceSets.test.output.classesDir)

sourceSetsপ্রজেক্টএর জন্য সম্পত্তি উপলব্ধ কিনা তা নিশ্চিত করতে :

evaluationDependsOn(':ProjectA')

আপনি যখন প্রজেক্টবি সংকলন করেন তখন প্রকল্পের পরীক্ষার ক্লাসগুলি প্রকৃতপক্ষে সেখানে থাকে তা নিশ্চিত করার জন্য:

compileTestJava.dependsOn tasks.getByPath(':ProjectA:testClasses')

1
এটি আমার পক্ষে বাদ দিয়েছিল আমাকে বাদ দিয়ে .classesDir

11

গ্রেড প্লাগইন হিসাবে নতুন টেস্টজার ভিত্তিক (ট্রেনসিটিভ নির্ভরতা সমর্থিত) সমাধান উপলব্ধ:

https://github.com/hauner/gradle-plugins/tree/master/jartest

https://plugins.gradle.org/plugin/com.github.hauner.jarTest/1.0

ডকুমেন্টেশন থেকে

আপনার যদি মাল্টি-প্রজেক্টের গ্রেড বিল্ড থাকে তবে আপনার সাব-প্রকল্পগুলির মধ্যে পরীক্ষার নির্ভরতা থাকতে পারে (এটি সম্ভবত একটি ইঙ্গিত যা আপনার প্রকল্পগুলি সুগঠিত নয়)।

উদাহরণস্বরূপ এমন একটি প্রকল্পটি ধরুন যেখানে উপ-প্রকল্প প্রকল্প বি প্রকল্পের উপর নির্ভর করে এবং খ কেবল এ এর ​​উপর একটি সংকলন নির্ভরতা নয় বরং পরীক্ষার নির্ভরতাও রয়েছে। বি এর পরীক্ষাগুলি সংকলন ও পরিচালনা করতে আমাদের এ থেকে কিছু পরীক্ষার সহায়ক ক্লাস প্রয়োজন need

ডিফল্ট গ্রেডেল কোনও প্রকল্পের পরীক্ষা বিল্ড আউটপুট থেকে একটি জার আর্টিক্ট তৈরি করে না।

এই প্লাগইনটি পরীক্ষার উত্স সেট থেকে জার তৈরি করার জন্য একটি টেস্টআরচাইভস কনফিগারেশন (টেস্টকম্পাইলের উপর ভিত্তি করে) এবং একটি জার টেস্ট টাস্ক যুক্ত করে (জারের নামে শ্রেণিবদ্ধ পরীক্ষা যুক্ত করে)। এরপরে আমরা A এর টেস্টআর্কাইভ কনফিগারেশনের উপর বি এর উপর নির্ভর করতে পারি (এতে এ এর ​​ট্রানজিটিভ নির্ভরতাও অন্তর্ভুক্ত থাকবে)।

এ এ আমরা বিল্ড.gradle এ প্লাগইন যুক্ত করব:

apply plugin: 'com.github.hauner.jarTest'

বিতে আমরা টেস্টআর্কাইভস কনফিগারেশনটির মতো উল্লেখ করি:

dependencies {
    ...
    testCompile project (path: ':ProjectA', configuration: 'testArchives') 
}

1
যদিও এই লিঙ্কটি প্রশ্নের উত্তর দিতে পারে, উত্তরের প্রয়োজনীয় অংশগুলি এখানে অন্তর্ভুক্ত করা এবং রেফারেন্সের জন্য লিঙ্কটি সরবরাহ করা ভাল। লিঙ্কযুক্ত পৃষ্ঠাগুলি পরিবর্তিত হলে লিঙ্ক-শুধুমাত্র উত্তরগুলি অবৈধ হতে পারে। - পর্যালোচনা থেকে
ইয়ান

পাঠ্য কয়েকটি লাইন যুক্ত করা হয়েছে
দৈত্য101

যাইহোক, নতুন গ্রেডেল প্লাগইন সম্পর্কিত তথ্য সরবরাহ করা হয়েছে।
দৈত্য 101

4
@ demon101 গ্রেডেল ৪.6 এ কাজ করছেন না, ত্রুটি পেয়েছেনCould not get unknown property 'testClasses' for project ':core' of type org.gradle.api.Project.
বিগনেশ সুন্দর

11

আপডেট বেলুন পড়ুন দয়া করে।

JustACluelessNewbie দ্বারা বর্ণিত অনুরূপ সমস্যাগুলি ইন্টেলিজ আইডিইএতে ঘটে। সমস্যা হ'ল নির্ভরতা বলতে testCompile project(':core').sourceSets.test.outputআসলে বোঝায়: "গ্রেড বিল্ড টাস্ক দ্বারা উত্পন্ন শ্রেণীর উপর নির্ভরশীল "। সুতরাং আপনি যদি ক্লিন প্রকল্পটি চালু করেন যেখানে ক্লাস তৈরি করা হয়নি তবে আইডিইএ তাদের চিনতে পারে না এবং ত্রুটির প্রতিবেদন করে।

এই সমস্যাটি সমাধানের জন্য আপনাকে সংকলিত ক্লাসগুলির উপর নির্ভরতার পাশের পরীক্ষার উত্স ফাইলগুলির উপর নির্ভরতা যুক্ত করতে হবে।

// First dependency is for IDEA
testCompileOnly files { project(':core').sourceSets.test.java.srcDirs }
// Second is for Gradle
testCompile project(':core').sourceSets.test.output

আপনি মডিউল সেটিংস -> নির্ভরতা (পরীক্ষার সুযোগ) এ আইডিইএ দ্বারা স্বীকৃত নির্ভরতা পর্যবেক্ষণ করতে পারেন ।

BTW। এটি দুর্দান্ত সমাধান নয় তাই রিফ্যাক্টরিং বিবেচনা করার মতো। গ্রেডলে নিজেই কেবল পরীক্ষা-সমর্থন ক্লাস যুক্ত বিশেষ সাবপ্রজেক্ট থাকে। Https://docs.gradle.org/current/userguide/test_kit.html দেখুন

আপডেট করুন 2016-06-05 আরও আমি প্রস্তাবিত সমাধানের বিষয়ে ভাবছি কম আমার এটি পছন্দ হয়। এটিতে কয়েকটি সমস্যা রয়েছে:

  1. এটি আইডিইএতে দুটি নির্ভরতা তৈরি করে। সংকলিত ক্লাসে উত্স পরীক্ষার জন্য একটি পয়েন্ট। এবং এই নির্ভরতাগুলি আইডিইএ দ্বারা স্বীকৃত কোন ক্রমে এটি গুরুত্বপূর্ণ। আপনি এটির সাথে মডিউল সেটিংস -> নির্ভরতা ট্যাবে নির্ভরতা আদেশ পরিবর্তন করে খেলতে পারেন।
  2. এই নির্ভরতা ঘোষণা করে আপনি অযথাই নির্ভরতা কাঠামো দূষিত করছেন।

তাহলে এর চেয়ে ভাল সমাধান কী? আমার মতে এটি নতুন কাস্টম উত্স সেট তৈরি করছে এবং এতে ভাগ করা ক্লাস যুক্ত করছে। আসলে গ্রেডেল প্রকল্পের লেখকগণ টেস্টফাইচারস উত্স সেট তৈরি করে এটি করেছিলেন did

এটি করতে আপনার কেবলমাত্র:

  1. উত্স সেট তৈরি করুন এবং প্রয়োজনীয় কনফিগারেশন যুক্ত করুন। গ্রেডেল প্রকল্পে ব্যবহৃত এই স্ক্রিপ্ট প্লাগইনটি দেখুন: https://github.com/gradle/gradle/blob/v4.0.0/gradle/testFixtures.gradle
  2. নির্ভর প্রকল্পে যথাযথ নির্ভরতা ঘোষণা করুন:

    dependencies {
        testCompile project(path: ':module-with-shared-classes', configuration: 'testFixturesUsageCompile')
    }
    
  3. আইডিইএতে গ্রেডেল প্রকল্পটি আমদানি করুন এবং আমদানির সময় "উত্স প্রতি পৃথক পৃথক মডিউল তৈরি করুন" বিকল্পটি ব্যবহার করুন।


1
@ জজনিস ফিক্সড BTW। গ্রেডল তার গ্রোভি ভিত্তিক পরীক্ষার ফিক্সচার প্লাগইনকে
ভ্যাক্লাভ কুয়েল

@ ভ্যাকলাভকুয়েল আমি আপনার ব্লগ পোস্টের মাধ্যমে আপনার আকর্ষণীয় সমাধানটি সন্ধান করেছি এবং এটি আমার সমস্যাটি খুব সুন্দরভাবে সমাধান করেছে। ধন্যবাদ;)
zaerymoghaddam

10

যখন আমি অ্যান্ড্রয়েড প্রকল্প (গ্রেড ২.২.০) তৈরি করার চেষ্টা করেছিলাম তখন ফিসলারের সমাধানটি আমার পক্ষে কার্যকর হয় নি। সুতরাং আমাকে প্রয়োজনীয় ক্লাসগুলি নিজেই উল্লেখ করতে হয়েছিল:

android {
    sourceSets {
        androidTest {
            java.srcDir project(':A').file("src/androidTest/java")
        }
        test {
            java.srcDir project(':A').file("src/test/java")
        }
    }
}

1
সামান্য টাইপো, প্রজেক্টের পরে শেষের উদ্ধৃতিটি (": এ ') অনুপস্থিত। যদিও এটি আমার জন্য কাজ করেছে, ধন্যবাদ এম 8
রায়ান নিউজম

1
Android এর জন্য এই ধারণা আমার জন্য সুন্দর কাজ হল hacky অনুভূতি ছাড়া stackoverflow.com/a/50869037/197141
arberg

@ আরবার্গ হ্যাঁ, এটি একটি ভাল পদ্ধতির মত বলে মনে হচ্ছে। আমি দেখতে পাই কেবলমাত্র সীমাবদ্ধতা @VisibleForTestingলিন্টের নিয়মগুলির সাথে। পরীক্ষিত ফোল্ডারের অধীনে আপনি নিয়মিত মডিউল থেকে এ জাতীয় পদ্ধতিতে কল করতে পারবেন না।
বেলু

5

আমি পার্টিতে এত দেরি করেছি (এটি এখন গ্রেডল v4.4) তবে অন্য যে কেউ এটি খুঁজে পান:

ধরে নেওয়া যাক:

~/allProjects
|
|-/ProjectA/module-a/src/test/java
|
|-/ProjectB/module-b/src/test/java

প্রকল্প বি এর বিল্ড্র্যাডলে যান (যেটি এ থেকে কিছু পরীক্ষার শ্রেণীর প্রয়োজন) এবং নিম্নলিখিতগুলি যুক্ত করুন:

sourceSets {
    String sharedTestDir = "${projectDir}"+'/module-b/src/test/java'
    test {
        java.srcDir sharedTestDir
    }
}

বা (ধরে নিলাম আপনার প্রকল্পের নাম দেওয়া হয়েছে "প্রজেক্টবি")

sourceSets {
    String sharedTestDir = project(':ProjectB').file("module-b/src/test/java")
    test {
        java.srcDir sharedTestDir
    }
}

ভাল খবর!


3
প্রশ্নটিতে অ্যান্ড্রয়েডের উল্লেখ নেই। বিকাশকারী অ্যান্ড্রয়েডের জন্য বিকাশ করছে কিনা তা আপনি কী নিজের উত্তরকে অজ্ঞাব্য বানাতে পারেন, বা এটি কেবল অ্যান্ড্রয়েড বিকাশকারীদের পক্ষে?
রবিন গ্রিন

4

আপনি উপহাস নির্ভরতা যা আপনি পরীক্ষা মধ্যে ভাগ করতে হবে থাকে, তাহলে আপনি নতুন প্রকল্প তৈরি করতে পারেন projectA-mockএবং তারপর পরীক্ষা নির্ভরতা যেমন যোগ ProjectAএবং ProjectB:

dependencies {
  testCompile project(':projectA-mock')
}

এই শেয়ার করুন উপহাস নির্ভরতা পরিষ্কার সমাধান, কিন্তু আপনি থেকে পরীক্ষা চালানোর প্রয়োজন হলে ProjectAProjectBঅন্যান্য সমাধান ব্যবহার।


ভাগ করা মক মামলার দুর্দান্ত সমাধান!
এরিক সিলান

4

আপনি যদি শিল্পকর্ম নির্ভরতা ব্যবহার করতে চান :

  • প্রকল্প বি এর উত্স শ্রেণিগুলি প্রকল্প এ এর ​​উত্স শ্রেণীর উপর নির্ভর করে on
  • প্রকল্পের পরীক্ষার ক্লাসগুলি প্রকল্প এ এর ​​পরীক্ষা ক্লাসের উপর নির্ভর করে

তারপরে build.gradleপ্রোজেক্টবি'র নির্ভরতা বিভাগটি এর মতো দেখতে হবে:

dependencies {

  compile("com.example:projecta:1.0.0")

  testCompile("com.example:projecta:1.0.0:tests")

}

এটির কাজ করার জন্য প্রজেক্টএকে একটি স্টেট জার তৈরি করা এবং এটি উত্পাদিত নিদর্শনগুলিতে অন্তর্ভুক্ত করা উচিত।

প্রজেক্টএ এর বিল্ড.gradle এ এই জাতীয় কনফিগারেশন থাকতে হবে:

task testsJar(type: Jar, dependsOn: testClasses) {
    classifier = 'tests'
    from sourceSets.test.output
}

configurations {
    tests
}

artifacts {
    tests testsJar
    archives testsJar
}

jar.finalizedBy(testsJar)

যখন প্রজেক্টএর শৈল্পিকগুলি আপনার শৈল্পিকগুলিতে প্রকাশিত হয় তখন সেগুলিতে একটি প্রতিভা জার অন্তর্ভুক্ত থাকবে ।

TestCompile ProjectB এর নির্ভরতা বিভাগে ক্লাস মধ্যে আনতে হবে -tests বয়াম।


আপনি যদি উন্নয়নের প্রয়োজনে ফ্ল্যাট প্রজেক্টএর উত্স এবং পরীক্ষার ক্লাসকে প্রকল্প বিতে অন্তর্ভুক্ত করতে চান তবে প্রজেক্টবির বিল্ড অ্যাড্র্যাডলে নির্ভরতা বিভাগটি এর মতো দেখতে পাবেন:

dependencies {

  compile project(':projecta')

  testCompile project(path: ':projecta', configuration: 'tests')

}

1
দুর্ভাগ্যক্রমে (গ্রেডল 6 এ) ফ্ল্যাটের অন্তর্ভুক্ত, যা আমি চেয়েছিলাম ঠিক তেমন কাজ করে না কারণ কোনও কনফিগারেশন 'পরীক্ষা' নেই। println(configurations.joinToString("\n") { it.name + " - " + it.allDependencies.joinToString() })(কোটলিন বিল্ডস্ক্রিপ্টে) ব্যবহার করে , আমি নির্ধারণ করেছি যে কোন কনফিগারেশনগুলি এখনও বিদ্যমান এবং এর নির্ভরতা রয়েছে, তবে এই সমস্ত গ্র্যাডেলের অভিযোগ করেছে:Selected configuration 'testCompileClasspath' on 'project :sdk' but it can't be used as a project dependency because it isn't intended for consumption by other components.
জেরুস

2

অন্যান্য উত্তরগুলির মধ্যে একটির অন্য কোনও কারণে ত্রুটি ঘটেছিল - গ্রেডল অন্যান্য প্রকল্পের পরীক্ষার ক্লাস সনাক্ত করতে পারেনি বা আমদানি করার সময় এক্সিলিপ প্রকল্পের অবৈধ নির্ভরতা ছিল। কারও যদি একই সমস্যা হয় তবে আমি পরামর্শ দিচ্ছি:

testCompile project(':core')
testCompile files(project(':core').sourceSets.test.output.classesDir)

প্রথম লাইনটি অন্যান্য প্রকল্পকে নির্ভরতা হিসাবে লিঙ্ক করতে বাধ্য করে, তাই সমস্ত উত্স অন্তর্ভুক্ত করা এবং আপ টু ডেট। দ্বিতীয়টি গ্রেডলকে আসলে উত্সগুলি দেখার অনুমতি দেয়, যখন এর মতো কোনও অবৈধ নির্ভরতা ত্রুটি না ঘটায় testCompile project(':core').sourceSets.test.output


2

এখানে আপনি যদি কোটলিন ডিএসএল ব্যবহার করছেন তবে গ্রেডল ডকুমেন্টেশন অনুসারে আপনার নিজের কাজটি তৈরি করা উচিত ।

পূর্ববর্তী কয়েকটি উত্তরের মতো আপনারও প্রকল্পের অভ্যন্তরে একটি বিশেষ কনফিগারেশন তৈরি করতে হবে যা এর পরীক্ষাগুলি ভাগ করবে, যাতে আপনি পরীক্ষা এবং প্রধান ক্লাসগুলি মিশ্রিত না করে।

সহজ পদক্ষেপ

  1. ইন প্রকল্পের একটি আপনি আপনার যোগ করতে হবে build.gradle.kts:
configurations {
    create("test")
}

tasks.register<Jar>("testArchive") {
    archiveBaseName.set("ProjectA-test")
    from(project.the<SourceSetContainer>()["test"].output)
}

artifacts {
    add("test", tasks["testArchive"])
}
  1. তারপরে নির্ভরতাগুলিতে আপনার প্রোজেক্ট বিতে আপনার নিজেরটি যুক্ত করতে হবে build.gradle.kts:
dependencies {
    implementation(project(":ProjectA"))
    testImplementation(project(":ProjectA", "test"))
}

-1

প্রকল্পে বি:

dependencies {
  testCompile project(':projectA').sourceSets.test.output
}

1.7-আরসি -2 এ কাজ করার জন্য মনে হচ্ছে


2
এটি গ্রহণের দ্বারা প্রকল্প পরিচালনায় অপ্রয়োজনীয় জটিলতা তৈরি করে। @ নিকিতাস্কভোর্টসভ প্রস্তাবিত সমাধানটি পছন্দনীয়।
22-28 এ স্যফিট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.