小编And*_*ker的帖子

Maven多模块项目 - 将所有"包"JARS从子模块复制到父/目标/

我有一个包含很多子模块的maven项目.我正在寻找的是获取聚合POM的/ target /目录中包含的子模块生成的所有.jar文件的方法,以便以后可以方便地使用它们.

  • 它们不需要合并.最好不要,但如果必须的话那就没问题.
  • 不关心依赖性
  • 这主要是为了方便起见

我正在做的基本版本:

Prj1/pom.xml  =>  prj1/target/proj1.jar  (and classes/generated-sources/etc)
Prj2/pom.xml  =>  prj2/target/proj2.jar
Main/pom.xml  =>
                  main/target/proj1.jar
                  main/target/proj2.jar
                  ... classes/generated-sources not needed at all,
                  ... but they could be combined here.  I assume they will be
Run Code Online (Sandbox Code Playgroud)

我一直在阅读,并使用SO的一些建议.到目前为止,我还没有找到办法做到这一点,但我确信它就在那里.

编辑:

对于所有包含的子程序,我已经放弃了以简单的方式使用它.到目前为止,我得到的最佳答案是使用dependancy插件手动指定(再次)要包含的每个子模块.我们的想法是能够轻松地为数十个客户配置POM,只需包含必要的模块,然后将其神奇地粘贴在一个位置的所有子模块的罐子中.Maven非常好,当你没有做太多时,但是当你尝试时,角括号税是不可思议的.

我仍然觉得奇怪的是,这些看似标准的任务(从SO上提出的问题判断,以及任何正常项目会做什么)都是如此困难.maven3更好吗?

maven multi-module

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

嵌套构造函数(或工厂方法)是否良好,或者每个都应该执行所有初始化工作

对于重载的New或Factory样式方法,嵌套构造函数调用(从设计POV)是一个好主意吗?这主要适用于简单的构造函数,其中每个重载构建在前一个构建器上.

MyClass( arg1 ) { 
    _arg1 = arg1; 
    _otherField = true; 
    _color="Blue" 
}
MyClass( arg1, arg2) : this(arg1) { 
    _arg2 = arg2  
}
MyClass( arg1, arg2, arg3) : this(arg1, ar2) { 
    _arg3 = arg3; 
}
Run Code Online (Sandbox Code Playgroud)

或者使用工厂方法:

static NewInstance(arg1 ) { 
   _arg1 = arg1;       
}
static NewInstance(arg1, arg2) {
   f = NewInstance(arg1);
   f._arg2 = arg2;
}
//... and so on
Run Code Online (Sandbox Code Playgroud)

我可以看到双方都有一些弊端

  • 嵌套隐藏构造函数正在执行的操作
  • 不嵌套重复所有功能

所以,这样做是个好主意,还是让我为一些我没有看到的问题做好准备.出于某种原因,我感到不安,主要是因为它分担了初始化的责任.

编辑: @Jon Skeet:我现在明白为什么这太困扰我了.我倒退了!我写了整篇文章,甚至没有注意到,它只是闻到了.我所拥有的大多数其他情况(我写的),按你推荐的方式做,但这肯定不是我这样做的唯一一个.我注意到我做得比较复杂,但是我看起来很简单. 我喜欢微编辑.我也喜欢首字母缩略词!

c#

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

用数字创建日期(新日期(2012年,03年,...)给出错误的月份(+1)

当创建一个new Date使用号码为部分对象,我回来的值精确1个月未来我把在"月"的价值.

new Date(2012, 05, 17, 00, 00, 00)
Sun Jun 17 2012 00:00:00 GMT+0800 (HKT)  // june?!
Run Code Online (Sandbox Code Playgroud)

但是,正常解析完全相同的字符串会返回正确的时间:

new Date("2012-05-17 00:00:00")
Thu May 17 2012 00:00:00 GMT+0800 (HKT)
Run Code Online (Sandbox Code Playgroud)

我在ie/ff/chrome中得到了相同的结果.删除小时/分钟/秒没有任何效果.我可以通过在设置月份之前减去一个来解决它,但我只是改为将日期写为字符串.

编辑: 字符串解析在IE中不起作用.我不知道我做了什么,但我发誓我做了那件事.多数民众赞成.为什么我首先避免它.我现在转而使用moment.js.

啊,现在我明白了.就像常规的java日期一样,我很少编写代码,甚至很少,甚至总是用库(joda等).无论如何,这是多么可怕的想法.以下是双关语问题:为什么Java Calendar中的1月 0月

为什么会这样?

javascript

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

创建在另一个线程上运行的进度条,同时在主线程中保持计算

前言: 我知道这是一种不寻常/不正确的方法.我可以用"真正的"ShowDialog(),后台工作者/线程等来做到这一点.我不是那样寻求帮助的; 我正在努力做我在这里描述的具体内容,即使它很难看.如果由于X原因这是不可能的,请告诉我.


我为一些长期运行的操作创建了一个奇特的进度对话框.我需要在新线程上显示此对话框,同时在调用(大多数情况下为UI)线程上继续处理.

这有3个真正的要求:

  • 阻止用户与调用表单交互(类似于ShowDialog(this))
  • 将进度对话框保持在主窗口上方(现在可能落后)
  • 允许主线程继续处理

我看起来像这样(到目前为止工作得很好,就运行而言,除了上面的那些问题):

Using ... ShowNewProgressDialogOnNewThread() ...
      Logic
      UpdateProgress() //static
      Logic
      UpdateProgress() //static, uses Invoke() to call dialog
      ...
End Using  // destroys the form, etc
Run Code Online (Sandbox Code Playgroud)

我尝试了几种方法来做到这一点:

  • BackgroundWorker/Thread 上的ShowDialog()
  • Action.BeginInvoke()调用一个函数
  • ProgressForm.BeginInvoke( ...调用ShowDialog的方法......)
  • 在实现IWin32Window的类中包装main表单,因此它可以被称为交叉线程并传递给ShowDialog() - 这个稍后在某个地方失败,但至少会导致ShowDialog()不立即barf.

关于如何使这项工作的任何线索或智慧?

解决方案(现在)

  • 对EnableWindow的调用正是我所寻求的.
  • 我根本没有遇到任何崩溃
  • 更改为使用ManualResetEvent
  • 我设置了TopMost,因为我不能总是保证表单最终会在顶部.也许有更好的方法.
  • 我的进度表就像一个启动画面(没有大小调整,没有工具栏等),也许是因为没有崩溃(在回答中提到)
  • 这是EnableWindow主题上的另一个线程(没有引用此修复,tho)

vb.net multithreading dialog winforms

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

尝试优化选择"近似最接近记录"的查询

我有一个包含大量数据的表,我们特别关心这个date领域.原因是数据量上升了大约30倍,旧的方式很快就会崩溃.我希望您可以帮助我优化需求的查询:

  • 获取日期列表(由基于cte的表值函数生成)
  • 检索每个日期的单个记录
    • 基于'最近'的一些定义

例如,当前表包含5秒(+/-一点)间隔的数据.我需要对该表进行采样并获得最接近30秒间隔的记录.

我现在所做的工作得很好.我只是好奇是否有办法更优化它.如果我能在Linq To SQL中做到这一点,那也是很好的.考虑到日期值的数量(约200万行最小值),我甚至对索引的建议感兴趣.

declare @st  datetime ; set @st  = '2012-01-31 05:05:00';
declare @end datetime ; set @end = '2012-01-31 05:10:00';

select distinct
    log.*   -- id, 
from 
    dbo.fn_GenerateDateSteps(@st, @end, 30) as d
        inner join lotsOfLogData log on l.Id = (
            select top 1 e.[Id]
            from 
                lotsOfLogData as log  -- contains data in 5 second intervals
            where
                log.stationId = 1000 
                -- search for dates in a certain range
                AND utcTime between DateAdd(s, -10, dt) …
Run Code Online (Sandbox Code Playgroud)

t-sql sql-server sql-server-2005

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

覆盖EntityFramework SaveChanges - 获取SQL并调用自定义proc

我正在寻找一种方法来覆盖EF中的SaveChanges方法/过程.我们需要以某种方式获取SQL,阻止正常的更新/删除/插入执行,并使用生成的SQL来运行我们的自定义过程.

  • SaveChanges()正常打电话.让EF生成SQL.
  • 获取SQL
  • 防止SQL以正常方式执行
  • 调用自定义存储过程(需要额外的参数等)
  • 假装我们执行SaveChanges(或只返回0)

我看到的唯一真正的问题是从SaveChanges方法内部抓取SQL .我们要做的就是这样,理想情况......

  1. 获取提供者/连接/等
  2. 设置事件挂钩来处理这个问题
  3. 完成,没有代码更改/覆盖等.

我们使用MVC4和EF5来对抗3个字母的首字母缩略词数据库.这里的要点是避免在每个更新操作中手动编写SQL,并依靠EF为我们生成所有这些.由于该过程采用直接SQL

是的,这不是一个好方法(单一程序),但我们别无选择.没有任何.如果我们不能这样做,那么我们将需要编写自定义sql.也许我们可以采用另一种方式来实现这一点,我们可以通过上下文并自己完成工作?然后我们可以审核从未调用'SaveChanges()':D


我用它EFTracingProvider作为起点来创建我自己的提供者(以及其他一些东西).您也可以通过将所有内容放在Entities类中并处理事件来使用EFTracingProvider.您将看不到修改后的SQL,因为此事件将在此之后触发,因此您需要自己进行日志记录.这已被剥离,以更好地适应网站:)

public class MyEntities : MyBaseEntities
{

    public MyEntities(): this(connectionString: "name=MyBaseEntities") {}
    public MyEntities(string connectionString) 
             : base(MakeConnection(connectionString, "EFTracingProvider")) {}

    /// <summary>
    /// Insert the wrapped connection by calling the base toolkit.
    private static EntityConnection MakeConnection(string connectionString, params string[] providers)
    {
        var conn = EntityConnectionWrapperUtils.CreateEntityConnectionWithWrappers(
            connectionString,
            providers
            );

        //get the tracing connection, so that we can attach event …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework entity-framework-5

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

升级后,原始 sql 查询在 postgres 上将 json 字段作为字符串返回

我正在将 Django 应用程序从 2.2.7 升级到 3.1.3。该应用程序使用 Postgres 12 和 psycopg2 2.8.6。

我按照说明更改了对 的所有django.contrib.postgres.fields.JSONField引用django.db.models.JSONField,并进行了迁移。这不会对我的架构产生任何更改(这很好。)

但是,当我执行原始查询时,这些jsonb列的数据在某些时候以文本形式返回,或转换为文本。直接使用Model.objects.get(...).

import os, django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "big_old_project.settings")
django.setup()

with connection.cursor() as c:
    c.execute("select name, data from tbl where name=%s", ("rex",))
    print(c.description)
    for row in c.fetchall():
        for col in row:
            print(f"{type(col)} => {col!r}")

(Column(name='name', type_code=1043), Column(name='data', type_code=3802))
<class 'str'> => 'rex'
<class 'str'> => '{"toy": "bone"}'
Run Code Online (Sandbox Code Playgroud)

[编辑] 使用原始连接给出了预期的结果:

conn = psycopg2.connect("dbname=db user=x password=z")
with conn.cursor() as c:
    ...
<class 'str'> => …
Run Code Online (Sandbox Code Playgroud)

python django postgresql

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

当其他字段更改时,验证1字段(不显眼),并仅检查1个规则

当另一个字段中的值发生变化时,有没有办法在一个字段上触发特定的 jquery-unobtrusive规则?

我有一个带有两个日期字段的表单(比如开始/结束),验证end必须大于start.在已经设置的更改end后的简单情况下,这可以正常工作start.不做的是允许是:

  • 设置end第一,然后设置start
  • start在两者都已设置之后进行更改,并违反约束

服务器端验证当然会捕获它,但end即使在修复后仍然设置错误仍然很糟糕start,或者当值in end更改为无效值时没有出现错误.触发特定规则的原因是我不希望在用户有机会输入值之前触发相同字段上的规则requireddate格式化规则.表格开始"干净".但是,如果这是不可能的,那么解雇所有规则是可以的.

很抱歉没有代码示例,但我甚至不知道从哪里开始.

更新:

我目前所做的是在模型中挖掘(因为这是一个asp.net mvc项目),找到属性,并直接读取它的属性.

var controllerCtx = ViewContext.Controller.ControllerContext;
var da = ViewData.ModelMetadata.GetValidators(controllerCtx)
            .SelectMany(x => x.GetClientValidationRules())
            .Where(x => x.ValidationType == "isdateafter")
            .FirstOrDefault();

var otherid = da == null ? "" : da.ValidationParameters["propertytested"];
Run Code Online (Sandbox Code Playgroud)

然后在普通的HTML部分中,我start对它进行测试并查看它是否是日期选择器,然后连接基本检查,并启动所有验证规则.由于规则不多,我只是end在运行之前检查字段中是否有值.我想使用下面的巧妙解决方案,并在本周有一点空闲时间时给它一个机会.

@if (otherid != "") {
    <text>
    var other = $("#@otherid");
    if (other && other.hasClass('hasDatepicker')) { …
Run Code Online (Sandbox Code Playgroud)

jquery unobtrusive-validation asp.net-mvc-4

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

使用API​​限制和密钥时,Google会映射api REQUEST_DENIED

我很高兴地使用地图中的地理编码API多年,没有问题.最近我为不同的环境制作了更多的密钥,并决定向它们添加API限制是个好主意.

当我添加这些API限制时,我突然开始获得REQUEST_DENIED.

https://maps.googleapis.com/maps/api/geocode/json?latlng=={lt},{ln}&key={key}

This IP, site or mobile application is not authorized to use this API key, ...
REQUEST_DENIED
Run Code Online (Sandbox Code Playgroud)

删除它们允许再次调用API.


这是键的设置.我们只启用了2个API,并且它们都添加到此密钥中.在此配置中,我无法调用Geocoding API.当我删除限制时,Key再次工作,没问题.我没有设置任何其他应用限制.


API限制页面

google-maps

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

在 EPPlus 中设置*两者*值和公式

有没有办法设置单元Value的&属性Formula,以便它们保留到写入的 XLSX 文件中?

由于EPPlus不计算公式(它依赖excel来计算),所以我为用户预先计算结果。这样,如果他们不打开文件,而是重新上传文件,则“值”不为空。公式非常简单。

注意: sheet.SetValue().Value都重置类的 Formula 属性ExcelCell,因此.Value必须首先调用。请参阅源代码以ExcelCell.SetRichText()了解它的发生。

以下是测试用例中几乎完全相同的代码:

var package = new ExcelPackage(); // and setup code
var sheet = package.Workbook.Worksheets.First(); 
sheet.Cells["A2"].Value = 10; 
sheet.Cells["A2"].Formula = "=A1 * 3";
// Cell is OK now.  shows both ".Value" and ".Formula"

using (var s = new MemoryStream()) { 
    package.Save(s);
    var newPackage = new ExcelPackage(s);
    var newSheet = newPackage.Workbook.Worksheets.First();
    var cell = newSheet.Cells["A2"];
    // cell.Value == null
    // …
Run Code Online (Sandbox Code Playgroud)

excel epplus

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

如何使用 HTTPie 发送嵌套 JSON 的 POST 请求?

我想从Windows shell使用HTTPie发送POST请求

JSON 输入看起来像:

{
    "name": "pub1",
    "email": "support@pub1.com",
    "address": {
        "city": "new york",
        "pincode": 12345
    }
}
Run Code Online (Sandbox Code Playgroud)

我努力了:

http -v POST http://127.0.0.1:8000/publication/ name=pub1 email=support@pub1.com address:="{"city":"new york", "pincode":12345}"
Run Code Online (Sandbox Code Playgroud)

它给出以下错误:

http: error: "address:={city: new": Expecting property name enclosed in double quotes: line 1 column 2 (char 1)
Run Code Online (Sandbox Code Playgroud)

httpie json错误

我使用Postman及其工作来完成此操作,但我想知道如何使用httpie 来完成此操作?

我还尝试了 SOF 和 GitHub 上的可用解决方案,但无法找出问题所在。

json cmd httpie

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

.Net - 检测所需标识符是否为关键字

在.net中,有没有办法检测某个单词是否是给定.net语言中的关键字?

我正在为这个项目使用一个相当简单的代码生成器,我想开始自动化它.现在我手工完成每一个,所以解决出现的任何问题都很容易.但是,一旦这种情况自动开始,我将需要一种方法来检测我需要用作标识符的单词是否是关键字.我仍然可以使用它,我只需要正确引用它.

我知道我可以简单地引用我生成的所有内容,但我想保持生成的代码很漂亮:)

我需要引用的一类例子:

vb:  Public [Class] As String = "CLASS"
c#:  public String @class = "CLASS";
Run Code Online (Sandbox Code Playgroud)

.net code-generation

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

使用".."循环中的循环变量会导致类型转换?

我有一个非常简单的定时循环,用户..最多.但是,当我在块中使用循环变量(这里作为索引)时,它似乎会导致变量类型发生变化.如果我触摸循环变量,那么秒表没有问题.

let sw = Stopwatch::start_new();
let all_data = vec!["a", "b", "c", "d", "e"];
let iters = 2;
for x in 0..iters {
    println!("Message: {:?}", all_data[x]);
}
println!("Thing took {}ms per", sw.elapsed_ms() / iters);
Run Code Online (Sandbox Code Playgroud)

打印出已用时间时,这会给我一个类型错误.它似乎已改为usize

我可以通过使用来解决这个问题all_data[x as usize].Rust实际上是以某种方式更改实际变量,还是类型推断只是采用最后一次使用并假设该类型?

src/main.rs:95:55: 95:58 error: mismatched types [E0308]
src/main.rs:95     println!("Thing took {}ms per", sw.elapsed_ms() / iters);
                                                                     ^~~
<std macros>:2:27: 2:58 note: in this expansion of format_args!
<std macros>:3:1: 3:54 note: in this expansion of print! …
Run Code Online (Sandbox Code Playgroud)

rust

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