我正在尝试在我的项目中使用java 8,为此我添加了jack编译器.
启用插孔后,我开始遇到使用注释处理的库的问题,并在Web上查看我读到需要android studio 2.2和com.android.tools.build:gradle:2.2.0-alpha6来编译从注释生成代码的库.
我下载Android Studio 2.2预览版6并将我的项目转换为它.之后我发现不再支持apt gradle插件,然后我需要将使用apt的每个依赖项更改为使用新的annotationProcessor选项.
例如:
apt "org.projectlombok:lombok:$rootProject.lombokVersion"
Run Code Online (Sandbox Code Playgroud)
至
annotationProcessor "org.projectlombok:lombok:$rootProject.lombokVersion"
Run Code Online (Sandbox Code Playgroud)
现在,如果我使用"make project",项目编译没有问题,但如果我尝试执行它,我的代码应该由注释生成错误.
此外,当我打开项目时,我收到来自lombok插件的警告"注释处理似乎已禁用该项目".当我打开项目设置并转到"构建 - >编译器"时,我找不到注释处理器.
所以,我的问题是:如何在Android Studio 2.2中启用注释处理器?此功能已被禁用?如果是,我如何从注释中生成代码?
--EDIT--我正在制作一个PullRequest来改变用Java8编译的项目,你可以在这里查看PR:https://github.com/jonathanrz/myexpenses-android/pull/57
我有以下代码:
@BeforeClass
public static void setUpOnce() throws InterruptedException {
fail("LOL");
}
Run Code Online (Sandbox Code Playgroud)
以及@Before,@ After,@ Test或@AfterClass方法的各种其他方法.
启动时测试不会失败,因为它似乎应该.有谁可以帮助我吗?
我有JUnit 4.5
该方法在立即调用setUp()时失败,该注释被注释为@before.类def是:
public class myTests extends TestCase {
Run Code Online (Sandbox Code Playgroud) IntelliJ IDEA在JPQL中用红色的"无法解析符号"突出显示持久的@Entity类名,这会分散注意力并掩盖实际问题.
因此,例如,我在我的存储库中声明了一个查询:
private static final String READ_BY_CANDIDATE_KEY = "SELECT cr FROM Entity AS cr left join cr.relationship AS re left join fetch cr.relationship2 WHERE re.candidateKey=:ID";
Run Code Online (Sandbox Code Playgroud)
..和"实体"带有下划线,即使"实体"是有效的类名,并且具有@Entity注释.当代码实际运行时,没有问题.
我想要让IDE了解哪些类是有效的,需要某种配置?这个配置是如何完成的?
更新:我确实有一个JPA方面,但它没有看到带注释的类.它似乎需要一个persistence.xml或orm.xml(我的项目不使用)
我还是Spring MVC的新手,在构建我的测试项目时,我从Tomcat日志中收到了这条消息:
SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'divisionController': Injection of resource dependencies failed; nested exception is org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'adminService' must be of type [employee.service.impl.AdminServiceImpl], but was actually of type [$Proxy52]
at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessPropertyValues(CommonAnnotationBeanPostProcessor.java:307)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1106)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
...
Caused by: org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named 'adminService' must be of type [employee.service.impl.AdminServiceImpl], but was actually of type [$Proxy52]
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:360)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
Run Code Online (Sandbox Code Playgroud)
我为用户和管理员提供了两个rolle服务:
package employee.service;
import …Run Code Online (Sandbox Code Playgroud) 对不起,如果之前已经问过这个问题.我正在使用Butterknife 5.0和最新版本的Android Studio(0.5.7).如何为使用ButterKnife的'OnClick'注释的方法删除"Method is never used"警告.我注意到Eclipse并没有为'OnClick'方法提供此警告.提前致谢
我正在尝试@IntDef在Android开发中实现注释.
第一种方法:在Constant.java类中分隔定义看起来很棒:
public class Constant {
@IntDef(value={SORT_PRICE, SORT_TIME, SORT_DURATION})
@Retention(RetentionPolicy.SOURCE)
public @interface SortType{}
public static final int SORT_PRICE = 0;
public static final int SORT_TIME = 1;
public static final int SORT_DURATION = 2;
}
Run Code Online (Sandbox Code Playgroud)
用法:
@Constant.SortType int sortType = Constant.SORT_PRICE;
Run Code Online (Sandbox Code Playgroud)
但是当在一个文件中存在多个定义(例如UserType,StoreType等)时,事情会变得更加混乱.
第二种方法:所以我想出了这样的东西来分隔定义之间的值:
public class Constant {
@IntDef(value={SortType.SORT_PRICE, SortType.SORT_TIME, SortType.SORT_DURATION})
@Retention(RetentionPolicy.SOURCE)
public @interface SortTypeDef{}
public static class SortType{
public static final int PRICE = 0;
public static final int TIME = 1;
public static …Run Code Online (Sandbox Code Playgroud) 我有一个名为SynonymMapping的类,它有一组映射为CollectionOfElements的值
@Entity(name = "synonymmapping")
public class SynonymMapping {
@Id private String keyId;
//@CollectionOfElements(fetch = FetchType.EAGER)
@CollectionOfElements
@JoinTable(name="synonymmappingvalues", joinColumns={@JoinColumn(name="keyId")})
@Column(name="value", nullable=false)
@Sort(type=SortType.NATURAL)
private SortedSet<String> values;
public SynonymMapping() {
values = new TreeSet<String>();
}
public SynonymMapping(String key, SortedSet<String> values) {
this();
this.keyId = key;
this.values = values;
}
public String getKeyId() {
return keyId;
}
public Set<String> getValues() {
return values;
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个测试,我将两个SynonymMapping对象存储到数据库,然后要求数据库返回所有保存的SynonymMapping对象,期望接收我存储的两个对象.
当我将值的映射更改为急切(如注释行中的代码所示)并再次运行测试时,我会收到四个匹配项.
我已经清除了运行之间的数据库,我可以复制这个问题在eager和lazy之间交换.
我认为它与hibernate在下面创建的连接有关但我无法在网上找到明确的答案.
任何人都可以告诉我为什么急切的提取是复制对象?
谢谢.
Java允许在注释中定义值,例如:
public @interface MyAnnotation {
int MyValue();
}
Run Code Online (Sandbox Code Playgroud)
虽然可以为MyValue注释设置默认值,但我想知道是否可以强制使用它.我的意思是强制用户MyValue在注释类或字段时提供值.
我浏览了文档但找不到任何内容.有没有人能解决这个问题,或者只是不可能强制要求注释的值?
似乎可以通过在web.xml中将"metadata-complete"设置为"true"来解决缓慢的Tomcat 7启动问题,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<web-app metadata-complete="true" id="WebApp_ID" version="3.0"...
Run Code Online (Sandbox Code Playgroud)
问题是Tomcat在启动时扫描注释,这会显着减慢它的速度.我的时间从25秒减少到5秒.(更多信息:Tomcat和Servlet 3.0 Web配置)
但是,我的代码中有一些注释,例如:
@ManagedBean
@RequestScoped
@Override
...
Run Code Online (Sandbox Code Playgroud)
我很困惑 - 在设置metadata-complete ="true"后我的代码会工作吗?我是否必须删除注释并将所有内容移至web.xml中?
注释受保护的字段的正确/首选方法是什么,ReadWriteLock以便像FindBugs这样的工具可以利用注释?应该ReadWriteLock简单地在@GuardedBy注释中写下名称.是否有理由在@GuardedBy注释中写入只读锁的名称,或只写写锁?不FindBugs的,或其他工具,甚至支持ReadWriteLock的@GuardedBy?
annotations ×10
java ×7
android ×2
tomcat7 ×2
butterknife ×1
concurrency ×1
findbugs ×1
hibernate ×1
jpa ×1
jpql ×1
junit ×1
methods ×1
servlet-3.0 ×1
spring-mvc ×1
warnings ×1