1

wildfly-swarm を使用して複数のマイクロサービスを構築しています。クラス com.google.common.cache.Cache がクラスパスに存在せず、ApplicationScoped Bean から参照されているため、CDI コンテナーを開始しようとしているときに、正常に動作するマイクロサービスと失敗するマイクロサービスが 1 つあります。これは私が得るスタックトレースです:

WELD-001474: Class [...].core.framework.timeseries.cache.TimeseriesDataCache is on the classpath, but was ignored because a class it references was not found: com.google.common.cache.Cache from [Module \"deployment.43ef34ae-45a8-4468-aa7d-40d75c0f0a79.war:main\" from Service Module Loader].

奇妙なことに、両方のマイクロサービスが同じ Maven 依存関係からこのクラスを使用していますが、他のサービスは意図したとおりに機能します。主な違いは、失敗したマイクロサービスが (swarm-dependency を介して) リボンを使用し、これにより 2 つ目の Guava-Dependency (バージョン 14.0.1) がもたらされることです。したがって、何らかの方法で(netflix-guavaモジュールからの)リボンからグアバ依存関係を除外しようとしました(メインリボンアーティファクトでグアバ依存関係を直接除外し、メインリボンアラティファクトからnetflix-guava依存関係を除外してから自分で netflix-guava の依存関係を追加し、そこから除外します)。
メインクラスでバージョン 14.0.1 の guava アーティファクトを手動で除外することで部分的に成功しましたが、それは他の問題を引き起こし、私の意見では実行可能なオプションではありません (この動作により、手動でアーティファクトを除外する必要が生じる可能性があるため)。問題が発生した場合、いくつかの依存関係が付属しています.
だから私の質問は: この動作を回避する方法はありますか? または、群れのドキュメントから得られなかった解決策はありますか? 私は今本当に迷っており、ヘルプ/アイデアは念のため、必要な成果物を手動で追加して不要なものを除外することなく、動作させたいように展開を構築するコードを次に示します。

public static void main(String[] args) throws Exception {
    Swarm container = new Swarm(args);
    final String offset = args.length > 0 ? args[0] : null;
    container = container.socketBindingGroup(new SocketBindingGroup("default-sockets","public","${jboss.socket.binding.port-offset:" +
            offset != null ? offset : "0" +
            "}"));
    container
            .fraction(new JAXRSFraction())
            .fraction(new CDIFraction())
            .fraction(new LoggingFraction());

    JAXRSArchive jaxrsArchive = ShrinkWrap.create(JAXRSArchive.class);
    jaxrsArchive.addAsResource(new ClassLoaderAsset("META-INF/beans.xml", FormulaDeployment.class.getClassLoader()), "classes/META-INF/beans.xml");
    jaxrsArchive.addAllDependencies();
    jaxrsArchive.addAsLibrary(container.createDefaultDeployment());
    jaxrsArchive.as(RibbonArchive.class).advertise();

    container.start().deploy(jaxrsArchive);

}
4

0 に答える 0