相关疑难解决方法(0)

使用Shade-Plugin正确地最小化Uber Jar

我正在使用Maven-Shade-Plugin来创建一个可运行的Uber-jar.根据本页的最后一帧,可以通过使用以下方式最小化jar的大小:

<configuration>
      <minimizeJar>true</minimizeJar>
</configuration>
Run Code Online (Sandbox Code Playgroud)

但是,此功能未考虑log4j.properties文件中声明的类.因此,例如org.apache.log4j.appender.TimeAndSizeRollingAppender,即使它已在log4j.properties文件中声明,也不包含在Uber-jar中.

我相信我会遇到与Spring相同的问题.如果我的代码仅引用接口A并且我的Spring文件包含实现A的类B的实例化,那么B可能不会被添加到jar中,因为它不在代码中.

我怎么解决这个问题?

java executable-jar maven-plugin maven

25
推荐指数
1
解决办法
1万
查看次数

AWS SNS发布到订阅的Lambda函数会记录空字段

试图将此发布到AWS论坛,但似乎我的帐户"尚未准备好",无论这意味着什么.

我已经设置了一个AWS Lambda函数(用Java编写),它接受POJO以允许自动反序列化JSON.我正在使用的测试JSON位于下方,表示一旦所有内容都启动并运行,将从消息的最终源发送的JSON字符串.

{"sender":"Joe", "id":1, "event":"started", "ticks":2, "time":"20150623T214256Z", "version":"1.0"}
Run Code Online (Sandbox Code Playgroud)

当我通过从Lambda"测试"控制台发布它来测试它时,这非常有效.

我现在尝试通过将Lambda函数订阅到主题来挂钩SNS,我正在从SNS控制台测试它.我尝试使用"原始数据"(没有显示任何结果)和使用"JSON生成器"数据选项生成的JSON发送与上面相同的确切消息,我遇到了SNS似乎的问题将消息发送到Lambda函数,POJO被实例化,但是调用默认构造函数或者使用所有空值调用参数化构造函数.无论哪种方式,当Lambda函数通过在POJO中调用重写的toString()方法来记录消息时,它会为所有变量打印出null,而不会显示任何错误消息.同样,SNS主题配置为记录到Cloudwatch,它也没有报告任何错误.

这是新生成的JSON消息.

{
"default": "{\"sender\":\"Joe\", \"id\":1, \"event\":\"started\", \"ticks\":2, \"time\":\"20150623T214256Z\", \"version\":\"1.0\"}", 
"lambda": "{\"sender\":\"Joe\", \"id\":1, \"event\":\"started\", \"ticks\":2, \"time\":\"20150623T214256Z\", \"version\":\"1.0\"}", 
}
Run Code Online (Sandbox Code Playgroud)

以下是日志消息.

Lambda的日志:

START RequestId: 238a0546-627d-11e5-b228-817bf2a1219a    
Received the following :: We have the following Message{sender=null, id=null, event=null, ticks=null, time=null, version=null}    
END RequestId: 238a0546-627d-11e5-b228-817bf2a1219a   
REPORT RequestId: 238a0546-627d-11e5-b228-817bf2a1219a  Duration: 26.23 ms  Billed Duration: 100 ms     Memory Size: 1536 MB    Max Memory Used: 69 MB  
Run Code Online (Sandbox Code Playgroud)

SNS日志:

{ "status": "SUCCESS", "notification": { "timestamp": "2015-09-24 05:28:51.079", "topicArn": "arn:aws:sns:us-east-1:256842276575:App", …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-sns aws-lambda

7
推荐指数
1
解决办法
2969
查看次数

如何在 maven 中使用适用于 java 的 AWS 开发工具包?

我想获取 SQS 队列中的消息。我第一次使用maven。这是我到目前为止所做的步骤。

1.使用这个命令创建maven项目:

mvn archetype:generate -DgroupId=com.mycompany.app -DartifactId=aws-try -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
Run Code Online (Sandbox Code Playgroud)

上面的命令创建了一个带有 src 文件夹和 pom.xml的aws-try目录。

2. 在 pom.xml 中添加 AWS-SDK 依赖:

<dependency>
  <groupId>com.amazonaws</groupId>
  <artifactId>aws-java-sdk</artifactId>
  <version>1.11.78</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

3、在src>main>java>com>mycompany>app>SQSTry.java下添加SQStry.java文件

package com.mycompany.app;

import java.util.List;
import java.util.Map.Entry;

import com.amazonaws.AmazonClientException;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.regions.Region;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.sqs.AmazonSQS;
import com.amazonaws.services.sqs.AmazonSQSClient;
import com.amazonaws.services.sqs.model.CreateQueueRequest;
import com.amazonaws.services.sqs.model.DeleteMessageRequest;
import com.amazonaws.services.sqs.model.DeleteQueueRequest;
import com.amazonaws.services.sqs.model.Message;
import com.amazonaws.services.sqs.model.ReceiveMessageRequest;
import com.amazonaws.services.sqs.model.SendMessageRequest;


public class SQSTry {

public static void main (String args[]) {


System.out.println("SQSTry");

        AWSCredentials credentials = null;
        try { …
Run Code Online (Sandbox Code Playgroud)

java amazon-sqs amazon-web-services maven aws-sdk

1
推荐指数
1
解决办法
9476
查看次数