我目前正在努力改进项目共享配置的方式.我们为所有库和微服务(即许多git repos)提供了许多不同的多模块gradle项目.
我的主要目标是:
我目前的解决方案是使用init脚本的自定义gradle分发:
mavenLocal()和我们的Nexus存储库到项目repos(非常类似于Gradle init脚本文档示例,除了它添加repos以及验证它们)build.gradle文件几乎只用于依赖.这是init脚本(已清理):
/**
* Gradle extension applied to all projects to allow automatic configuration of Corporate plugins.
*/
class CorporatePlugins {
public static final String NEXUS_URL = "https://example.com/repository/maven-public"
public static final String CORPORATE_PLUGINS = "com.example:corporate-gradle-plugins"
def buildscript
CorporatePlugins(buildscript) {
this.buildscript = buildscript
}
void version(String corporatePluginsVersion) {
buildscript.repositories {
maven {
url NEXUS_URL
}
}
buildscript.dependencies {
classpath …Run Code Online (Sandbox Code Playgroud) 我使用下面的Java代码创建了一个CSV文件:
String csv = rs.getString("UPLOAD_FOLDER_PATH")+".csv";
CSVWriter writer = new CSVWriter(new FileWriter(csv));
String [] filevalues = new String[filevaluesarray.size()];
filevalues=filevaluesarray.toArray(filevalues);
writer.writeNext(filevalues);
writer.close();
Run Code Online (Sandbox Code Playgroud)
我收到了CSV文件,但该文件的内容包含不需要的双引号.
例如."ABC", "123", "KDNJ"
我不会从添加这些双引号的地方得到.
我刚刚开始使用WebDriver,我正在尝试学习最佳实践,特别是使用PageObjects和PageFactory.
我的理解是,PageObjects应该在网页上公开各种操作,并将WebDriver代码与测试类隔离开来.通常,相同的操作可能导致导航到不同的页面,具体取决于所使用的数据.
例如,在此假设的登录方案中,提供管理员凭据会将您带到AdminWelcome页面,并且提供客户凭据会将您带到CustomerWelcome页面.
所以最简单的方法是公开两个返回不同PageObjects的方法...
package example;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.FindBy;
import org.openqa.selenium.support.PageFactory;
public class Login {
@FindBy(id = "username")
private WebElement username;
@FindBy(id = "password")
private WebElement password;
@FindBy(id = "submitButton")
private WebElement submitButton;
private WebDriver driver;
public Login(WebDriver driver){
this.driver = driver;
}
public AdminWelcome loginAsAdmin(String user, String pw){
username.sendKeys(user);
password.sendKeys(pw);
submitButton.click();
return PageFactory.initElements(driver, AdminWelcome.class);
}
public CustomerWelcome loginAsCustomer(String user, String pw){
username.sendKeys(user);
password.sendKeys(pw);
submitButton.click();
return PageFactory.initElements(driver, CustomerWelcome.class);
}
} …Run Code Online (Sandbox Code Playgroud) 所以我正在解析.csv文件.我在StackOverflow上的某个地方接受了另一个线程的建议并下载了SuperCSV.我终于完成了一切工作,但现在我遇到了一个似乎很难解决的错误.
出现此问题的原因可能是也可能未填充最后两列数据.下面是.csv文件的示例,第一行缺少最后一列,第二行完全完成:
2012:07:25,11:48:20,922,"uLog.exe","",按键,1246,341,-1.00,-1.00,1.00,班次2012:07:25,11:48:21,094," uLog.exe","",按下键,1246,341,-1.00,-1.00,1.00,b,Shift
根据我对Super CSV Javadoc的理解,如果存在可变数量的列,则无法使用CsvBeanReader填充Java Bean .这似乎真的很愚蠢,因为我觉得在初始化Bean时,应该允许这些缺少的列为null或其他一些默认值.
作为参考,这是我的解析器的完整代码:
public class ULogParser {
String uLogFileLocation;
String screenRecorderFileLocation;
private static final CellProcessor[] cellProcessor = new CellProcessor[] {
new ParseDate("yyyy:MM:dd"),
new ParseDate("HH:mm:ss"),
new ParseDate("SSS"),
new StrMinMax(0, 100),
new StrMinMax(0, 100),
new StrMinMax(0, 100),
new ParseInt(),
new ParseInt(),
new ParseDouble(),
new ParseDouble(),
new ParseDouble(),
new StrMinMax(0, 100),
new StrMinMax(0, 100),
};
public String[] header = {"Date", "Time", "Msec", "Application", "Window", "Message", "X", "Y", "RelDist", "TotalDist", "Rate", "Extra1", "Extra2"}; …Run Code Online (Sandbox Code Playgroud) 我正在尝试将Spring Cloud Stream应用程序构建脚本移植到Kotlin.到目前为止,非常好,除了依赖管理块.在网上很难找到任何东西.样本也不包括该主题.
如何将以下块转换为build.gradle.kts?谢谢.
dependencyManagement {
imports {
mavenBom "org.springframework.cloud:spring-cloud-dependencies:Camden.SR2"
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个实用工具方法来查找特定字段的对象的getter方法(使用反射):
public static Method findGetter(final Object object, final String fieldName) {
if( object == null ) {
throw new NullPointerException("object should not be null");
} else if( fieldName == null ) {
throw new NullPointerException("fieldName should not be null");
}
String getterName = getMethodNameForField(GET_PREFIX, fieldName);
Class<?> clazz = object.getClass();
try {
return clazz.getMethod(getterName);
} catch(final NoSuchMethodException e) {
// exception handling omitted
} catch(final SecurityException e) {
// exception handling omitted
}
}
Run Code Online (Sandbox Code Playgroud)
我想编写一个涵盖SecurityException场景的单元测试,但是如何让getMethod抛出SecurityException呢?
javadoc声明getMethod …
我们有许多使用Velocity生成项目的代码生成器.这一代可能非常复杂:
在调用velocity之前使用反射(以反省我们必须与之交互的第三方代理) - 将结果属性(复杂对象图)添加到速度上下文中
项目结构和文件可能会根据所选的选项而有所不同
模板不仅仅是变量替换(它们使用添加到速度上下文的自定义对象,它包含许多派生属性,包括在模板中迭代的其他对象的集合)
我喜欢用maven原型替换它们,因为它们也使用Velocity,但看起来它们似乎只能进行简单的变量替换和静态文件/文件夹结构.
有没有办法在从原型创建项目之前进行处理,将对象添加到速度上下文,并让原型模板能够访问它们?
如果是这样,创建的文件夹和文件是否可以动态?(或者每个变体需要一个单独的原型吗?)
或者编写自定义Mojo更好吗?(基本上用Maven插件包装现有的生成器)
我正在使用Super CSV,它看起来像一个惊人的包.
我唯一担心的是如何使用名称中带空格的列.不,我不能回去自己删除空格.这些文件将由数百个提供给我,我没有时间返回并修复每个文件的所有60列,我不能相信其他人正确地做到这一点.
如何使用标题中带有空格的列(即"名字"而不是"FirstName"或"firstName")?
谢谢!
有关编码样本,请查看此处:http://supercsv.sourceforge.net/codeExamples_general.html
文件EntityManager.persist()说它会Make an instance managed and persistent.
它将实体持久化到数据库,但是当我调用该EntityManager.contains()方法来检查我刚刚持有的实体是否被管理时,它返回false.
我只想知道为什么会这样?也许有些东西我无法做到或者我忽略了什么?
建议将不胜感激:D
我正在寻找这个问题的答案,但没有找到。有没有人有解决此类问题的方法。我有一组文本变量,必须使用 Java 将它们写入 .CSV 文件中。我目前正在做一个使用 JavaScript 的项目,需要 Java。这是我现在拥有的一个函数,可以很好地完成工作并将文本逐行写入 .CSV。
function writeFile(filename, data)
{
try
{
//write the data
out = new java.io.BufferedWriter(new java.io.FileWriter(filename, true));
out.newLine();
out.write(data);
out.close();
out=null;
}
catch(e) //catch and report any errors
{
alert(""+e);
}
}
Run Code Online (Sandbox Code Playgroud)
但现在我必须像下面的例子一样一篇一篇地写出部分文本。
first0,second0,third0
first1,second1,third1
first2,second2,third2
.
.
.
first9,second9,third9
Run Code Online (Sandbox Code Playgroud)
所以算法是这样的。该函数用逗号写入first0,然后转到下一行写入first1,转到下一行写入first2,依此类推,直到first9。该部分完成后,脚本将转到文件开头并在逗号后面写入 secondary0,转到下一行并在逗号后面写入 secondary1,依此类推。你明白了。
所以现在我需要java
我有一个CSV文件有一些引用问题:
"Albanese Confectionery","157137","ALBANESE BULK ASST. MINI WILD FRUIT WORMS 2" 4/5LB",9,90,0,0,0,.53,"21",50137,"3441851137","5 lb",1,4,4,$6.7,$6.7,$26.8
Run Code Online (Sandbox Code Playgroud)
SuperCSV正在窒息这些水果虫(双关语).我知道2"应该是2"",但事实并非如此.LibreOffice实际上正确地解析了这个(让我感到惊讶).我正在考虑编写自己的小解析器,但其他行在字符串中有逗号:
"Albanese Confectionery","157230","ALBANESE BULK JET FIGHTERS,ASSORTED 4/5 B",9,90,0,0,0,.53,"21",50230,"3441851230","5 lb",1,4,4,$6.7,$6.7,$26.8
Run Code Online (Sandbox Code Playgroud)
有没有人知道Java库会处理这样的疯狂事情?或者我应该尝试所有可用的?或者我最好自己解决这个问题?
在典型的科特林配置在摇篮项目是非常的样板,我正在寻找抽象出来到外部构建脚本,以便它可以重复使用的方式.
我有一个工作的解决方案(下面),但感觉有点像黑客,因为kotlin-gradle-plugin不能以这种方式开箱即用.
从外部脚本应用任何非标准插件是很麻烦的,因为你不能通过id应用插件,即
apply plugin: 'kotlin' 会导致 Plugin with id 'kotlin' not found.
简单(通常)的解决方法是通过插件的完全限定类名来应用,即
apply plugin: org.jetbrains.kotlin.gradle.plugin.KotlinPluginWrapper
在这种情况下抛出一个很好的小异常,表明插件可能不是这样调用的:
Failed to determine source cofiguration of kotlin plugin.
Can not download core. Please verify that this or any parent project
contains 'kotlin-gradle-plugin' in buildscript's classpath configuration.
Run Code Online (Sandbox Code Playgroud)
所以我设法破解了一个插件(只是真正的插件的修改版本),迫使它从当前的buildcript中找到插件.
kotlin.gradle
buildscript {
ext.kotlin_version = "1.0.3"
repositories {
jcenter()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
compile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
}
apply plugin: CustomKotlinPlugin
import org.jetbrains.kotlin.gradle.plugin.CleanUpBuildListener
import …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用包含两个字段(制表符分隔)的超级CSV和未加引号的字符串来解析CSV文件.
occugroup_code occugroup_name
110000 Management Occupations
130000 Business and Financial Operations Occupations
150000 Computer and Mathematical Occupations
我很难弄清楚如何配置CsvPreference以便能够为每两个返回一个Map.有人遇到过这个问题吗?
java ×10
csv ×6
supercsv ×5
gradle ×3
kotlin ×3
archetypes ×1
build-script ×1
file-io ×1
jpa ×1
jta ×1
junit ×1
maven ×1
opencsv ×1
pageobjects ×1
persistence ×1
reflection ×1
selenium ×1
spring ×1
velocity ×1
webdriver ×1