我今天升级了我的 Spring 工具套件,从那时起我就坚持正确构建项目。当我 Maven->更新项目时,它排除 src/main/resources 文件夹。如果我“删除”该排除(将其设置为“排除(无)”),则一切正常。但是,当我再次执行 Maven->Update Project 时,结果就是这样。
我已经探索了数百个链接,但到目前为止还没有成功。更新之前一切正常。
如何让 Maven 包含 src/main/resources 和 src/test/resources?
包含资源文件夹时的 .classpath 文件(我希望默认生成的文件):
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" output="target/classes" path="src/main/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/classes" path="src/main/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="src/test/java">
<attributes>
<attribute name="optional" value="true"/>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="src" output="target/test-classes" path="src/test/resources">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
<attributes>
<attribute name="maven.pomderived" value="true"/>
<attribute name="org.eclipse.jst.component.dependency" value="/WEB-INF/lib"/>
</attributes> …Run Code Online (Sandbox Code Playgroud) 我有两个项目-A和B,其中A依赖于B。我将B打包为jar并将其部署在maven服务器(人工工厂)上,然后将该jar作为对项目A的普通依赖项包含在pom文件中。B的jar文件显示在项目A的Maven依赖项中,但项目B的依赖项未显示在依赖项层次结构中。这导致B的依赖项的类未找到异常。
但是,我的项目A和B在同一个Eclipse工作区中。当我打开项目B时,项目A开始从工作空间而不是远程存储库中引用项目B,并且一切正常。
这个问题-Maven。传递依存关系最接近我的问题,但是项目B的依存关系不是可选的。
怎么了
项目B的POM
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.myapp</groupId>
<artifactId>utils</artifactId>
<version>1.0.0-RELEASE</version>
<packaging>jar</packaging>
<name>utils</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<!-- Following doesn't get added to project A -->
<dependencies>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
</dependencies>
</project>
Run Code Online (Sandbox Code Playgroud)
项目A的POM
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.myapp</groupId>
<artifactId>core-app</artifactId>
<version>1.0.0-RELEASE</version>
<packaging>jar</packaging>
<name>core-app</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>com.myapp</groupId>
<artifactId>utils</artifactId>
<version>1.0.0-RELEASE</version>
</dependency>
</dependencies>
</project>
Run Code Online (Sandbox Code Playgroud)
我正在使用Maven快速入门原型。我的项目的项目结构为(我打包为jar):
project-name
src/main/java
src/test/java
pom.xml
Run Code Online (Sandbox Code Playgroud) 这是RESTful网络应用程序.我正在使用Hibernate Envers来存储历史数据.除了修订号和时间戳,我还需要存储其他详细信息(例如:IP地址和经过身份验证的用户).Envers提供了多种方法来拥有一个非常棒的自定义修订实体.我在修改实体上设置自定义数据时遇到问题.
@RevisionEntity( MyCustomRevisionListener.class )
public class MyCustomRevisionEntity extends DefaultRevisionEntity {
private String userName;
private String ip;
//Accessors
}
public class MyCustomRevisionListener implements RevisionListener {
public void newRevision( Object revisionEntity ) {
MyCustomRevisionEntity customRevisionEntity = ( MyCustomRevisionEntity ) revisionEntity;
//Here I need userName and Ip address passed as arguments somehow, so that I can set them on the revision entity.
}
}
Run Code Online (Sandbox Code Playgroud)
由于newRevision()方法不允许任何其他参数,我无法将自定义数据(如用户名和ip)传递给它.我怎样才能做到这一点?
Envers还提供了另一种方法:
另一种使用org.hibernate.envers.RevisionListener的方法是调用org.hibernate.envers.AuditReader接口的getCurrentRevision(类revisionEntityClass,boolean persist)方法来获取当前版本,并用所需信息填充它.
所以使用上面的方法,我将不得不做这样的事情:
更改我当前的dao方法,如:
public void persist(SomeEntity entity) {
...
entityManager.persist(entity);
...
}
Run Code Online (Sandbox Code Playgroud)
至 …
我正在使用JUnit 4.12.断言方法本质上不是通用的.例如,assertEquals方法如下所示:
static public void assertEquals(Object expected, Object actual) {..}
Run Code Online (Sandbox Code Playgroud)
为什么不喜欢?
static public <T> void assertEquals(T expected, T actual) {..}
Run Code Online (Sandbox Code Playgroud)
我觉得需要通用方法声明来更好地编译时间和IDE自动完成.
这是一个非常简单的例子:我试图将Object类型转换为这样的原语:
Object object = Integer.valueOf(1234);
int result1 = int.class.cast(object); //throws ClassCastException: Cannot convert java.lang.integer to int
int result2 = (int)object; //works fine
Run Code Online (Sandbox Code Playgroud)
这是类'Class'的cast方法的源代码
public T cast(Object obj) {
if (obj != null && !isInstance(obj))
throw new ClassCastException(cannotCastMsg(obj));
return (T) obj;
}
private String cannotCastMsg(Object obj) {
return "Cannot cast " + obj.getClass().getName() + " to " + getName();
}
Run Code Online (Sandbox Code Playgroud)
为什么会这样?其他原语也是如此.
在 DAO 层类中,假设我有如下代码:
private EntityManagerFactory factory;
public void update(T entity) {
EntityManager entityManager = factory.createEntityManager();
entityManager.getTransaction().begin();
entityManager.merge(entity);
entityManager.getTransaction().commit();
entityManager.close();
}
Run Code Online (Sandbox Code Playgroud)
现在在上面的代码块中,在调用 entityManager.close() 之前,可能会(很少)发生 RuntimeExceptions。那么,这样写会不会很好:
public void update(T entity) {
EntityManager entityManager = factory.createEntityManager();
try {
entityManager.getTransaction().begin();
entityManager.merge(entity);
entityManager.getTransaction().commit();
}
finally {
entityManager.close();
}
}
Run Code Online (Sandbox Code Playgroud)
由于我的方法中的所有对象都是本地的,一旦方法结束它们将不存在。那么,当方法内部发生异常时,该方法的堆栈会发生什么变化呢?
我认为如果堆栈存在异常情况,那么我确实需要 finally 块来关闭 entityManager。实际发生了什么?