我正在开发一个POC,该POC使用Java连接到AWS S3。我在我的POM中添加了aws-java-sdk作为maven依赖项。当我在Eclipse中运行主类时,此代码可以正常工作。但是,当我使用Maven构建jar并运行jar文件时,由于它没有AWS文件,因此出现以下错误。 生成的jar的大小仅为4KB。因此,它不包括依赖项。在这种情况下,我知道我需要通过包含所有必需的库来提取jar或在POM中使用Maven程序集插件并使用Maven进行构建。使用这种方式生成的jar的大小为120MB。
但是,我需要编写AWS逻辑的实际模块没有主类。该jar运行在Linux服务器上,它还具有其他依赖关系,这些依赖关系已添加到服务器上的lib
文件夹中。它从该文件夹中选择所有其他依赖项。但是它找不到我已添加到lib
文件夹中的AWS依赖项。有什么方法可以使用AWS逻辑/依赖关系而不必打包我的模块以包含所有庞大的依赖关系。我希望它使用lib
文件夹中的AWS依赖关系,就像它使用其他依赖关系一样: lib文件夹中的ojdbc。
BasicAWSCredentials awsCreds = new BasicAWSCredentials("access", "secret");
AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(awsCreds)).withRegion(Regions.US_WEST_2).build();
S3Object object = s3Client.getObject(new GetObjectRequest(bucketName, key));
InputStream objectData = object.getObjectContent();
fullObject = s3Client.getObject(new GetObjectRequest(bucketName, key));
摆脱异常
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: com/amazonaws/auth/AWSCredentials
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.privateGetMethodRecursive(Unknown Source)
at java.lang.Class.getMethod0(Unknown Source)
at java.lang.Class.getMethod(Unknown Source)
at sun.launcher.LauncherHelper.validateMainClass(Unknown Source)
at sun.launcher.LauncherHelper.checkAndLoadMain(Unknown Source)
Caused by: java.lang.ClassNotFoundException: com.amazonaws.auth.AWSCredentials
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 7 more