জাভা EE API গুলি দিয়ে অবহেলিত JPMS মডিউলগুলির প্রতিস্থাপন


183

জাভা 9 ছয়টি মডিউল অবহিত করেছে যা জাভা ইই এপিআইগুলিকে ধারণ করে এবং সেগুলি শীঘ্রই সরানো হবে:

  • java.activation সঙ্গে javax.activationপ্যাকেজ
  • java.corba সঙ্গে javax.activity, javax.rmi, javax.rmi.CORBA, এবং org.omg.*প্যাকেজ
  • java.transaction সঙ্গে javax.transactionপ্যাকেজ
  • java.xML.bind সমস্ত javax.xml.bind.*প্যাকেজ সহ
  • java.xml.ws সঙ্গে javax.jws, javax.jws.soap, javax.xml.soap, এবং সমস্ত javax.xml.ws.*প্যাকেজ
  • java.xml.ws.annotation সঙ্গে javax.annotationপ্যাকেজ

কোন তৃতীয় পক্ষের নিদর্শনগুলি সেই API গুলি সরবরাহ করে? তারা API সমস্ত API কীভাবে সরবরাহ করে বা কোন অন্যান্য বৈশিষ্ট্যগুলি তাদের সরবরাহ করতে পারে তা বিবেচ্য নয় - যা গুরুত্বপূর্ণ তা হল তারা কি এই মডিউলগুলি / প্যাকেজগুলির জন্য একটি ড্রপ-ইন প্রতিস্থাপন?

জেনেডেলজ সংগ্রহ করা সহজ করার জন্য, আমি এখন পর্যন্ত যা জানি তা দিয়ে উত্তর দিয়েছি এবং উত্তরটি একটি সম্প্রদায়ের উইকিতে পরিণত করেছি। আমি আশা করি লোকেরা নিজের উত্তর লেখার পরিবর্তে এটি বাড়িয়ে দেবে।


আপনি ভোট দেওয়ার আগে বন্ধ করুন:

  • হ্যাঁ, পৃথক মডিউল সম্পর্কে ইতিমধ্যে কিছু প্রশ্ন রয়েছে এবং এই প্রশ্নের উত্তর অবশ্যই সেই তথ্যটিকে নকল করবে। তবে এএফআইকে এই সমস্ত সম্পর্কে জানার কোনও একক পয়েন্ট নেই, যা আমি মনে করি এর অনেক মূল্য রয়েছে।
  • লাইব্রেরির সুপারিশগুলির জন্য জিজ্ঞাসা করা প্রশ্নগুলি সাধারণত অফ-টপিক হিসাবে বিবেচিত হয়, কারণ "তারা মতামতযুক্ত উত্তর এবং স্প্যাম আকর্ষণ করার ঝোঁক", তবে আমি মনে করি না এটি এখানে প্রযোজ্য। বৈধ পাঠাগারগুলির সেটটি পরিষ্কারভাবে বর্ণিত হয়েছে: তাদের একটি নির্দিষ্ট মান প্রয়োগ করতে হবে। এর বাইরে অন্য কিছু গুরুত্বপূর্ণ নয়, তাই আমি মতামত এবং স্প্যামের জন্য খুব বেশি ঝুঁকি দেখছি না।

6
আপনি বেশিরভাগই github.com/javaee এর অধীনে স্থানান্তরিত হওয়া এবং জেপি 320
নামান

ইনফো ওয়ার্ল্ড, জাভা রোডম্যাপে এই 2018-05-14 নিবন্ধটি দেখুন: গ্রহপসের জাকার্তা EE এন্টারপ্রাইজ জাভা পল ক্রিলের আকার নিয়েছে । উপশিরোনাম: অন্ধকার ফাউন্ডেশন যে নতুন মেঘ-নেটিভ, microservices বান্ধব এন্টারপ্রাইজ জাভা প্রচেষ্টা আপ করতে হবে 39 প্রকল্পের রূপরেখা, এবং কিভাবে গ্লাসফিস বিকশিত হবে
বেসিল Bourque

2
জেডিকে ১১ থেকে এটি সরানো হয়েছে। আপনি যদি জেডকে 9 বা তার বেশি ব্যবহার করছেন তবে সরাসরি নির্ভরতা যুক্ত করা আরও ভাল হয় তবে "--add-Modules java.xML.bind" ধরণের স্টাফ ব্যবহার করুন
আনভার সাধাত

উত্তর:


205

অবহেলিত জাভা ইই মডিউলগুলি ব্যবহার না করে নিম্নলিখিত নিদর্শনগুলি ব্যবহার করুন।

জেএএফ ( জাভা.অ্যাক্টিভেশন )

জাভাবিয়ানস অ্যাক্টিভেশন ফ্রেমওয়ার্ক (এখন জাকার্তা অ্যাক্টিভেশন ) হ'ল স্ট্যান্ডলোন প্রযুক্তি (ম্যাভেন সেন্ট্রালে উপলব্ধ):

<dependency>
    <groupId>com.sun.activation</groupId>
    <artifactId>jakarta.activation</artifactId>
    <version>1.2.2</version>
</dependency>

( উত্স )

কর্বা ( java.corba )

জেইপি 320 থেকে :

তৃতীয় পক্ষগুলি সিওআরবিএ এপিআই, ওআরবি বাস্তবায়ন, কসনমিনিং সরবরাহকারী ইত্যাদির তত্ত্বাবধানের দায়িত্ব না নিলে CORBA এর স্বতন্ত্র সংস্করণ থাকবে না তৃতীয় পক্ষের রক্ষণাবেক্ষণ সম্ভব কারণ জাভা এসই প্ল্যাটফর্মটি CORBA এর স্বতন্ত্র বাস্তবায়নকে সমর্থন করে। বিপরীতে, আরএমআই-আইআইওপি-র জন্য এপিআই সংজ্ঞা দেওয়া হয়েছে এবং সম্পূর্ণ জাভা এসই এর মধ্যে প্রয়োগ করা হয়েছে। আরএমআই-আইআইওপি-র কোনও একক সংস্করণ থাকবে না যতক্ষণ না এটি বজায় রাখতে কোনও উত্সর্গীকৃত জেএসআর শুরু না করা হয়, বা এপিআইয়ের স্টিয়ারশিপ এক্লিপস ফাউন্ডেশন দ্বারা গ্রহণ করা হয় না (JCP থেকে Eclipse ফাউন্ডেশনে জাভা EE এর নেতৃত্বের স্থানান্তর গ্লাসফিশ অন্তর্ভুক্ত) এবং এর করবা এবং আরএমআই-আইওওপি প্রয়োগকরণ)।

জেটিএ ( java.transaction )

একা দাঁড়িয়ে থাকুন সংস্করণ:

<dependency>
    <groupId>jakarta.transaction</groupId>
    <artifactId>jakarta.transaction-api</artifactId>
    <version>1.3.3</version>
</dependency>

( উত্স )

জ্যাকএক্সবি ( java.xML.bind )

যেহেতু জাভা ইই জাকার্তা ইইতে পুনরায় ব্র্যান্ড হয়েছে , জ্যাকএক্সবি এখন নতুন শিল্পকর্ম দ্বারা সরবরাহ করা হয়েছে:

<!-- API -->
<dependency>
    <groupId>jakarta.xml.bind</groupId>
    <artifactId>jakarta.xml.bind-api</artifactId>
    <version>2.3.3</version>
</dependency>

<!-- Runtime -->
<dependency>
    <groupId>com.sun.xml.bind</groupId>
    <artifactId>jaxb-impl</artifactId>
    <version>2.3.3</version>
    <scope>runtime</scope>
</dependency>

জ্যাকএক্সবি রেফারেন্স বাস্তবায়ন পৃষ্ঠা

schemagenএবং xjcস্ট্যান্ডেলোন জ্যাকএক্সবি বিতরণের অংশ হিসাবে সেখানেও ডাউনলোড করা যেতে পারে।

আরও দেখুন লিঙ্ক উত্তর

JAX-WS ( java.xML.ws )

রেফারেন্স বাস্তবায়ন:

<!-- API -->
<dependency>
    <groupId>jakarta.xml.ws</groupId>
    <artifactId>jakarta.xml.ws-api</artifactId>
    <version>2.3.3</version>
</dependency>

<!-- Runtime -->
<dependency>
    <groupId>com.sun.xml.ws</groupId>
    <artifactId>jaxws-rt</artifactId>
    <version>2.3.3</version>
</dependency>

স্বতন্ত্র বিতরণ ডাউনলোড (এতে wsgenএবং রয়েছে wsimport)।

সাধারণ টিকা ( java.xML.ws.annotation )

জাভা কমন্স টিকা (ম্যাভেন সেন্ট্রারে উপলব্ধ):

<dependency>
    <groupId>jakarta.annotation</groupId>
    <artifactId>jakarta.annotation-api</artifactId>
    <version>1.3.5</version>
</dependency>

( উত্স )


যদি কোনও মডিউল jax-wsজেডিকে এবং com.sun.xml.wsনির্ভরতা উভয় থেকে পড়ে তবে কী করতে হবে ?
nllsdfx

1
আমি নিশ্চিত না আপনি ঠিক কী জিজ্ঞাসা করছেন। জ্যাক্স-ডাব্লু পড়ছে কোন মডিউল? আপনার কাছে java.xML.ws মডিউল গ্রাফ এবং com.sun.xML.ws:jaxws-ri শ্রেণীর পথে থাকলে পরেরটি উপেক্ষা করা হবে ( বিভক্ত প্যাকেজের কারণে )।
নিকোলাই

ভাল আমি তার com.sun.xml.ws:jaxws-riপরিবর্তে java.xml.wsআমার মডিউলটি ব্যবহার করতে চাই কারণ পরেরটি অবচিত হয়ে গেছে এবং সরানো হবে। এবং আমি আমার পোম ফাইলে নির্ভরতা যুক্ত করেছি এবং "java.xML.ws 'এবং' java.xML.ws 'উভয় থেকেই" javax.xML.ws "প্যাকেজটি পড়ছে" মডিউল xyz "ত্রুটিটি উপস্থিত হয়েছিল।
nllsdfx

দেখে মনে হচ্ছে java.xML.ws মডিউলটি সর্বোপরি সমাধান হয়েছে, সম্ভবত কোনও কারণে --add-modulesবা অন্য কিছু মডিউলের জন্য এটি প্রয়োজন। আপনি কি নতুন প্রশ্ন খুলতে পারেন, তাই আমরা এটি একবার দেখে নিই?
নিকোলাই

1
সেটা সত্য. দুটি বিবরণ: (১) যদি কোনও স্পষ্ট মডিউল (যেমন মডিউল ঘোষণার সাথে একটি) জ্যাকএক্সবির উপর নির্ভর করে না, আপনি এখনও সেগুলি শ্রেণীর পথে রাখতে পারেন, যেখানে বিভক্ত প্যাকেজগুলি কোনও বিষয় নয়। (2) কমান্ড লাইন বিকল্পটি --patch-moduleবিভক্ত করতে পারে।
নিকোলাই 21

25

JDK9 এর জন্য JAXB (java.xML.bind)

আমার ডেস্কটপ অ্যাপ্লিকেশনগুলিতে jdk9 / 10 EA এ নিখুঁতভাবে কাজ করা

<properties>
    <jaxb-api.version>2.3.0</jaxb-api.version>
</properties>

<!-- JAXB 2.3.0 for jdk9+ -->
<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>${jaxb-api.version}</version>
</dependency>
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>${jaxb-api.version}</version>
</dependency>
<!-- JAXB needs javax.activation module (jdk9) -->
<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>javax.activation-api</artifactId>
    <version>1.2.0</version>
</dependency>

5
ধন্যবাদ, এটি জাভা 10. উপর আমার জন্য কাজ যাইহোক, সংস্করণ সংখ্যা জন্য একটি একক সম্পত্তির ব্যবহারের 2.3.0উভয়ের জন্য jaxb-apiএবং jaxb-runtimeএকটি ভাল ধারণা নয়। গ্লাসফিস রানটাইম বর্তমানে2.3.0.1 যখন এপিআই এ থাকে 2.3.0। আমি উত্তরে propertiesপুরোপুরি উপাদানটি বাদ দেওয়ার পরামর্শ দিচ্ছি , এবং প্রতিটি সংস্করণ সংখ্যা dependencyপৃথকভাবে আলাদাভাবে হার্ড-কোড করব ।
তুলসী বাউরকে

আমার প্রস্তাবনা: ইন <dependencyManagement>, org.glassfish.jaxb:jaxb-bomকিছু সংস্করণে বিওএম আমদানি করুন (এখন সর্বশেষতম ২.৩.০.১) এবং তারপরে প্রকৃত <dependencies>বিভাগে, হয় jaxb-apiবা কোনওটির জন্য কোনও সংস্করণ নির্দিষ্ট করবেন না jaxb-runtime। সংস্করণ নম্বরটি বিওএম থেকে নেওয়া হবে, এটি নিশ্চিত করবে যে তারা সর্বদা সিঙ্কে থাকবে এবং একসাথে আপগ্রেড হবে।
অ্যান্ড্রুএফ

2
JAXB 2.3। [0 | 1] জাভা 11 এর জন্য আর কাজ করবে না! দেখুন github.com/eclipse-ee4j/jaxb-api/issues/78
col.panic

9

আমার স্প্রিং বুট 2 ভিত্তিক অ্যাপ্লিকেশনটির জন্য আমার জ্যাকএক্স-ডাব্লুএস (জাভা.এক্সএমএল.ইউ) এবং জ্যাকএক্সবি (java.xML.bind) প্রতিস্থাপন করতে হবে এবং এই জেআর (গ্রেডল বিল্ড) দিয়ে শেষ হবে:

// replacements for deprecated JDK module java.xml.ws
runtimeOnly 'javax.xml.ws:jaxws-api:2.3.0' // javax.xml.ws.* classes
runtimeOnly 'javax.jws:jsr181-api:1.0-MR1' // for javax.jws.* classes

// replacement for deprecated JDK module java.xml.bind
runtimeOnly 'javax.xml.bind:jaxb-api'
runtimeOnly 'org.glassfish.jaxb:jaxb-runtime:2.3.0.1'
runtimeOnly 'org.glassfish:javax.json:1.1.2'
runtimeOnly 'org.eclipse:yasson:1.0.1'

(আপনার প্রয়োজন হতে পারে compileবা অন্য সুযোগ, runtimeOnlyআমাদের জন্য যথেষ্ট ছিল))

আমি লক্ষ্য করেছি যে https://mvnrepository.com/artifact/com.sun.xML.bind/jaxb-core কে "ওল্ড" হিসাবে বর্ণনা করা হয়েছে এবং এই উত্তরটি ব্যবহার করা org.glassfishবেসড স্টাফগুলিতেও এসেছে org.eclipse.yasson

এখন এটি সত্যিই অগোছালো পরিস্থিতি, এটি কাজ করে, তবে যে কেউ এটির সেরা প্রতিস্থাপনের অধিকারী, কীভাবে নিশ্চিত হওয়া উচিত?


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

দয়া করে নোট করুন যে পরিস্থিতিটি খুব দ্রুত বিকশিত হয়েছিল - সদ্য সম্প্রতি আমি আরেকটি প্রকল্পটি স্প্রিং বুট ২.২ এ সরিয়েছি যেখানে জাকার্তা এপিআইগুলি আরও বিশিষ্ট, তবে আমাদের এখনও বাস্তবায়ন প্রয়োজন। তার জন্য আমি এখনও org.glassfish। * স্টাফ ব্যবহার করি। আমি যখনই স্প্রিং বুট প্রকল্প ব্যবহার করি তখন আমি তাদের নির্ভরতা সংস্করণগুলির পরিশিষ্টগুলি পরীক্ষা করে দেখি এবং যথাসম্ভব যথাযথভাবে মেনে চলি
কুমারী 47

8

দেখে মনে হচ্ছে যে জ্যাকসউস-রি সাধারণভাবে সংযুক্তি থেকে নির্ভর করে: commonj.sdo: commonj.sdo: jar: 2.1.1.v201112051852 যা আপাতদৃষ্টিতে সংগ্রহস্থল থেকে পাওয়া যাবে http://download.eclipse.org/rt/eclipselink/maven.repo


1
সম্ভবত কারণ এটি কোনও মন্তব্যের চেয়ে উত্তরের চেয়ে বেশি উপযুক্ত ছিল। নির্বিশেষে, আপনি সমস্যার সমাধান করতে সক্ষম হন? আমি নির্ভরতা পুনরুদ্ধার করতে সক্ষম হবে বলে মনে হয় না। mvn -U clean installবলতে থাকে Could not find artifact commonj.sdo:commonj.sdo:jar:2.1.1.v201112051852
জাইল

1
আমি খাঁটি বিশেষজ্ঞ নই, তবে মনে হয় এটি সাধারন সন্ধান করছে: সাধারণ: ডাব্লুএসডো: জার: ২.১.১.v201112051852 যখন কোনও pom.xML এ কোনও সংগ্রহস্থল ঘোষণা করা হয় না। এক এছাড়াও যোগ করা আবশ্যক pom.xml মধ্যে ভান্ডার (বসন্ত-স্ন্যাপশট মত) থাকে তাহলে download.eclipse.org/rt/eclipselink/maven.repository , উদাহরণস্বরূপ <সংগ্রহস্থলের> <আইডি> আমার-আইডি </ আইডি> <নাম> এক্সলিপ-রেপো </ name> <url> ডাউনলোড. eclipse.org/rt/eclipselink/maven.repo</url > </repository> PS। আমার খ্যাতি যথেষ্ট বড় হলে আমি উত্তরের পরিবর্তে মন্তব্য যুক্ত করতাম :)
TheNikki1

2
আমি এটি কাজ করতে পারি তবে আমাকে আমার সেটিংস.এক্সএমএল থেকে একটি আয়নাও সরিয়ে ফেলতে হয়েছিল। আরও পরিদর্শন করার পরে তবে আমি হ'ল এটি হ্রাস প্যাকেজের বিকল্প কীভাবে তা পুনরুত্পাদন করতে পারি না cannot পরিবর্তে আমি এই নির্ভরতা খুঁজে পেয়েছি যা দুর্দান্তভাবে কাজ করে:<dependency> <groupId>javax.jws</groupId> <artifactId>jsr181-api</artifactId> <version>1.0-MR1</version> </dependency>
জাইল

আমি কেবল প্যাকেজটি বাদ দিতে পেরেছিsdo-eclipselink-plugin
জোসেফ লাস্ট

2

উপরের উত্তরগুলিতে কেবলমাত্র একটি সামান্য প্রকরণ (উন্নতি) --- কেবল জ্যাকএক্সবি-র জন্য এখানে অনুকরণীয়। কেউ runtimeসুযোগের সাথে নির্ভরশীলতা যুক্ত করতে পারে এবং কেবলমাত্র এটির কার্যকরভাবে প্রয়োজন হলে (যেমন সংস্করণ> = 9 সহ জেআরইতে চলার জন্য নির্মাণের সময় --- এখানে ভি 11 উদাহরণ দেওয়া হয়েছে):

<profile>
        <id>when-on-jdk-11</id>
        <activation>
            <jdk>11</jdk>
        </activation>

        <properties>
            <!-- missing artefacts version properties -->
            <jaxb-api.version>2.3.1</jaxb-api.version>
            <jaxb-impl.version>2.3.2</jaxb-impl.version> <!-- one might let it the same with the jaxb-api.version -->
        </properties>

        <dependencies>
            <!-- runtime dependencies to avoid JAXB related CNF exceptions when running on Java 11 (e.g.: ClassNotFoundException: javax.xml.bind.annotation.XmlType) -->
            <dependency>
                <groupId>javax.xml.bind</groupId>
                <artifactId>jaxb-api</artifactId>
                <version>${jaxb-api.version}</version>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.glassfish.jaxb</groupId>
                <artifactId>jaxb-runtime</artifactId>
                <version>${jaxb-impl.version}</version>
                <scope>runtime</scope>
            </dependency>
        </dependencies>
    </profile>

1

আমি জেডিকে ১১.০.৩ ব্যবহার করে উপরে বর্ণিত বেশিরভাগ পরামর্শ নিয়ে পরীক্ষা-নিরীক্ষা করেছি এবং সফল হতে পারি নি। আমি শেষ পর্যন্ত কাজ করতে পেলাম একমাত্র সমাধান হ'ল নিম্নলিখিত। সম্ভবত অন্যান্য বিকল্প রয়েছে যা কাজ করে তবে এটি প্রদর্শিত হয় যে সংস্করণ নির্বাচন সমালোচনামূলক। উদাহরণস্বরূপ, com.sun.xML.ws:rt ২.৩.২ এ পরিবর্তন করার কারণে মডিউল javax.jws আর পাওয়া যায় না।

    <dependency>
        <groupId>org.glassfish.jaxb</groupId>
        <artifactId>jaxb-runtime</artifactId>
        <version>2.4.0-b180830.0438</version>
    </dependency>
    <dependency>
        <groupId>com.sun.xml.ws</groupId>
        <artifactId>rt</artifactId>
        <version>2.3.1</version>
    </dependency> 

0

আমি এই সমস্যার জ্যাকএক্সবি অংশগুলির কাছাকাছি যাওয়ার সবচেয়ে সহজ পথটি খুঁজে পেয়েছি হ'ল আমার রুট পম বা আমার বোমের উপর নির্ভরতা পরিচালন ব্যবহার করা:

    <project ...>
      <dependencyManagement>
        <dependencies>
          <!-- ... -->
          <!-- Gone from jvm in java11 -->
          <dependency>
          <groupId>com.sun.xml.bind</groupId>
          <artifactId>jaxb-ri</artifactId>
          <version>2.4.0-b180830.0438</version>
          <scope>import</scope>
          <type>pom</type>
        </dependency>
        <!-- ... -->
      </dependencies>
    </dependencyManagement>
    </project>

এবং jdk11 এ সংকলন ব্যর্থ মডিউলগুলিতে:

    <!-- ... -->
    <dependencies>
      <!-- Gone from jvm in java11 -->
      <dependency>
         <groupId>javax.xml.bind</groupId>
         <artifactId>jaxb-api</artifactId>
      </dependency>
      <dependency>
         <groupId>com.sun.xml.bind</groupId>
         <artifactId>jaxb-impl</artifactId>
         <scope>runtime</scope>
      </dependency>
      <dependency>
         <groupId>org.glassfish.jaxb</groupId>
         <artifactId>jaxb-runtime</artifactId>
         <scope>runtime</scope>
      </dependency>
      <!-- ... -->
    </dependencies>  
    <!-- ... -->

এছাড়াও, org.jvnet.jaxb2.maven2:maven-jaxb2-plugin0.14.0 এর সংস্করণ আপডেট করা আমার জন্য সমস্ত জ্যাকএসবি প্রজন্মের সমস্যার সমাধান করেছে।


0

আমি আমার বসন্তের এমভিসি প্রকল্পে jdk 11 + ant + ivy ব্যবহার করছি। আমি ত্রুটি "পেয়ে ছিল প্যাকেজ javax.jws অস্তিত্ব নেই " তাই আমি যোগ javax.jws-API-1.1.jar করার ক্লাসপাথ এবং এটা কাজ! জাস্টটি https://repo1.maven.org/maven2/javax/jws/javax.jws-api/1.1/javax.jws-api-1.1.jar থেকে জারটি ডাউনলোড করুন এবং এটি আপনার বিল্ড.এক্সএমএলে আপনার ক্লাসপথে যুক্ত করুন x

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