İstenen hedefe geçerli sertifika yolu bulunamadı - sertifika içe aktarıldıktan sonra bile hata


207

Kendinden imzalı bir sertifikaya sahip bir sunucuya erişmeye çalışan bir Java istemcim var.

Sunucuya posta göndermeye çalıştığımda, aşağıdaki hatayı alıyorum:

istenen hedefe geçerli sertifika yolu bulamıyor

Bu konuda biraz araştırma yaptıktan sonra aşağıdakileri yaptım.

  1. Sunucularımın alan adını bir root.cerdosya olarak kaydetti.
  2. Glassfish sunucumun JRE'sinde bunu çalıştırdım:
    keytool -import -alias example -keystore cacerts -file root.cer
  3. Sertifikamın cacert'ime başarıyla eklendiğini kontrol etmek için bunu yaptım:
    keytool -list -v -keystore cacerts
    Sertifikanın mevcut olduğunu görebiliyorum.
  4. Daha sonra Glassfish'i yeniden başlattım ve 'postayı' emekli oldum.

Hala aynı hata alıyorum.

Glassfish'imin aslında değiştirdiğim cacert dosyasını okumadığını, belki başka bir dosyayı okuduğunu hissediyorum.

Herhangi biriniz bu sorunu yaşadı mı ve beni doğru yöne itebilir mi?


1
Sadece "Kendinden imzalı sertifikaya sahip bir sunucuya erişmeye çalışan bir Java istemcim var" açıklamasını yapmak için: Kendinden imzalı istemci sertifikalarını kullanmaktan bahsediyorsunuz, değil mi? Glassfish üzerindeki bağlayıcı ayarlarınız için özel bir yapılandırma var mı (özellikle güven deposu ayarları)?
Bruno

"Kendinden imzalı sertifikaya sahip bir sunucuya erişmeye çalışan bir Java istemcim var.": Kendinden imzalı istemci sertifikalarını kullanmaktan bahsettiniz, değil mi? - Evet.
TheCoder

1
Glassfish JVM'de 2 ayar buldum: -Djavax.net.ssl.keyStore = $ {com.sun.aas.instanceRoot} /config/keystore.jks ve -Djavax.net.ssl.trustStore = $ {com.sun. aas.instanceRoot} /config/cacerts.jks. Şimdi bunlardan birine sertifika ile eklemem gerekiyor. Eklediğim anahtar deposu olduğunu onaylayabilir misiniz?
TheCoder

4
Sunucuda, anahtar deposu sunucu sertifikası ve özel anahtarı içindir (anahtar deposu yerel tarafa "ait" içindir). Güven deposu, uzak tarafa güveni doğrulamak için kullanılan sertifikalar içindir. İstemci sertifikasını sunucu güven deponuza eklemeniz gerekir. ( Glassfish JRE'nin varsayılan konumunu kullanmıyor gibi görünse de bunu da görün .)
Bruno

Bruno işe yaradı. Glassfish mağazamı ekledim. Yardımın için çok teşekkürler. Siz de Dirk.
TheCoder

Yanıtlar:


157

Ne yazık ki - birçok şey olabilir - ve çok sayıda uygulama sunucusu ve diğer java 'sarmalayıcıları' özellikleri ile oynamaya eğilimlidir ve 'kendi' anahtarlıklar almak ve ne değil. Yani tamamen farklı bir şeye bakıyor olabilir.

Kafes kısa - Ben denemek istiyorum:

java -Djavax.net.debug=all -Djavax.net.ssl.trustStore=trustStore ...

yardımcı olup olmadığını görmek için. 'All' yerine kişi 'ssl', anahtar yöneticisi ve güven yöneticisi olarak da ayarlanabilir. 'Yardım'a ayarlamak, çoğu platformda aşağıdaki gibi bir şey listeler.

Ne olursa olsun - anahtar deposu (özel anahtarın olduğu ve kendi kimliğinizi kanıtladığınız sertifika) ile güven deposu (kime güvendiğinizi belirleyen) ve kendi kimliğinizin gerçekliği arasındaki farkı tam olarak anladığınızdan emin olun. köke karşı 'güven' zincirine sahiptir - herhangi bir zincirden köke ayrı olan “kime” güvendiğinizi anlamanız gerekir.

all            turn on all debugging
ssl            turn on ssl debugging

The   following can be used with ssl:
    record       enable per-record tracing
    handshake    print each handshake message
    keygen       print key generation data
    session      print session activity
    defaultctx   print default SSL initialization
    sslctx       print SSLContext tracing
    sessioncache print session cache tracing
    keymanager   print key manager tracing
    trustmanager print trust manager tracing
    pluggability print pluggability tracing

    handshake debugging can be widened with:
    data         hex dump of each handshake message
    verbose      verbose handshake message printing

    record debugging can be widened with:
    plaintext    hex dump of record plaintext
    packet       print raw SSL/TLS packets

Kaynak: # Bkz. Http://download.oracle.com/javase/1.5.0/docs/guide/security/jsse/JSSERefGuide.html#Debug


6
Çok teşekkürler! -Djavax.net.ssl.trustStore = / location_of / trustStore sorunumu çözdü ve hata ayıklama bilgileri de gerçekten yardımcı oldu.
RHE

5
java -Djavax.net.debug = tümü -Djavax.net.ssl.trustStore = trustStore ... aşağıdaki hatayı veriyor: Hata: Ana sınıf bulunamadı veya yüklenemedi ...
rohith

1
Elbette, truststore'un parolasını -Djavax.net.ssl.trustStorePassword = changeit
user1754036

19

İşte çözüm, Adım Adım aşağıdaki bağlantıyı izleyin:

http://www.mkyong.com/webservices/jax-ws/suncertpathbuilderexception-unable-to-find-valid-certification-path-to-requested-target/

JAVA DOSYASI: blogda eksik olan

/*
 * Copyright 2006 Sun Microsystems, Inc.  All Rights Reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *   - Redistributions of source code must retain the above copyright
 *     notice, this list of conditions and the following disclaimer.
 *
 *   - Redistributions in binary form must reproduce the above copyright
 *     notice, this list of conditions and the following disclaimer in the
 *     documentation and/or other materials provided with the distribution.
 *
 *   - Neither the name of Sun Microsystems nor the names of its
 *     contributors may be used to endorse or promote products derived
 *     from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
 * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */



import java.io.*;
import java.net.URL;

import java.security.*;
import java.security.cert.*;

import javax.net.ssl.*;

public class InstallCert {

    public static void main(String[] args) throws Exception {
    String host;
    int port;
    char[] passphrase;
    if ((args.length == 1) || (args.length == 2)) {
        String[] c = args[0].split(":");
        host = c[0];
        port = (c.length == 1) ? 443 : Integer.parseInt(c[1]);
        String p = (args.length == 1) ? "changeit" : args[1];
        passphrase = p.toCharArray();
    } else {
        System.out.println("Usage: java InstallCert <host>[:port] [passphrase]");
        return;
    }

    File file = new File("jssecacerts");
    if (file.isFile() == false) {
        char SEP = File.separatorChar;
        File dir = new File(System.getProperty("java.home") + SEP
            + "lib" + SEP + "security");
        file = new File(dir, "jssecacerts");
        if (file.isFile() == false) {
        file = new File(dir, "cacerts");
        }
    }
    System.out.println("Loading KeyStore " + file + "...");
    InputStream in = new FileInputStream(file);
    KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType());
    ks.load(in, passphrase);
    in.close();

    SSLContext context = SSLContext.getInstance("TLS");
    TrustManagerFactory tmf =
        TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
    tmf.init(ks);
    X509TrustManager defaultTrustManager = (X509TrustManager)tmf.getTrustManagers()[0];
    SavingTrustManager tm = new SavingTrustManager(defaultTrustManager);
    context.init(null, new TrustManager[] {tm}, null);
    SSLSocketFactory factory = context.getSocketFactory();

    System.out.println("Opening connection to " + host + ":" + port + "...");
    SSLSocket socket = (SSLSocket)factory.createSocket(host, port);
    socket.setSoTimeout(10000);
    try {
        System.out.println("Starting SSL handshake...");
        socket.startHandshake();
        socket.close();
        System.out.println();
        System.out.println("No errors, certificate is already trusted");
    } catch (SSLException e) {
        System.out.println();
        e.printStackTrace(System.out);
    }

    X509Certificate[] chain = tm.chain;
    if (chain == null) {
        System.out.println("Could not obtain server certificate chain");
        return;
    }

    BufferedReader reader =
        new BufferedReader(new InputStreamReader(System.in));

    System.out.println();
    System.out.println("Server sent " + chain.length + " certificate(s):");
    System.out.println();
    MessageDigest sha1 = MessageDigest.getInstance("SHA1");
    MessageDigest md5 = MessageDigest.getInstance("MD5");
    for (int i = 0; i < chain.length; i++) {
        X509Certificate cert = chain[i];
        System.out.println
            (" " + (i + 1) + " Subject " + cert.getSubjectDN());
        System.out.println("   Issuer  " + cert.getIssuerDN());
        sha1.update(cert.getEncoded());
        System.out.println("   sha1    " + toHexString(sha1.digest()));
        md5.update(cert.getEncoded());
        System.out.println("   md5     " + toHexString(md5.digest()));
        System.out.println();
    }

    System.out.println("Enter certificate to add to trusted keystore or 'q' to quit: [1]");
    String line = reader.readLine().trim();
    int k;
    try {
        k = (line.length() == 0) ? 0 : Integer.parseInt(line) - 1;
    } catch (NumberFormatException e) {
        System.out.println("KeyStore not changed");
        return;
    }

    X509Certificate cert = chain[k];
    String alias = host + "-" + (k + 1);
    ks.setCertificateEntry(alias, cert);

    OutputStream out = new FileOutputStream("jssecacerts");
    ks.store(out, passphrase);
    out.close();

    System.out.println();
    System.out.println(cert);
    System.out.println();
    System.out.println
        ("Added certificate to keystore 'jssecacerts' using alias '"
        + alias + "'");
    }

    private static final char[] HEXDIGITS = "0123456789abcdef".toCharArray();

    private static String toHexString(byte[] bytes) {
        StringBuilder sb = new StringBuilder(bytes.length * 3);
        for (int b : bytes) {
            b &= 0xff;
            sb.append(HEXDIGITS[b >> 4]);
            sb.append(HEXDIGITS[b & 15]);
            sb.append(' ');
        }
        return sb.toString();
    }

    private static class SavingTrustManager implements X509TrustManager {

    private final X509TrustManager tm;
    private X509Certificate[] chain;

    SavingTrustManager(X509TrustManager tm) {
        this.tm = tm;
    }

    public X509Certificate[] getAcceptedIssuers() {
        throw new UnsupportedOperationException();
    }

    public void checkClientTrusted(X509Certificate[] chain, String authType)
        throws CertificateException {
        throw new UnsupportedOperationException();
    }

    public void checkServerTrusted(X509Certificate[] chain, String authType)
        throws CertificateException {
        this.chain = chain;
        tm.checkServerTrusted(chain, authType);
    }
    }

}

3
Bu çözüm benim için çalıştı, ancak özel sınıfta küçük bir değişikliğe ihtiyaç duyuyor SavingTrustManager:public X509Certificate[] getAcceptedIssuers() { return new X509Certificate[0];}
Richard

1
@ Richard, @ Paul, @ user6258309 java.net.SocketTimeoutException "java.net.SocketInputStream.socketRead0 (Yerel Kaynak) 'da zaman aşımına uğradı. ) Bunu nasıl düzeltebilirim
Renjith Krishnan

5
Bu 'öyleyse; lution' radikal olarak güvensizdir. Kullanmayın.
Lorne Marquis

9
Bu cevap çoğunlukla koddur. Neden ya da neden işe yaramadığını açıklamıyor.

14

JSSE Sistem Özellikleri'ni yapılandırmanız gerekir, özellikle istemci sertifika deposuna işaret edin.

Komut satırı üzerinden:

java -Djavax.net.ssl.trustStore=truststores/client.ts com.progress.Client

veya Java kodu ile:

import java.util.Properties;
    ...
    Properties systemProps = System.getProperties();
    systemProps.put("javax.net.ssl.keyStorePassword","passwordForKeystore");
    systemProps.put("javax.net.ssl.keyStore","pathToKeystore.ks");
    systemProps.put("javax.net.ssl.trustStore", "pathToTruststore.ts");
    systemProps.put("javax.net.ssl.trustStorePassword","passwordForTrustStore");
    System.setProperties(systemProps);
    ...

Daha fazla bilgi için RedHat sitesindeki ayrıntılara bakın .


Spring Boot, Spring Cloud mikro hizmetleri ve kendinden imzalı bir SSL sertifikası ile aynı sorun vardı. Application.properties içindeki keyStore ve keyStorePassword öğelerini ayarlayabildim ve kutudan çıkmış gibi çalışabildim, ancak trustStore ve trustStorePassword ile aynı şeyi yapamadım. Bu cevap benim için güven deposunda çalıştı.
Mate Šimović

7

( diğer yanıtımı yeniden gönder ) İçe aktarma (ve güven için java yazılım dağıtımından
cli yardımcı programı keytool kullanın ! ) sertifikaları

Örneklem:

  1. Cli değişiklik dizininden jre \ bin'e

  2. Anahtar deposunu kontrol edin (dosya jre \ bin dizininde bulundu)
    keytool -list -keystore .. \ lib \ security \ cacerts
    Parola changeit

  3. Tüm sertifikaları zincirdeki gerekli sertifikaları indirip kaydedin.

  4. Sertifika ekleyin (".. \ lib \ security \ cacerts" dosyasındaki "salt okunur" özniteliğini kaldırmadan önce) şunu çalıştırın: keytool -alias REPLACE_TO_ANY_UNIQ_NAME -import -keystore .. \ lib \ security \ cacerts -file "r: \ root.crt"

yanlışlıkla böyle basit bir ipucu buldum. Diğer çözümler InstallCert.Java ve JDK kullanımını gerektirir

kaynak: http://www.java-samples.com/showtutorial.php?tutorialid=210


6

Ben sbt ile aynı sorunu vardı . SSL üzerinden repo1.maven.org adresinden
bağımlılıkları getirmeye çalıştı ancak "istenen hedef URL'ye geçerli sertifika yolu bulamadığını" söyledi. bu yüzden bu gönderiyi takip ettim ve hala bir bağlantıyı doğrulayamadım. Bu yüzden onu okudum ve posta tarafından önerildiği gibi kök sertifikasının yeterli olmadığını buldum, bu yüzden benim için işe yarayan şey ara CA sertifikalarını anahtar deposuna almaktı . Aslında zincirdeki tüm sertifikaları ekledim ve bir cazibe gibi çalıştı.





4

JDK 8'den JDK 10'a geçerken çözüm

JDK 10

root@c339504909345:/opt/jdk-minimal/jre/lib/security #  keytool -cacerts -list
Enter keystore password:
Keystore type: JKS
Keystore provider: SUN

Your keystore contains 80 entries

JDK 8

root@c39596768075:/usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/cacerts #  keytool -cacerts -list
Enter keystore password:
Keystore type: JKS
Keystore provider: SUN

Your keystore contains 151 entries

Düzeltme adımları

  • JDK 10 sertifikasını sildim ve JDK 8 ile değiştirdim
  • Docker Görüntüleri oluşturduğum için bunu Çok aşamalı yapıları kullanarak hızlı bir şekilde yapabilirim
    • Ben kullanarak minimal JRE inşa ediyorum jlinkolarak/opt/jdk/bin/jlink \ --module-path /opt/jdk/jmods...

İşte farklı yollar ve komutların sırası ...

# Java 8
COPY --from=marcellodesales-springboot-builder-jdk8 /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/security/cacerts /etc/ssl/certs/java/cacerts

# Java 10
RUN rm -f /opt/jdk-minimal/jre/lib/security/cacerts
RUN ln -s /etc/ssl/certs/java/cacerts /opt/jdk-minimal/jre/lib/security/cacerts

2

Www.udemy.com (REST Java Web Services) adresindeki REST web hizmetleri için bir eğitim üzerinde çalışıyorum. Öğreticideki örnek, SSL'ye sahip olmak için, eclipse "client" projemde "key store" dosyası içermesi gereken "trust_store" adlı bir klasöre sahip olmamız gerektiğini söyledi (hizmeti çağırmak için bir "client" projemiz vardı) ve REST web hizmetini içeren "hizmet" projesi - aynı tutulma çalışma alanındaki 2 proje, biri istemci, diğeri hizmet). İşleri basitleştirmek için, kullandığımız glassfish uygulama sunucusundan (glassfish \ domains \ domain1 \ config \ keystore.jks) "keystore.jks" dosyasını kopyalamayı ve içinde bulunduğum bu "trust_store" klasörüne koymalarını söylediler müşteri projesi. Bu mantıklı görünüyor: sunucudaki kendinden imzalı sertifikalar ' s key_store, trust_store istemcisindeki sertifikalara karşılık gelir. Şimdi, bunu yaparken, orijinal gönderinin bahsettiği hatayı alıyordum. Bu googled ve hata güvenilir / imzalı bir sertifika içermeyen istemcideki "keystore.jks" dosya nedeniyle olduğunu, bulduğu sertifikanın kendinden imzalı olduğunu okudum.

İşleri açık tutmak için, anladığım kadarıyla "keystore.jks" kendinden imzalı sertifikalar içerdiğini ve "cacerts.jks" dosyasının CA sertifikaları (CA tarafından imzalanmış) içerdiğini söyleyeyim. "Keystore.jks", "keystore" ve "cacerts.jks", "trust store" dır. Bir yorumcu, "Bruno" nun yukarıda söylediği gibi, "keystore.jks" yereldir ve "cacerts.jks" uzaktaki istemciler içindir.

Ben de dedim ki, hey, glassfish'in de glassfish'in trust_store dosyası olan "cacerts.jks" dosyası var. cacerts.jsk, CA sertifikaları içermelidir. Ve görünüşe göre en az bir CA sertifikası olan bir anahtar deposu dosyası içermek için trust_store klasörüne ihtiyacım var. Bu nedenle, "cacerts.jks" dosyasını yaptığım "trust_store" klasörüne, istemci projeme koymayı ve VM özelliklerini "keystore.jks" yerine "cacerts.jks" 'i gösterecek şekilde değiştirmeyi denedim. Bu hatadan kurtuldu. Sanırım gereken tek şey çalışmak için bir CA sertifikasıydı.

Bu, üretim için, hatta sadece bir şeylerin işe yaramasının ötesinde gelişim için ideal olmayabilir. Örneğin, istemcideki "keystore.jks" dosyasına CA sertifikaları eklemek için muhtemelen "keytool" komutunu kullanabilirsiniz. Ama yine de umarım bu en azından burada hataya neden olabilecek olası senaryoları daraltır.

AYRICA: yaklaşımım istemci için yararlı görünüyordu (istemci trust_store'a eklenen sunucu sertifikası), orijinal gönderiyi çözmek için yukarıdaki yorumların sunucu için yararlı olduğu görülmektedir (sunucu trust_store'a eklenen istemci sertifikası). Şerefe.

Eclipse proje kurulumu:

  • MyClientProject
  • src
  • Ölçek
  • JRE Sistem Kütüphanesi
  • ...
  • trust_store
    --- cacerts.jks --- keystore.jks

MyClientProject.java dosyasından snippet:

static {
  // Setup the trustStore location and password
  System.setProperty("javax.net.ssl.trustStore","trust_store/cacerts.jks");
  // comment out below line
  System.setProperty("javax.net.ssl.trustStore","trust_store/keystore.jks");
  System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
  //System.setProperty("javax.net.debug", "all");

  // for localhost testing only
  javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(new javax.net.ssl.HostnameVerifier() {
        public boolean verify(String hostname, javax.net.ssl.SSLSession sslSession) {
          return hostname.equals("localhost");
        }

  });
}

1

Benim sorunum, NetSkope adlı bir Bulut Erişimi Güvenlik Aracısı'nın bir yazılım güncellemesi aracılığıyla iş dizüstü bilgisayarıma yüklenmiş olmasıydı. Bu sertifika zincirini değiştiriyordu ve tüm zinciri cacerts anahtar deposuma aktardıktan sonra hala java istemcim aracılığıyla sunucuya bağlanamadım. NetSkope'u devre dışı bıraktım ve başarıyla bağlanabildim.


1

Benim durumumda sorunla karşı karşıya kaldım çünkü tomcat işlemimde belirli anahtar deposu kullanılarak verildi

-Djavax.net.ssl.trustStore=/pathtosomeselfsignedstore/truststore.jks

Wheras sertifikayı JRE / lib / security uygulamasına aktarıyordum ve değişiklikler yansımıyordu. Sonra /tmp/cert1.test hedef sunucunun sertifikasını içeren aşağıdaki komutu yaptım

keytool -import -trustcacerts -keystore /pathtosomeselfsignedstore/truststore.jks -storepass password123 -noprompt -alias rapidssl-myserver -file /tmp/cert1.test

Sertifika içe aktarmanın başarılı olup olmadığını iki kez kontrol edebiliriz

keytool -list -v -keystore /pathtosomeselfsignedstore/truststore.jks

ve taget sunucunuzun takma ad rapidssl-myserver'da bulunup bulunmadığına bakın


0

Dosyanın $JAVA_HOME/lib/security/cacertsvar olup olmadığını kontrol edin ! Benim durumumda bir dosya değildi ama bir bağlantı /etc/ssl/certs/java/cacertsve ayrıca bu kendisine bir bağlantı oldu (NE ???) bu nedenle JVM dosyayı bulamıyor.

Çözüm: Gerçek cacerts dosyasını ( başka bir JDK'dan yapabilirsiniz ) /etc/ssl/certs/java/dizine kopyalayın ve sorununuzu çözecektir :)


Gerçekten JDK bir bağlantı korur ve belki eski API'ler, SDK'lar ile uyumluluk için ... Ben başarıyla aynı şeyi başardı ... JDK 8'den JDK 10'a geçiyorum ve Docker kullanıyorum, bu yüzden sadece bir cacer kopyalamak gerekiyordu image to another ... Bağlantıyı ve aynı yolu oluşturdum ...rm -f /opt/jdk-minimal/jre/lib/security/cacerts ; ln -s /etc/ssl/certs/java/cacerts /opt/jdk-minimal/jre/lib/security/cacerts
Marcello de Sales

-9

Diyelim ki pom.xml içinde $ {JAVA_HOME} gibi sınıf yolu değişkenleri kullanıyorsanız.

<target>
                    <property name="compile_classpath" refid="maven.compile.classpath"/>
                    <property name="runtime_classpath" refid="maven.runtime.classpath"/>
                    <property name="test_classpath" refid="maven.test.classpath"/>
                    <property name="plugin_classpath" refid="maven.plugin.classpath"/>
                    <property name="jaxb-api.jar" value="${maven.dependency.javax.xml.bind.jaxb-api.jar.path}"/>
                    <property name="project_home" value="${PROJECT_HOME}"/>
                    <property name="java_home" value="${JAVA_HOME}"/>
                    <property name="ant_home" value="${ANT_HOME}"/>
                    <property name="common_home" value="${COMMON_HOME}"/>
                    <property name="JAXP_HOME" value="${common_home}/lib"/>
                    <property name="ejfw_home" value="${PROJECT_HOME}/lib"/>
                    <property name="weblogic_home" value="${WL_HOME}"/>
                    <property name="fw_home" value="${FW_HOME}"/>
                    <property name="env" value="${BUILDENV}"/>
                    <property name="tokenfile" value="${BUILDENV}${BUILDENV_S2S}.properties"/>

Hedeflere, sınıf yolu değişkenlerini ekleyin. yani .., -DANT_HOME, -DJAVA_HOME

clean install -e -DPROJECT_HOME=..... -DANT_HOME=C:\bea1036\modules\org.apache.ant_1.7.1 -DJAVA_HOME=C:\bea1036\jdk160_31

1
Sınıf yollarının ve sertifikaların birbirleriyle hiçbir ilgisi yoktur.
Lorne Marquis

1
Soruyu yanlış anladığınıza inanıyorum.
Dawood ibn Kareem
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.