对于想了解尝试通过Inline::Java模块将Java内联到Perl中的读者,本文将提供新的信息,并且为您提供关于android–无法从java模块调用kotlin模块、Android应用程序Jav
对于想了解尝试通过Inline :: Java模块将Java内联到Perl中的读者,本文将提供新的信息,并且为您提供关于android – 无法从java模块调用kotlin模块、Android应用程序Java模块(Java 1.8)、IntelliJ-将Java项目/模块转换为Maven项目/模块、Java 6-将java.sql.Types映射到Java类型的有价值信息。
本文目录一览:- 尝试通过Inline :: Java模块将Java内联到Perl中
- android – 无法从java模块调用kotlin模块
- Android应用程序Java模块(Java 1.8)
- IntelliJ-将Java项目/模块转换为Maven项目/模块
- Java 6-将java.sql.Types映射到Java类型
尝试通过Inline :: Java模块将Java内联到Perl中
这是我第一次在Perl中内联Java代码的尝试。我们无法在系统上使用标准的SFTP命令。这是我的力量。我们有一个可以使用的名为SFTP.jar的jar文件。我之前的上一个人可以让Inline
:: Perl正常工作,但是他的实现草率,我想对其进行清理。
我正在该H:\svn
目录的Windows系统上工作。我的模块在H:\svn\FMS3
目录下,而我的jar文件SFTP.jar
在H:\svn\FMS3\Sftp.pm
目录下。目录Sftp.pm
下有一个名为的文件H:\svn\FMS3
,并定义了一个名为的模块FMS3::Sftp
。(我将所有自定义模块保留在FMS3
父模块下)。
我在中内联了代码FMS3::Sftp
,看起来好像可以编译。但是,当我尝试执行时,它要求Can''t exec JVM: open3: Can''tcall method "close" on an undefined value at C:/Perl/lib/IPC/Open3.pm line370
。
我到底在做什么错?
该FMS3::Sftp
模块:
#! /usr/bin/env perl# Sftp.pm################################################################################################################################################# PACKAGE FMS3::Sftp#package FMS3::Sftp;################################################################################################################################################## PERL PRAGMAS#use strict;use warnings;use vars qw($PERL_CLASSPATH);################################################################################################################################################## CONSTANTS#use constant { FTP_SERVER => "10.85.10.190", FTP_USER => "fisaftp", FTP_PASSWORD => "Fisa123456",};################################################################################################################################################## INITIALIZE## Set a PERL_CLASSPATH that will include all directories in the# @INC array. Somewhere in this array will be located our JAR file# that we need to include, and of course, this classpath.## This will be appended to the standard $CLASSPATH environment variable.#BEGIN { use Config; my $cpsep; if ($Config{osname} =~ /^mswin32/i) { $cpsep = ";"; } else { $cpsep = ":"; } $PERL_CLASSPATH = join("/FMS3/Sftp/SFTP.jar$cpsep", @INC); $PERL_CLASSPATH = "$PERL_CLASSPATH/FMS3/Sftp/SFTP.jar";}################################################################################################################################################## # PERL INLINE JAVA CODE:#use Inline ( Java => ''DATA'', J2SDK => $ENV{JAVA_HOME}, CLASSPATH => $PERL_CLASSPATH, STUDY => ["SFTP", "close", "list", "get", "put", "remove"], DEBUG => 4,);################################################################################################################################################## CONSTRUCTORS#sub new { my $class = shift; my $server = shift; my $user = shift; my $password = shift; if (not $server) { $server = FTP_SERVER; } if (not $user) { $user = FTP_USER; } if (not $password) { $password = FTP_PASSWORD; } my $self = {}; bless($self, $class); eval {$self->{CONNECTION} = new SFTP($server, $user, $password);}; if ($@) { $self->{ERROR} = $@; return; } return $self;}################################################################################################################################################## DESTRUCTOR (Automatic close on losing $self)#sub DESTROY { my $self = shift; $self->{CONNECTION}->close(); return 1;}################################################################################################################################################## List#sub List { my $self = shift; my $location = shift; my @list; eval {@list = $self->{CONNECTION}->list($location);}; if ($@) { $self->{ERROR} = $@; return; } return @list;}################################################################################################################################################## Get#sub Get { my $self = shift; my $file = shift; my $location = shift; eval {$self->{CONNECTION}->get($file, $location);}; if ($@) { $self->{ERROR} = $@; return; } return 1;}################################################################################################################################################## Put#sub Put { my $self = shift; my $file = shift; my $location = shift; my $mode = shift; eval {$self->{CONNECTION}->put($file, $location, $mode);}; if ($@) { $self->{ERROR} = $@; return; } return 1;}################################################################################################################################################## Remove#sub Remove { my $self = shift; my $file = shift; eval {$self->{CONNECTION}->remove($file);}; if ($@) { $self->{ERROR} = $@; return; } return 1;}################################################################################################################################################## Error#sub Error { my $self = shift; return $self->{ERROR};}#########################################################################1;__DATA____Java__import com.trilead.ssh2.*;import java.io.IOException;import java.util.*;public class SFTP { ConnectionInfo ci; SCPClient sftp=null; SFTPv3Client sftpv3=null; Connection conn=null; public SFTP(String host, String username, String password) { boolean b=false; conn= new Connection(host); try { ci=conn.connect(); b=conn.authenticateWithPassword(username,password); if (!b) { System.out.println("Invalid login."); System.exit(0); } sftp = new SCPClient( conn ); sftpv3 = new SFTPv3Client (conn); } catch (IOException e) { System.out.println("Unable to connect"+": "+e.getMessage()); } } public void close() { conn.close(); } public String[] list (String loc) { Vector v=null; SFTPv3DirectoryEntry x=null; try { v = sftpv3.ls(loc); } catch (IOException e) { System.out.println("Pickup location does not exist, please check!"); String[] value = new String[1]; return value; } String[] s=new String[v.size()]; for (int i=0; i<v.size(); i++) { x = (SFTPv3DirectoryEntry)v.elementAt(i); s[i]=x.filename; } return s; } public void get (String file, String loc) { try{ sftp.get(file,loc); } catch (IOException e) { System.out.println("Unable to download, please check location or file permissions"); } } public void put (String file, String loc, String mode) { try{ sftp.put(file,loc,mode); } catch (IOException e) { System.out.println("Unable to put"+": "+e.getMessage()); } } public void remove (String file) { try{ sftpv3.rm(file); } catch (IOException e) { System.out.println("Unable to remove"+": "+e.getMessage()); } }}
我有一个名为test.pl的测试程序,它看起来像这样:
use FMS3::Sftp;my $ftp = FMS3::Sftp->new();print $ftp->List(".");
我要做的就是连接到我们的服务器并创建目录列表。但是,尝试运行时出现类路径错误test.pl
[perl][1] validate done.[perl][1] Starting build.[perl][4] portable: ENV_VAR_PATH_SEP_CP for MSWin32 is '';''[perl][4] portable: SUB_FIX_JAVA_PATH => H:\svn for MSWin32 is default ''H:\svn''[perl][4] portable: SUB_FIX_JAVA_PATH => D:\PROGRA~1\IBM\SQLLIB~1\java\db2java.zip for MSWin32 is default ''D:\PROGRA~1\IBM\SQLLIB~1\java\db2java.zip''[perl][4] portable: SUB_FIX_JAVA_PATH => D:\PROGRA~1\IBM\SQLLIB~1\java\db2jcc.jar for MSWin32 is default ''D:\PROGRA~1\IBM\SQLLIB~1\java\db2jcc.jar''[perl][4] portable: SUB_FIX_JAVA_PATH => D:\PROGRA~1\IBM\SQLLIB~1\java\sqlj.zip for MSWin32 is default ''D:\PROGRA~1\IBM\SQLLIB~1\java\sqlj.zip''[perl][4] portable: SUB_FIX_JAVA_PATH => D:\PROGRA~1\IBM\SQLLIB~1\java\db2jcc_license_cu.jar for MSWin32 is default ''D:\PROGRA~1\IBM\SQLLIB~1\java\db2jcc_license_cu.jar''[perl][4] portable: SUB_FIX_JAVA_PATH => D:\PROGRA~1\IBM\SQLLIB~1\bin for MSWin32 is default ''D:\PROGRA~1\IBM\SQLLIB~1\bin''[perl][4] portable: SUB_FIX_JAVA_PATH => D:\PROGRA~1\IBM\SQLLIB~1\java\common.jar for MSWin32 is default ''D:\PROGRA~1\IBM\SQLLIB~1\java\common.jar''[perl][4] portable: SUB_FIX_JAVA_PATH => D:\Program Files\Rational\ClearQuest\cqjni.jar for MSWin32 is default ''D:\Program Files\Rational\ClearQuest\cqjni.jar''[perl][4] portable: SUB_FIX_JAVA_PATH => C:\Perl\site\lib\Inline\Java\InlineJavaServer.jar for MSWin32 is default ''C:\Perl\site\lib\Inline\Java\InlineJavaServer.jar''[perl][2] classpath candidate ''C:/Perl/site/lib/FMS3/Sftp/SFTP.jar'' scraped[perl][2] classpath candidate ''C:/Perl/lib/FMS3/Sftp/SFTP.jar'' scraped[perl][4] portable: SUB_FIX_JAVA_PATH => H:\svn\FMS3\Sftp\SFTP.jar for MSWin32 is default ''H:\svn\FMS3\Sftp\SFTP.jar''[perl][2] classpath: H:\svn;D:\PROGRA~1\IBM\SQLLIB~1\java\db2java.zip;D:\PROGRA~1\IBM\SQLLIB~1\java\db2jcc.jar;D:\PROGRA~1\IBM\SQLLIB~1\java\sqlj.zip;D:\PROGRA~1\IBM\SQLLIB~1\java\db2jcc_license_cu.jar;D:\PROGRA~1\IBM\SQLLIB~1\bin;D:\PROGRA~1\IBM\SQLLIB~1\java\common.jar;D:\Program Files\Rational\ClearQuest\cqjni.jar;C:\Perl\site\lib\Inline\Java\InlineJavaServer.jar;H:\svn\FMS3\Sftp\SFTP.jar[perl][4] portable: J2SDK_BIN for MSWin32 is ''bin''[perl][4] portable: EXE_EXTENSION for MSWin32 is ''.exe''[perl][4] portable: IO_REDIR for MSWin32 is ''2>&1''[perl][4] portable: SUB_FIX_JAVA_PATH => H:\svn\_Inline\lib\auto\FMS3\Sftp_7ae5 for MSWin32 is default ''H:\svn\_Inline\lib\auto\FMS3\Sftp_7ae5''[perl][4] portable: SUB_FIX_CMD_QUOTES => "C:\Program Files\Java\jdk1.6.0_17\bin\javac.exe" -deprecation -d "H:\svn\_Inline\lib\auto\FMS3\Sftp_7ae5" SFTP.java > cmd.out 2>&1 for MSWin32 is default ''"C:\Program Files\Java\jdk1.6.0_17\bin\javac.exe" -deprecation -d "H:\svn\_Inline\lib\auto\FMS3\Sftp_7ae5" SFTP.java > cmd.out 2>&1''[perl][2] "C:\Program Files\Java\jdk1.6.0_17\bin\javac.exe" -deprecation -d "H:\svn\_Inline\lib\auto\FMS3\Sftp_7ae5" SFTP.java > cmd.out 2>&1[perl][4] portable: COMMAND_COM for MSWin32 is ''0''[perl][2] classpath: .;D:\PROGRA~1\IBM\SQLLIB~1\java\db2java.zip;D:\PROGRA~1\IBM\SQLLIB~1\java\db2jcc.jar;D:\PROGRA~1\IBM\SQLLIB~1\java\sqlj.zip;D:\PROGRA~1\IBM\SQLLIB~1\java\db2jcc_license_cu.jar;D:\PROGRA~1\IBM\SQLLIB~1\bin;D:\PROGRA~1\IBM\SQLLIB~1\java\common.jar;D:\Program Files\Rational\ClearQuest\cqjni.jar[perl][1] build done.[perl][1] Starting load.[perl][4] portable: ENV_VAR_PATH_SEP_CP for MSWin32 is '';''[perl][4] portable: SUB_FIX_JAVA_PATH => H:\svn for MSWin32 is default ''H:\svn''[perl][4] portable: SUB_FIX_JAVA_PATH => D:\PROGRA~1\IBM\SQLLIB~1\java\db2java.zip for MSWin32 is default ''D:\PROGRA~1\IBM\SQLLIB~1\java\db2java.zip''[perl][4] portable: SUB_FIX_JAVA_PATH => D:\PROGRA~1\IBM\SQLLIB~1\java\db2jcc.jar for MSWin32 is default ''D:\PROGRA~1\IBM\SQLLIB~1\java\db2jcc.jar''[perl][4] portable: SUB_FIX_JAVA_PATH => D:\PROGRA~1\IBM\SQLLIB~1\java\sqlj.zip for MSWin32 is default ''D:\PROGRA~1\IBM\SQLLIB~1\java\sqlj.zip''[perl][4] portable: SUB_FIX_JAVA_PATH => D:\PROGRA~1\IBM\SQLLIB~1\java\db2jcc_license_cu.jar for MSWin32 is default ''D:\PROGRA~1\IBM\SQLLIB~1\java\db2jcc_license_cu.jar''[perl][4] portable: SUB_FIX_JAVA_PATH => D:\PROGRA~1\IBM\SQLLIB~1\bin for MSWin32 is default ''D:\PROGRA~1\IBM\SQLLIB~1\bin''[perl][4] portable: SUB_FIX_JAVA_PATH => D:\PROGRA~1\IBM\SQLLIB~1\java\common.jar for MSWin32 is default ''D:\PROGRA~1\IBM\SQLLIB~1\java\common.jar''[perl][4] portable: SUB_FIX_JAVA_PATH => D:\Program Files\Rational\ClearQuest\cqjni.jar for MSWin32 is default ''D:\Program Files\Rational\ClearQuest\cqjni.jar''[perl][4] portable: SUB_FIX_JAVA_PATH => C:\Perl\site\lib\Inline\Java\InlineJavaServer.jar for MSWin32 is default ''C:\Perl\site\lib\Inline\Java\InlineJavaServer.jar''[perl][2] classpath: H:\svn;D:\PROGRA~1\IBM\SQLLIB~1\java\db2java.zip;D:\PROGRA~1\IBM\SQLLIB~1\java\db2jcc.jar;D:\PROGRA~1\IBM\SQLLIB~1\java\sqlj.zip;D:\PROGRA~1\IBM\SQLLIB~1\java\db2jcc_license_cu.jar;D:\PROGRA~1\IBM\SQLLIB~1\bin;D:\PROGRA~1\IBM\SQLLIB~1\java\common.jar;D:\Program Files\Rational\ClearQuest\cqjni.jar;C:\Perl\site\lib\Inline\Java\InlineJavaServer.jar[perl][1] starting JVM...[perl][1] client/server mode[perl][4] portable: GOT_NEXT_FREE_PORT for MSWin32 is ''0''[perl][4] portable: J2SDK_BIN for MSWin32 is ''bin''[perl][4] portable: EXE_EXTENSION for MSWin32 is ''.exe''[perl][4] portable: SUB_FIX_CMD_QUOTES => "C:\Program Files\Java\jdk1.6.0_17\bin\java.exe" org.perl.inline.java.InlineJavaServer 4 localhost 7890 false false false for MSWin32 is default ''"C:\Program Files\Java\jdk1.6.0_17\bin\java.exe" org.perl.inline.java.InlineJavaServer 4 localhost 7890 false false false''[perl][2] "C:\Program Files\Java\jdk1.6.0_17\bin\java.exe" org.perl.inline.java.InlineJavaServer 4 localhost 7890 false false false[perl][4] portable: DEV_NULL for MSWin32 is ''nul''[perl][1] JVM owner exiting...Can''t exec JVM: open3: Can''t call method "close" on an undefined value at C:/Perl/lib/IPC/Open3.pm line 370. at C:/Perl/site/lib/Inline/Java.pm line 484INIT failed--call queue aborted.[perl][1] killed by natural death.[perl][1] exiting with 22
答案1
小编典典好的。我想到了。我错了几件事:
- 在研究中,我同时拥有方法和类,但我只应具有类。
错误
use Inline ( Java => ''DATA'', J2SDK => $ENV{JAVA_HOME}, CLASSPATH => $PERL_CLASSPATH, STUDY => ["SFTP", "close", "list", "get", "put", "remove"],# DEBUG => 4,);
对
use Inline ( Java => ''DATA'', J2SDK => $ENV{JAVA_HOME}, CLASSPATH => $PERL_CLASSPATH, STUDY => ["SFTP"],# DEBUG => 4,);
- 当我将SFTP对象声明为时
new
,我必须给它完整的Perl名称空间:
错误
eval {$self->{CONNECTION} = new SFTP($server, $user, $password);};
对
eval {$self->{CONNECTION} = new FMS3::Sftp::SFTP($server, $user, $password);};
您花了几个小时在这样的东西上,放弃了,然后突然间,尘土飞扬的阁楼上的灯亮了。我是一个很聪明的人。将螺丝刀插入带电的插座中,第三次或第四次之后,我说“嘿,也许这不是一个好主意”。
android – 无法从java模块调用kotlin模块
package com.example.mylibrary import android.util.Log class A { fun helloWorld(){ Log.d("Kotlin","Hello World!") } }
和我的kotlin模块的gradle文件:
apply plugin: 'com.android.library' android { compileSdkVersion 23 buildToolsversion "23.0.1" defaultConfig { minSdkVersion 11 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro' } } sourceSets { main.java.srcDirs += 'src/main/kotlin' } } dependencies { compile filetree(dir: 'libs',include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.2.1' compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" } buildscript { ext.kotlin_version = '0.6.+' repositories { mavenCentral() } dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } repositories { mavenCentral() }
这是我的主要活动:
package com.example.uisample; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import com.example.mylibrary.A; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); A obj = new A(); obj.helloWorld(); } }
请注意android studio如何导入com.example.mylibrary.A而不是com.example.mylibrar.Akt作为参考说明. Android studio在编译之前没有报告任何错误.
应用程序的Gradle文件:
apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsversion "23.0.1" defaultConfig { applicationId "com.example.uisample" minSdkVersion 11 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro' } } } dependencies { compile filetree(dir: 'libs',include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.2.1' compile project(':mylibrary') }
运行项目后,gradle抛出此错误:“找不到符号类A”.我究竟做错了什么?
解决方法
>将kotlin-android插件应用到库模块build.gradle(see the docs):
apply plugin: 'kotlin-android'
就像现在一样,你甚至没有告诉gradle编译Kotlin文件.>您的buildscript块可能应该位于顶级build.gradle而不是模块build.gradle.>考虑更新完全发布的Kotlin 1.0.1-2版本
Android应用程序Java模块(Java 1.8)
Android Project(gradle)有主要的应用模块:
app – android应用程序(apply plugin:’com.android.application’)
和java模块:
network – (apply plugin:’java’)
java模块网络默认具有源代码兼容性1.8,因为lambda表达式,我真的想拥有它.
但默认情况下Android应用程序1.7我无法构建应用程序.
当然我在我的app – android模块中使用了retrolambda,但项目因为以下原因而无法编译:
错误:com.android.dx.cf.iface.ParseException:错误的类文件magic(cafebabe)或版本(0034.0000)
Error:Execution Failed for task ':app:transformClassesWithDexForDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command '/Library/Java/JavaVirtualMachines/jdk1.8.0_45.jdk/Contents/Home/bin/java'' finished with non-zero exit value 1
如果我创建我的java模块,一切都编译好:
apply plugin: 'java'
sourceCompatibility = 1.7
targetCompatibility = 1.7
但在这种情况下我不能使用lambda表达式,但我需要它.
我只看到下一个解决方案:
>使网络模块不是java而是android-module并使用retrolambda
(但是我要从这个模块中制作.jar而不是.aar所以它必须是
JAVA)
>不要在我的java模块中使用lambda表达式(将来会.jar)(但是
我想使用它,因为在rxJava中没有匹配愚蠢的代码
拉姆达)
对我来说最好的解决方案就是在我的java模块中使用retrolambda.我试过做类似的事情,但retroambda依赖(apply plugin:’me.tatarka.retrolambda’)在编译期间没有受到影响.
或者也许使用java 1.7与retrolambda之类的东西.
但gradle文件没有部分android {…}来设置compileOptions.
这该怎么做?
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'me.tatarka:gradle-retrolambda:3.2.3'
}
}
repositories {
jcenter()
}
apply plugin: 'java'
apply plugin: 'me.tatarka.retrolambda'
retrolambda {
jdk System.getenv("JAVA8_HOME")
oldJdk System.getenv("JAVA7_HOME")
javaVersion JavaVersion.VERSION_1_6
}
(我的gradle文件的其余部分仅与发布库有关)
Retrolambda可以完成使输出jar定位到正确的java版本所需的一切.
IntelliJ-将Java项目/模块转换为Maven项目/模块
我有一个关于Bitbucket的项目。仅提交源。为了将项目检索到新机器上,我在IntelliJ中使用了Version Control> Checkout
from Version Control。
然后,它询问我是否要从该源创建一个新项目,对此我回答“是”。到目前为止,一切都很好。它为我创建了一个不错的Java小项目,由一个模块组成。
但是,将这个项目引入IntelliJ的目的是将其变成Maven项目。我找不到任何可以让我做到这一点的选择!
有没有办法让IntelliJ只是为我生成一个基本的空pom.xml,其中包含名称,artifactId和存储库?或者,是否首先有办法将项目导入为Maven项目?(每当我尝试从现有源创建项目时,它都只提供Java项目的选项。)
Java 6-将java.sql.Types映射到Java类型
我正在寻找一个表的链接,该表包含SQL类型(java.sql.Types)与Java类型之间的映射。
你知道我在哪里可以找到吗?
关于尝试通过Inline :: Java模块将Java内联到Perl中的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于android – 无法从java模块调用kotlin模块、Android应用程序Java模块(Java 1.8)、IntelliJ-将Java项目/模块转换为Maven项目/模块、Java 6-将java.sql.Types映射到Java类型等相关内容,可以在本站寻找。
本文标签: