Внедрение зависимостей не работает в Arquillian Test

Это тестовый класс: я пытаюсь внедрить объект Paper, а затем выполнить действие, чтобы проверить, не удалось ли выполнить внедрение.

@RunWith(Arquillian.class)
public class ExcelProcessorTest {
    // Not work. Because Paper and ExcelProcessorTest are in different modules?
    @Inject
    private Paper paper;

    @Deployment
    public static JavaArchive createDeployment() {
        JavaArchive jar = ShrinkWrap.create(JavaArchive.class, "test.jar")
                .addClasses(Paper.class)
                .addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
        System.out.println(jar.toString(true));

        return jar;
    }

    @Test
    public void notNullTest() {
        Assert.assertNotNull(paper); // paper is null here.
    }

}

Я работаю над проектом под названием ftc, и это структура ftc:
введите здесь описание изображения

Обратите внимание, что ftc является родительским модулем ftc-*. Этот проект организован конвенцией Maven.

ExcelProcessorTest находится в модуле ftc-test: введите здесь описание изображения

А класс Paper находится в модуле ftc-ejb:
введите здесь описание изображения

Класс Paper представляет собой простой объектный компонент:

/**
 * Paper generated by hbm2java
 */
@Entity
@Table(name = "paper")
public class Paper implements java.io.Serializable {

    private Integer id;
    private String title;
    private String author;
    private String journal;
    private String volumn;
    private String pages;
    private String alternateJournal;
    private String issn;
    private String doi;
    private String acccessionNumber;
    private String keywords;
    private String abstract_;
    private Integer timesCited;
    private Integer citedReferenceCount;
    private String citedReferenceName;
    private String website;
    private String pdfPath;
    private String issue;
    private Integer paperIndexId;
    private Integer year; // 论文发表的年份
    private String type; // OVERVIEW, EXCEL, PAPER
    private SourceFile sourceFile;
    private Set<PaperIndex> paperIndexes = new HashSet<PaperIndex>(0);
    private Set<Sentence> sentences = new HashSet<Sentence>(0);

    public Paper() {
    }

Кто-нибудь может сказать мне, почему инъекция не удалась?

О.. Мне теперь есть чем заняться. Я вернусь сюда через несколько часов. Если вам нужны какие-либо подробности, пожалуйста, прокомментируйте ниже. Спасибо.


person Neo    schedule 30.01.2014    source источник


Ответы (2)


Я понял это. В классе Paper я использовал некоторые другие классы, такие как Sentence.class, PaperIndex.class, но я не добавлял их в метод addClasses(). Этот упомянутый classse не может быть найден, поэтому инъекция не удалась.

Какой я глупый...

person Neo    schedule 06.02.2014

Я наткнулся на то же самое, для меня использование @EJB вместо @Inject сработало отлично... просто чтобы дать подсказку, но без объяснения причин.

person Subcomandante    schedule 12.02.2014