Я пытаюсь отследить источник предупреждения:
warning: Cannot find annotation method 'itemFieldName()' in type 'com.thoughtworks.xstream.annotations.XStreamImplicit'
Соответствующий код:
@XStreamAlias("things")
@XStreamImplicit(itemFieldName = "things")
private List<Thing> things;
Глядя на XStream JAR, я вижу:
@java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME)
@java.lang.annotation.Target({java.lang.annotation.ElementType.FIELD})
public static @interface XStreamImplicit {
java.lang.String itemFieldName() default "";
}
Так что я не совсем уверен, почему я получаю предупреждение. Похоже, это не вызывает проблем, но я получаю их кучу в своем выводе компилятора, и я хотел бы их убрать.
Изменить: еще немного покопался и нашел это: http://java.dzone.com/articles/when-good-annotations-go-bad посмотрите комментарий от «Фабрицио»
Хм .... может быть, я слишком тороплюсь и плохо понял ... но, насколько я знаю, когда вы скомпилировали класс C1, который аннотирован A, вы можете поместить C1 в компиляцию (и запустить) classpath для C2 без необходимости помещать A в classpath C2. Вы получаете только предупреждения, а A игнорируется (как и положено: аннотации имеют значение только в определенном контексте, а в контексте C2 A бессмысленно).
Я только что дважды проверил, скомпилировав образец класса X против JAR, который содержит аннотации javax.persistence (но не помещая jpa.jar в путь к классам компилятора):
istral:/tmp> javac -classpath it-tidalwave-catalog.jar X.java it/tidalwave/catalog/persistence/CategoryPB.class(it/tidalwave/catalog/persistence:CategoryPB.class): предупреждение: не удается найти метод аннотации ' name()» в типе «javax.persistence.Table»: файл класса для javax.persistence.Table не найден/tidalwave/catalog/persistence/CategoryPB.class(it/tidalwave/catalog/persistence:CategoryPB.class): предупреждение : Не удается найти метод аннотации «length()» в типе «javax.persistence.Column»: файл класса для javax.persistence.Column не найден/tidalwave/catalog/persistence/CategoryPB.class(it/tidalwave/catalog/persistence: CategoryPB.class): предупреждение: не удается найти метод аннотации 'name()' в типе 'javax.persistence.Column'
и т.д... Просто предупреждения, компиляция прошла успешно.
Поэтому я думаю, что это просто проблема аннотации/класса.