我想使用Maven-shade-plugin创建超级jar.但是当我调用mvn package命令Maven报告时,有一些重叠的类.我附加了所有有问题的重叠,其中一些是由于库(Log4J)的旧版本和新版本引起的,但其中一些似乎具有相同的类 - 例如javax.mail和mailapi/smtp/imap等等.
在这种情况下最好做什么?是否有一些关键如何确定哪些重叠是安全的,忽略哪一个需要正确?
- mailapi-1.4.3.jar, javax.mail-1.5.0.jar define 166 overlappping classes
- spring-2.5.6.SEC03.jar, spring-tx-3.1.4.RELEASE.jar define 176 overlappping classes:
- spring-beans-3.1.4.RELEASE.jar, spring-2.5.6.SEC03.jar define 283 overlappping classes:
- slf4j-log4j12-1.7.5.jar, slf4j-impl-2.0-beta2.jar define 3 overlappping classes:
- spring-2.5.6.SEC03.jar, spring-context-support-3.1.4.RELEASE.jar define 55 overlappping classes:
- aopalliance-1.0.jar, spring-2.5.6.SEC03.jar define 9 overlappping classes:
- imap-1.5.0.jar, javax.mail-1.5.0.jar define 87 overlappping classes:
- commons-logging-api-1.1.jar, commons-logging-1.1.3.jar define 19 overlappping classes:
- spring-2.5.6.SEC03.jar, spring-core-3.1.4.RELEASE.jar define 161 overlappping classes:
- spring-2.5.6.SEC03.jar, spring-context-3.1.4.RELEASE.jar define 326 overlappping classes:
- log4j12-api-2.0-beta3.jar, log4j-1.2.17.jar …Run Code Online (Sandbox Code Playgroud) 我想在我的Spring MVC Web应用程序中缓存数据.因为我也是Spring Framework和MVC架构的新手,我想问一下我是否应该在DAO层上缓存数据(通过Spring Caching系统),还是应该在服务层上缓存输出方法?
例如,我在服务层上有这个方法:
@Override
public LinkedList<OrderCount> getOrderCount(Date dateFrom, Date dateTo, Class type) {
try {
return chartDataDAO.getOrderCount(dateFrom, dateTo, type);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
Run Code Online (Sandbox Code Playgroud)
这个方法调用这个DAO方法:
public LinkedList<OrderCount> getOrderCount(Date dateFrom, Date dateTo, Class type);
Run Code Online (Sandbox Code Playgroud)
我的问题是:我应该在服务或DAO层上进行缓存吗?
我正在尝试使用 Log4J ver 2-beta 9 的简单 Maven 应用程序。在我的 pom.xml 文件中,我有这两个依赖项(如Log4J Maven 网页中所述):
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-api</artifactId>
<version>2.0-beta9</version>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.0-beta9</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
Eclipse 看到 Log4J 库:

但是当我打包应用程序并运行它时,会抛出这个异常:
java -cp target/notification-1.0.0.jar com.example.Sandbox
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/LogManager
at com.example.Sandbox.<clinit>(Sandbox.java:13)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.LogManager
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 1 more
Run Code Online (Sandbox Code Playgroud)
我搜索了这个异常,它似乎与 CLASSPATH 变量有关。
应该如何为 Maven 项目设置 CLASSPATH?
我想问一下与Maven项目中的pom.xml文件有关的这些问题.
pom.xml为所有依赖库创建多个而不是将所有依赖项放在一个中的原因是什么pom.xml?pom.xmlMaven项目中的这些文件应该放在哪里?这是Spring框架的pom.xml示例 - http://search.maven.org/remotecontent?filepath=org/springframework/spring-core/3.2.5.RELEASE/spring-core-3.2.5.RELEASE. POM
我需要将UPDATEPostgreSQL表中的命令行(从subselect中选择)分成组,这些组将在其中一列中用整数值标识.这些组的大小应相同.源表包含数十亿条记录.
例如,我需要将213个选定的行分成组,每组应包含50个记录.结果将是:
使用一些循环(或使用PostgreSQL窗口函数)没有问题,但我需要非常有效和快速地完成它.我不能在id中使用序列,因为这些ID中应该存在间隙.
我有一个想法是使用随机整数生成器并将其设置为行的默认值.但是当我需要调整组大小时,这是不可用的.
我想将log4j2消息记录到关系数据库中.
JDBC appender的文档在这里.我可以使用这些来源作为数据库连接提供者:
但是在某种程度上如何使用我们在整个应用程序中使用的数据源bean(com.jolbox.bonecp.BoneCPDataSource)?
我正在 Spring Framework 中创建 MVC Web 应用程序,我需要将 Apache DBUtils 结果集中的行转换为由嵌套对象组成的 JavaBeans。
关于我发现的极少数示例,我创建了这个 RowProcessor 实现。
public class MonthOrderCountHandler extends BasicRowProcessor {
@Override
public Object toBean(ResultSet rs, Class type) throws SQLException {
// Year
Year year = new Year();
year.setYearNo(rs.getInt("yearNo"));
year.setYear4(rs.getString("year4"));
year.setYear2(rs.getString("year2"));
// Quarter
Quarter quarter = new Quarter();
quarter.setQuarter(rs.getInt("quarter"));
// Month
Month m = new Month();
m.setYear(year);
m.setQuarter(quarter);
m.setMonthAbbreviation(rs.getString("monthAbbreviation"));
m.setMonthName(rs.getString("monthName"));
m.setMonthNo(rs.getInt("monthNo"));
// Final bean
MonthOrderCount result = new MonthOrderCount();
result.setMonth(m);
result.setOrderCount(rs.getInt("orderCount"));
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
问题:我想知道如何在我的 DAO 对象中使用这个行处理器,以及这个实现是否正确?
通常我以这种方式将行转换为 JavaBeans: …
我有一个Java控制台应用程序,到目前为止它是在Netbeans IDE中开发的.当Netbeans构建应用程序时,它会创建dist目录并将应用程序作为jar存档构建到此目录中,并dist/lib复制所有依赖项.此目录可以复制到最终目的地并运行.
现在我正在尝试将这个项目转移到Maven.一切顺利,我可以编译和打包我的应用程序,并将jar创建到target目录中.我用它maven-jar-plugin来设置清单中的主类,并将maven-shade-plugin所有源包装到一个jar文件中.
我想问你在现实世界中如何部署这样的Maven项目?我应该使用所有target目录,将其复制到最终目的地并运行,因为我已经习惯使用Netbeans了吗?当我不使用时会产生什么后果maven-shade-plugin- 所有库都被定义为依赖关系?我问,因为在我的测试项目中,这些库在target目录中不存在.
我的问题 - 我有一个Java控制台应用程序"A"打包通过Maven(没有maven-shade-plugin)和Linux服务器"S" 打包这个应用程序应运行.我可以手动将所有目标目录复制到服务器"S",还是有一些更好/更自动的方式如何在现实世界中解决?
我试图在Java中实现RSA算法.
当你看一下这个页面:http://en.wikipedia.org/wiki/RSA_(algorithm)#A_working_example你可以看到这个计算:
c = 65 ^ 17 mod 3233 = 2790
Run Code Online (Sandbox Code Playgroud)
当我使用这个Java代码时:
double valc = Math.pow(65, 17) % 3233;
System.out.println("Expected = 2790, computed = " + valc);
Run Code Online (Sandbox Code Playgroud)
结果是:
Expected = 2790, computed = 887.0
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
在我的一个网页(Spring MVC Web应用程序)中,我以多种形式(表格,图表和另一个表格)显示数据.因为我通过Ajax请求加载页面内容,所以我不想在每个请求上加载相同的数据.该数据属于一个特定的登录用户.
Spring框架中是否有一些合适的技术/缓存处理程序如何处理这种数据?我可以用于此目的javax.servlet.http.HttpSession但是我想知道是否有更好的技术.
编辑:在此期间我发现有可能session在我的bean的定义中定义范围,我认为这是我需要的,不是吗?
<bean id="pageDataCache" class="controller.utils.PageDataCache" scope="session">
<aop:scoped-proxy/>
</bean>
Run Code Online (Sandbox Code Playgroud)
因此,将为每个HTTP会话创建一个新实例,并将存储数据.
我需要从Hazelcast分布式地图中删除一个项目,我使用类似这样的代码(简化):
public void realeaseBatchesById(int Id) {
Iterator<Map.Entry<Long, WorkingBatch>> it = workingMap.entrySet().iterator();
while (it.hasNext()) {
WorkingBatch value = it.next().getValue();
if (value.getServer().getId() == idd) {
it.remove();
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是这段代码不会删除值,地图的大小在开头与结尾处的大小相同.
当我看到Hazelcast Javadoc时,我看到这个接口只定义了按键和键的值删除.这是否意味着我不能使用标准方法如何从地图中删除值?