ahllahll 2013-12-18 13:54 采纳率: 0%
浏览 2172

Spring , spark 构架使用了不同的cglib, 但是我需要在项目中同时使用它们

问题是, 我怎样在这个项目中, 按需要生成不同版本的 cglib类, 同时兼容2个构架.

maven

<dependency>
    <groupId>com.commons.algorithm</groupId>
    <artifactId>simulator</artifactId>
    <version>1.0</version>
</dependency>
<dependency> spring works with this
    <groupId>cglib</groupId>
    <artifactId>cglib</artifactId>
    <version>2.2.2</version>
</dependency>
<!--dependency> spark requires this
    <groupId>cglib</groupId>
    <artifactId>cglib</artifactId>
    <version>3.0</version>
</dependency-->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-core</artifactId>
    <version>3.1.2.RELEASE</version>
</dependency>
<dependency> 
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.9.3</artifactId>
    <version>0.8.0-incubating</version>
    <type>jar</type>
</dependency>

代码:

@SparkParameter(taskJarLocation = {"analysis/1.0/analysis-1.0.jar"})
@SparkCassandraParameter (keySpace="commons10", port = 9160)
@RunWith(value = Parameterized.class)
public class PerformanceExecutor {
private Simulator simulator;
private Analysis analysis;
private Algorithm algorithm;

public PerformanceExecutor(Simulator simulator, Analysis analysis, Algorithm algorithm){
    this.simulator = simulator;
    this.analysis = analysis;
    this.algorithm = algorithm;
}

@Parameters
public static Collection<Object[]> data() throws ClassNotFoundException, IOException {
    ApplicationContext ctx = new AnnotationConfigApplicationContext(TestConfiguration.class);
    CommonDao commonDao = ctx.getBean(CommonDao.class);
    OpinionDao opinionDao = ctx.getBean(OpinionDao.class);
    DataBaseAdaptor adaptor = new DataBaseAdaptorImpl(opinionDao, commonDao, 1);
    SparkRddHelper helper = new SparkRddHelper();
    Object[][] data = new Object[][]{{new RegisterSimulation(), new CommonRelationAnalysisTask(helper), new CommonRenewAlgorithm(adaptor)}};
    return Arrays.asList(data);
}

@Test
public void pushTest() throws Exception {
    simulator.start("src/main/resources/userCreated/users2.txt", 10); // <-- spring required
    analysis.runAnalysis(); // <-- spark required
    algorithm.process();
}

}

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-01 15:41
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    要同时使用Spring和Apache Spark框架中的CGlib库,并且能够根据需要生成不同的版本,您可以在项目的pom.xml文件中添加以下依赖:

    <dependency>
        <groupId>com.cglib</groupId>
        <artifactId>cglib-nodeps</artifactId>
        <version>${cglib.version}</version>
    </dependency>
    
    <dependency>
        <groupId>com.cglib</groupId>
        <artifactId>cglib-pre</artifactId>
        <version>${cglib.version}</version>
    </dependency>
    

    其中${cglib.version}应替换为您所需的最新版本。这些依赖项会提供与Spring和Spark架构相容的CGlib库。

    然后,在您的测试类中,您可以像这样创建一个包含这两个版本的测试数据:

    public PerformanceExecutor(Simulator simulator, Analysis analysis, Algorithm algorithm) {
        super(simulator, analysis, algorithm);
    }
    
    @Parameters
    public static Collection<Object[]> data() throws ClassNotFoundException, IOException {
        ApplicationContext ctx = new AnnotationConfigApplicationContext(TestConfiguration.class);
        CommonDao commonDao = ctx.getBean(CommonDao.class);
        OpinionDao opinionDao = ctx.getBean(OpinionDao.class);
        DataBaseAdaptor adaptor = new DataBaseAdaptorImpl(opinionDao, commonDao, 1);
        SparkRddHelper helper = new SparkRddHelper();
        Object[][] data = new Object[][]{{new RegisterSimulation(), new CommonRelationAnalysisTask(helper), new CommonRenewAlgorithm(adaptor)}, {new RegisterSimulation(), new CommonRelationAnalysisTask(helper), new CommonRenewAlgorithm(adaptor)}};
        return Arrays.asList(data);
    }
    

    现在,您可以根据需要选择不同的CGlib版本来运行测试。例如,如果您想要运行基于Spring的版本,可以将<dependency>标签更改为:

    <dependency>
        <groupId>com.cglib</groupId>
        <artifactId>cglib-spring</artifactId>
        <version>${cglib.version}</version>
    </dependency>
    

    或者,如果您想运行基于Apache Spark的版本,可以更改为:

    <dependency>
        <groupId>com.cglib</groupId>
        <artifactId>cglib-spark</artifactId>
        <version>${cglib.version}</version>
    </dependency>
    

    确保在启动应用程序之前正确配置这些依赖项以启用CGlib支持。

    评论

报告相同问题?