小编Jam*_*ett的帖子

Gradle with Gradle Kotlin DSL中的Boilerplate项目配置

我目前正在努力改进项目共享配置的方式.我们为所有库和微服务(即许多git repos)提供了许多不同的多模块gradle项目.

我的主要目标是:

  • 不要在每个项目中复制我的Nexus存储库配置(同样,我可以放心地假设URL不会更改)
  • 为了使我的自定义Gradle插件(发布到Nexus)可用于每个项目,只需极少的样板/复制(它们应该可用于每个项目,项目唯一关心的是它使用的版本)
  • 没有魔力 - 开发人员应该明白如何配置所有内容

我目前的解决方案是使用init脚本的自定义gradle分发:

  • 添加mavenLocal()和我们的Nexus存储库到项目repos(非常类似于Gradle init脚本文档示例,除了它添加repos以及验证它们)
  • 配置一个扩展,允许我们的gradle插件添加到buildscript类路径(使用此解决方法).它还添加了我们的Nexus repo作为buildcript repo,因为它是托管插件的地方.我们有很多插件(基于Netflix优秀的星云插件)用于各种样板:标准项目设置(kotlin设置,测试设置等),发布,发布,文档等,这意味着我们的项目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)

gradle kotlin gradle-kotlin-dsl

30
推荐指数
2
解决办法
2864
查看次数

生成的csv文件中不需要的双引号

我使用下面的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"

我不会从添加这些双引号的地方得到.

java csv file-io opencsv supercsv

29
推荐指数
3
解决办法
3万
查看次数

如何实现可以返回不同PageObjects的WebDriver PageObject方法

我刚刚开始使用WebDriver,我正在尝试学习最佳实践,特别是使用PageObjectsPageFactory.

我的理解是,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)

java selenium webdriver pageobjects

14
推荐指数
2
解决办法
2万
查看次数

使用CsvBeanReader读取具有可变列数的CSV文件

所以我正在解析.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)

java csv supercsv

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

Gradle Script Kotlin和dependencyManagement

我正在尝试将Spring Cloud Stream应用程序构建脚本移植到Kotlin.到目前为止,非常好,除了依赖管理块.在网上很难找到任何东西.样本也不包括该主题.

如何将以下块转换为build.gradle.kts?谢谢.

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:Camden.SR2"
    }
}
Run Code Online (Sandbox Code Playgroud)

spring build-script gradle kotlin

9
推荐指数
3
解决办法
2205
查看次数

如何使Class.getMethod()抛出SecurityException

我有一个实用工具方法来查找特定字段的对象的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 …

java reflection junit

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

我可以使用Maven原型插件向Velocity上下文添加自定义对象吗?

我们有许多使用Velocity生成项目的代码生成器.这一代可能非常复杂:

  • 在调用velocity之前使用反射(以反省我们必须与之交互的第三方代理) - 将结果属性(复杂对象图)添加到速度上下文中

  • 项目结构和文件可能会根据所选的选项而有所不同

  • 模板不仅仅是变量替换(它们使用添加到速度上下文的自定义对象,它包含许多派生属性,包括在模板中迭代的其他对象的集合)

我喜欢用maven原型替换它们,因为它们也使用Velocity,但看起来它们似乎只能进行简单的变量替换和静态文件/文件夹结构.

  1. 有没有办法在从原型创建项目之前进行处理,将对象添加到速度上下文,并让原型模板能够访问它们?

  2. 如果是这样,创建的文件夹和文件是否可以动态?(或者每个变体需要一个单独的原型吗?)

  3. 或者编写自定义Mojo更好吗?(基本上用Maven插件包装现有的生成器)

java velocity archetypes maven

8
推荐指数
0
解决办法
1060
查看次数

超级CSV(Java) - 读取列名称中包含空格的文件

我正在使用Super CSV,它看起来像一个惊人的包.

我唯一担心的是如何使用名称中带空格的列.不,我不能回去自己删除空格.这些文件将由数百个提供给我,我没有时间返回并修复每个文件的所有60列,我不能相信其他人正确地做到这一点.

如何使用标题中带有空格的列(即"名字"而不是"FirstName"或"firstName")?

谢谢!

有关编码样本,请查看此处:http://supercsv.sourceforge.net/codeExamples_general.html

java csv supercsv

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

EntistManager.contains()在persist()后返回false

文件EntityManager.persist()说它会Make an instance managed and persistent.

它将实体持久化到数据库,但是当我调用该EntityManager.contains()方法来检查我刚刚持有的实体是否被管理时,它返回false.

我只想知道为什么会这样?也许有些东西我无法做到或者我忽略了什么?

建议将不胜感激:D

java persistence jpa jta entitymanager

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

逐列写入 CSV 文件

我正在寻找这个问题的答案,但没有找到。有没有人有解决此类问题的方法。我有一组文本变量,必须使用 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

java csv

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

带有未转义引号的Java CSV解析器

我有一个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库会处理这样的疯狂事情?或者我应该尝试所有可用的?或者我最好自己解决这个问题?

java csv supercsv

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

如何跨多个Gradle项目共享样板Kotlin配置?

典型的科特林配置在摇篮项目是非常的样板,我正在寻找抽象出来到外部构建脚本,以便它可以重复使用的方式.

我有一个工作的解决方案(下面),但感觉有点像黑客,因为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)

gradle kotlin gradle-plugin

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

使用超级CSV解析制表符分隔文件

我正在尝试使用包含两个字段(制表符分隔)的超级CSV和未加引号的字符串来解析CSV文件.

    occugroup_code  occugroup_name
    110000          Management Occupations  
    130000          Business and Financial Operations Occupations   
    150000          Computer and Mathematical Occupations   

我很难弄清楚如何配置CsvPreference以便能够为每两个返回一个Map.有人遇到过这个问题吗?

java csv supercsv

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